`
wenxin2009
  • 浏览: 320547 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JXL读写Excel

    博客分类:
  • java
 
阅读更多

前几天由于需要写了个jxl读写excel类,示例代码如下:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.pm.commons.CommdbUtil;
import com.pm.commons.FinalData;
import com.pm.commons.Format;
import com.pm.entity.DaifaVO;
import com.pm.hibernate.po.PayCashInfo;
import com.pm.hibernate.po.Payjnls;
import com.pm.hibernate.po2.AcctxnBook;
import com.pm.report.bean.LiquidationBean;
import com.pm.structure.dao.AcctxnBookDao;
import com.pm.structure.dao.PayCashInfoDao;

/**
 * Excel工具类
 *
 */
public class ExcelUtil {
	
	private static Logger logger = LoggerFactory.getLogger(ExcelUtil.class);
	/** 手机号提款 */
	public static final String SERVCODE_100017 = "100017";
	/** 转账 */
	public static final String SERVCODE_100037 = "100037";
	/** 普通交易 */
	public static final String COMMON_0000000000 = "0000000000";
	/** 快速交易 */
	public static final String QUICK_0000000001 = "0000000001";
	
	/** 生成报表列名称  */
	public static final String[] REPORT_COLUMN_NAME = new String[]{
        "服务代码(服务名称)",
        "交易编码",
        "交易时间",
        "客户编码",
        "手机号码",
        "交易主账号",
        "主账号发卡行",
        "交易账号2",
        "PSAM卡号",
        "交易金额",
        "交易手续费",
        "交易状态",
        "交易标记",
        "本地交易流水",
        "清算日期",
        "交易渠道",
        "终端编码",
        "业务受理方",
        "原始业务流水",
        "原始业务参考号",
        "原始业务时间",
        "原始业务结算日期",
        "发送方业务流水",
        "发送发业务时间",
        "服务提供商",
        "SP商户编码",
        "SP终端编码",
        "SP结算日期",
        "SP交易流水",
        "SP交易时间",
        "SP参考号",
        "SP授权码",
        "主卡发卡行",
        "第二账号发卡行",
        "交易返回码",
        "SP返回码",
        "交易返回信息",
        "交易校验码",
        "交易备注"
    };
	
	/**
	 * 初始化报表标题Label
	 * @param sheet
	 * @throws WriteException 
	 * @throws RowsExceededException 
	 */
	private void initLabel(WritableSheet sheet) throws RowsExceededException, WriteException{
		for (int x = 0; x < REPORT_COLUMN_NAME.length; x++) {
			sheet.addCell(new Label(x, 0, REPORT_COLUMN_NAME[x]));
        }
	}
	
	/** 清算对比列名称 */
	public static final String[] LIQUIDATION_COLUMN_NAME = new String[]{
        "服务代码(服务名称)",
        "交易编码",
        "交易时间",
        "交易流水",
        "客户编码",
        "手机号码",
        "交易账号",
        "交易金额",
        "交易状态",
        "交易标记"
    };
	
	/** 代发对比列名称 */
	public static final String[] DAIFA_COLUMN_NAME = new String[]{
        "服务代码(服务名称)",
        "交易日期",
        "交易时间",
        "本地交易流水",
        "手机号码",
        "交易主账号",
        "交易账号2",
        "清算金额",
        "交易手续费",
        "交易金额",
        "姓名",
        "行号",
        "开户行",
        "状态",
        "接入渠道",
        "延迟",
        "返回码"
    };
	
	/**
	 * 初始化报表标题Label
	 * @param sheet
	 * @throws WriteException 
	 * @throws RowsExceededException 
	 */
	private void initLabel_2(WritableSheet sheet) throws RowsExceededException, WriteException{
		for (int x = 0; x < LIQUIDATION_COLUMN_NAME.length; x++) {
			sheet.addCell(new Label(x, 0, LIQUIDATION_COLUMN_NAME[x]));
        }
	}
	
	/**
	 * 初始化报表标题Label
	 * @param sheet
	 * @throws WriteException 
	 * @throws RowsExceededException 
	 */
	private void initLabel_3(WritableSheet sheet) throws RowsExceededException, WriteException{
		for (int x = 0; x < DAIFA_COLUMN_NAME.length; x++) {
			sheet.addCell(new Label(x, 0, DAIFA_COLUMN_NAME[x]));
        }
	}
	
	/**
	 * 添加单元格内容
	 * @param sheet
	 * @throws WriteException 
	 * @throws RowsExceededException 
	 */
	public void addCell(WritableSheet sheet,List<Payjnls> list) throws RowsExceededException, WriteException{
		Label lab;
		//写数据到excel单元格中
		for (int i = 0; i < list.size(); i++) {
			String bankName = "";//主卡
            String fee = "";//收的手续费
			Payjnls bean = list.get(i);
			if (bean.getId().getServcode().equals("100017") && StringUtils.isNotBlank(bean.getAccount())) {
                //手机提款显示银行信息
                PayCashInfo cashInfo = PayCashInfoDao.loadPayCashInfo(bean.getId().getLocaldate(),
                		bean.getLocaltime(), bean.getId().getLocallogno(), bean.getAccount().trim());
                if (StringUtils.isNotBlank(cashInfo.getBankName())) {
                    bankName = cashInfo.getBankProvince().trim() + "," + cashInfo.getBankCity().trim() + ","
                            + CommdbUtil.BANK_MAP.get(cashInfo.getBankId()) + "," + cashInfo.getBankName().trim() + ","
                            + cashInfo.getCustomerName();
                }
            }
            //TODO 以下服务编号,在交易系统流水表不计算手续费,是在后面的账务系统进行计算的
            if (bean.getId().getServcode().equals("100032") || bean.getId().getServcode().equals("100033")
                    || bean.getId().getServcode().equals("100034")) {
                AcctxnBook acctxnBook = new AcctxnBook();
                acctxnBook.setTxndate(bean.getId().getLocaldate());
                acctxnBook.setTxntime(bean.getLocaltime());
                acctxnBook.setTxnlogno(bean.getId().getLocallogno());
                acctxnBook = AcctxnBookDao.getAcctxnBook(acctxnBook);
                if (acctxnBook != null) {
                    fee = String.valueOf(acctxnBook.getTxnfee2());//收手续费
                }
            } else {
                fee = Format.fty(String.valueOf(bean.getFee()));
            }
            
			//服务代码(服务名称)
			lab = new Label(0, i+1, bean.getId().getServcode() + "(" + CommdbUtil.SERVICE_MAP.get(bean.getId().getServcode()) + ")");
			sheet.addCell(lab);
            //交易编码(交易名称)
			lab = new Label(1, i+1, bean.getId().getTradecode() + "(" + CommdbUtil.TRADE_MAP.get(bean.getId().getTradecode()) + ")");
			sheet.addCell(lab);
            //交易时间(日期+时间)
            lab = new Label(2, i+1, bean.getId().getLocaldate() + bean.getLocaltime());
            sheet.addCell(lab);
            //客户编码
            lab = new Label(3, i+1, bean.getCustomerid());
            sheet.addCell(lab);
            //手机号码
            lab = new Label(4, i+1, bean.getMobileNo());
            sheet.addCell(lab);
            //交易主账号
            lab = new Label(5, i+1, bean.getAccount());
            sheet.addCell(lab);
            //交易主账号发卡银行
            lab = new Label(6, i+1, bankName);
            sheet.addCell(lab);
            //交易主账号2
            lab = new Label(7, i+1, bean.getAccount2());
            sheet.addCell(lab);
            //PASM卡号
            lab = new Label(8, i+1, bean.getPsamid());
            sheet.addCell(lab);
            //交易金额
            lab = new Label(9, i+1, Format.fty(String.valueOf(bean.getAmount())));
            sheet.addCell(lab);
			//交易手续费
			lab = new Label(10, i+1, fee);
			sheet.addCell(lab);
            //交易状态
            String status = bean.getStatus();
            if (status.equals(FinalData.TRADE_STATUS_0.getValue())) {
                status = FinalData.TRADE_STATUS_0.getDesc();
            }
            if (status.equals(FinalData.TRADE_STATUS_1.getValue())) {
                status = FinalData.TRADE_STATUS_1.getDesc();
            }
            if (status.equals(FinalData.TRADE_STATUS_2.getValue())) {
                status = FinalData.TRADE_STATUS_2.getDesc();
            }
            lab = new Label(11, i+1, status);
            sheet.addCell(lab);
            //交易标记
            String payTag = bean.getPaytag();
            if (payTag.equals(FinalData.TRADE_FLAG_0.getValue())) {
				payTag = FinalData.TRADE_FLAG_0.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_1.getValue())) {
				payTag = FinalData.TRADE_FLAG_1.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_2.getValue())) {
				payTag = FinalData.TRADE_FLAG_2.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_3.getValue())) {
				payTag = FinalData.TRADE_FLAG_3.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_9.getValue())) {
				payTag = FinalData.TRADE_FLAG_9.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_R.getValue())) {
				payTag = FinalData.TRADE_FLAG_R.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_F.getValue())) {
				payTag = FinalData.TRADE_FLAG_F.getDesc();
			}
            lab = new Label(12, i+1, payTag);
            sheet.addCell(lab);
            //本地交易流水
            lab = new Label(13, i+1, bean.getId().getLocallogno());
            sheet.addCell(lab);
            //清算日期
            lab = new Label(14, i+1, bean.getLocalsettlmtdate());
            sheet.addCell(lab);
            //交易渠道
            String cum = bean.getChannelid();
            if (cum.equals(FinalData.TRADE_CHANNEL_0001.getValue())) {
                cum = FinalData.TRADE_CHANNEL_0001.getDesc();
            }
            if (cum.equals(FinalData.TRADE_CHANNEL_0002.getValue())) {
                cum = FinalData.TRADE_CHANNEL_0002.getDesc();
            }
            if (cum.equals(FinalData.TRADE_CHANNEL_0003.getValue())) {
                cum = FinalData.TRADE_CHANNEL_0003.getDesc();
            }
            lab = new Label(15, i+1, cum);
            sheet.addCell(lab);
            //终端编码
            lab = new Label(16, i+1, bean.getTermid());
            sheet.addCell(lab);
            //业务受理方
            lab = new Label(17, i+1, bean.getBranchid());
            sheet.addCell(lab);
            //原始业务流水
            lab = new Label(18, i+1, bean.getOrgtxlogno());
            sheet.addCell(lab);
            //原始业务参考号
            lab = new Label(19, i+1, bean.getOrgtxrefno());
            sheet.addCell(lab);
            //原始业务时间(日期+时间)
            lab = new Label(20, i+1, bean.getOrgtxdate() + bean.getOrgtxtime());
            sheet.addCell(lab);
            //原始业务结算日期
            lab = new Label(21, i+1, bean.getOrgsettlmtdate());
            sheet.addCell(lab);
            //发送方业务流水
            lab = new Label(22, i+1, bean.getSndtxlogno());
            sheet.addCell(lab);
            //发送发业务时间(日期+时间)	
            lab = new Label(23, i+1, bean.getSndtxdate() + bean.getSndtxtime());
            sheet.addCell(lab);
            //服务提供商
            lab = new Label(24, i+1, bean.getHostbranchid());
            sheet.addCell(lab);
            //SP商户编码
            lab = new Label(25, i+1, bean.getHostmerchid());
            sheet.addCell(lab);
            //SP终端编码
            lab = new Label(26, i+1, bean.getHosttermid());
            sheet.addCell(lab);
            //SP结算日期	
            lab = new Label(27, i+1, bean.getHostsettlmtdate());
            sheet.addCell(lab);
            //SP交易流水
            lab = new Label(28, i+1, bean.getHostlogno());
            sheet.addCell(lab);
            //SP交易时间(日期+时间)	
            lab = new Label(29, i+1, bean.getHostdate() + bean.getHosttime());
            sheet.addCell(lab);
            //SP参考号
            lab = new Label(30, i+1, bean.getHostrefno());
            sheet.addCell(lab);
            //SP授权码	
            lab = new Label(31, i+1, bean.getHostauthcode());
            sheet.addCell(lab);
            //主卡发卡行
            lab = new Label(32, i+1, bean.getIssuer());
            sheet.addCell(lab);
            //第二账号发卡行
            lab = new Label(33, i+1, bean.getIssuer2());
            sheet.addCell(lab);
            //交易返回码
            lab = new Label(34, i+1, bean.getMsgcode());
            sheet.addCell(lab);
            //SP返回码	
            lab = new Label(35, i+1, bean.getHostmsgcode());
            sheet.addCell(lab);
            //交易返回信息
            lab = new Label(36, i+1, bean.getMsgtext());
            sheet.addCell(lab);
            //交易校验码
            lab = new Label(37, i+1, bean.getCheckcode());
            sheet.addCell(lab);
            //交易备注
            lab = new Label(38, i+1, bean.getRemark());
            sheet.addCell(lab);
		}
	}
	
	/**
	 * 添加单元格内容
	 * @param sheet
	 * @throws WriteException 
	 * @throws RowsExceededException 
	 */
	public void addCell_2(WritableSheet sheet,List<LiquidationBean> list) throws RowsExceededException, WriteException{
		Label lab;
		//写数据到excel单元格中
		for (int i = 0; i < list.size(); i++) {
			LiquidationBean bean = list.get(i);
			//服务代码(服务名称)
//			lab = new Label(0, i+1, bean.getServcode() + "(" + CommdbUtil.SERVICE_MAP.get(bean.getServcode()) + ")");
			lab = new Label(0, i+1, bean.getServcode());
			sheet.addCell(lab);
            //交易编码(交易名称)
//			lab = new Label(1, i+1, bean.getTradecode() + "(" + CommdbUtil.TRADE_MAP.get(bean.getTradecode()) + ")");
			lab = new Label(1, i+1, bean.getTradecode());
			sheet.addCell(lab);
            //交易时间(日期+时间)
            lab = new Label(2, i+1, bean.getLocaldate());
            sheet.addCell(lab);
            //本地交易流水
            lab = new Label(3, i+1, bean.getLocallogno());
            sheet.addCell(lab);
            //客户编码
            lab = new Label(4, i+1, bean.getCustomerid());
            sheet.addCell(lab);
            //手机号码
            lab = new Label(5, i+1, bean.getMobileNo());
            sheet.addCell(lab);
            //交易主账号
            lab = new Label(6, i+1, bean.getAccount());
            sheet.addCell(lab);
            //交易金额
            if (null != bean.getAmount()) {
            	lab = new Label(7, i+1, Format.fty(String.valueOf(bean.getAmount())));
            	sheet.addCell(lab);
			}else if(StringUtils.isNotBlank(bean.getAmountStr())){
				lab = new Label(7, i+1, bean.getAmountStr());
				sheet.addCell(lab);
			}
            //交易状态
            String status = bean.getStatus();
            if (status.equals(FinalData.TRADE_STATUS_0.getValue())) {
                status = FinalData.TRADE_STATUS_0.getDesc();
            }
            if (status.equals(FinalData.TRADE_STATUS_1.getValue())) {
                status = FinalData.TRADE_STATUS_1.getDesc();
            }
            if (status.equals(FinalData.TRADE_STATUS_2.getValue())) {
                status = FinalData.TRADE_STATUS_2.getDesc();
            }
            lab = new Label(8, i+1, status);
            sheet.addCell(lab);
            //交易标记
            String payTag = bean.getPaytag();
            if (payTag.equals(FinalData.TRADE_FLAG_0.getValue())) {
				payTag = FinalData.TRADE_FLAG_0.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_1.getValue())) {
				payTag = FinalData.TRADE_FLAG_1.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_2.getValue())) {
				payTag = FinalData.TRADE_FLAG_2.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_3.getValue())) {
				payTag = FinalData.TRADE_FLAG_3.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_9.getValue())) {
				payTag = FinalData.TRADE_FLAG_9.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_R.getValue())) {
				payTag = FinalData.TRADE_FLAG_R.getDesc();
			}
            if (payTag.equals(FinalData.TRADE_FLAG_F.getValue())) {
				payTag = FinalData.TRADE_FLAG_F.getDesc();
			}
            lab = new Label(9, i+1, payTag);
            sheet.addCell(lab);
		}
	}
	
	/**
	 * 添加单元格内容
	 * @param sheet
	 * @throws WriteException 
	 * @throws RowsExceededException 
	 */
	public void addCell_3(WritableSheet sheet,List<DaifaVO> list) throws RowsExceededException, WriteException{
		Label lab;
		//写数据到excel单元格中
		for (int i = 0; i < list.size(); i++) {
            DaifaVO bean = list.get(i);
			//服务代码(服务名称)
			lab = new Label(0, i+1, bean.getServcode() + "(" + CommdbUtil.SERVICE_MAP.get(bean.getServcode()) + ")");
			sheet.addCell(lab);
            //交易日期
			lab = new Label(1, i+1, bean.getLocaldate());
			sheet.addCell(lab);
            //交易时间
            lab = new Label(2, i+1, bean.getLocaltime());
            sheet.addCell(lab);
            //本地交易流水
            lab = new Label(3, i+1, bean.getLocallogno());
            sheet.addCell(lab);
            //手机号码
            lab = new Label(4, i+1, bean.getMobileno());
            sheet.addCell(lab);
            //交易主账号
            lab = new Label(5, i+1, bean.getAccount());
            sheet.addCell(lab);
            //交易账号2
            lab = new Label(6, i+1, bean.getAccount2());
            sheet.addCell(lab);
            //清算金额
            lab = new Label(7, i+1, Format.fty(String.valueOf(bean.getAmount())));
            sheet.addCell(lab);
            //交易手续费
            lab = new Label(8, i+1, Format.fty(String.valueOf(bean.getFee())));
            sheet.addCell(lab);
            //交易金额
            lab = new Label(9, i+1, Format.fty(String.valueOf(bean.getTradeAmount())));
            sheet.addCell(lab);
			//姓名
			lab = new Label(10, i+1, bean.getName());
			sheet.addCell(lab);
            //行号
            lab = new Label(11, i+1, bean.getBankno());
            sheet.addCell(lab);
            //开户行
            lab = new Label(12, i+1, bean.getBankname());
            sheet.addCell(lab);
            //状态
            lab = new Label(13, i+1, bean.getStatus());
            sheet.addCell(lab);
            //接入渠道
            lab = new Label(14, i+1, bean.getInchannel());
            sheet.addCell(lab);
            //延迟
            lab = new Label(15, i+1, bean.getTradedelay());
            sheet.addCell(lab);
            //返回码
            lab = new Label(16, i+1, bean.getRetcode());
            sheet.addCell(lab);
		}
	}
	
	/**
	 * 创建excel文件
	 * @param filePath 文件路径  如:  E:\\testExcel\\testclb.xls
	 * @return
	 * @throws IOException
	 * @throws BiffException 
	 */
	public WritableWorkbook createWorkbook(String filePath) throws IOException, BiffException{
		WritableWorkbook book = Workbook.createWorkbook(new File(filePath));  
		return book;
	}
	
	/**
	 * 写到excel
	 * @param filePath
	 * @param sheetName
	 * @param list
	 * @return
	 */
	public  boolean write(String filePath,String sheetName,List<Payjnls> list){
		try {
			//创建excel文件
			WritableWorkbook book = this.createWorkbook(filePath);
			//创建excel sheet
			WritableSheet sheet = book.createSheet(sheetName,0); 
			//初始化报表标题Label
			this.initLabel(sheet);
			//写数据到excel单元格中
			this.addCell(sheet, list);
			book.write();//写入数据  
			book.close();//关闭资源
		} catch (RowsExceededException e) {
			logger.error(e.getMessage(), e);
			return false;
		} catch (WriteException e) {
			logger.error(e.getMessage(), e);
			return false;
		} catch (IOException e) {
			logger.error(e.getMessage(), e);
			return false;
		} catch (BiffException e) {
			logger.error(e.getMessage(), e);
			return false;
		} 
		return true;
	}
	
	/**
	 * 写到excel
	 * @param filePath
	 * @param sheetName
	 * @param list
	 * @return
	 */
	public  boolean write_2(String filePath,String sheetName,List<LiquidationBean> list){
		try {
			//创建excel文件
			WritableWorkbook book = this.createWorkbook(filePath);
			//创建excel sheet
			WritableSheet sheet = book.createSheet(sheetName,0); 
			//初始化报表标题Label
			this.initLabel_2(sheet);
			//写数据到excel单元格中
			this.addCell_2(sheet, list);
			book.write();//写入数据  
			book.close();//关闭资源
		} catch (RowsExceededException e) {
			logger.error(e.getMessage(), e);
			return false;
		} catch (WriteException e) {
			logger.error(e.getMessage(), e);
			return false;
		} catch (IOException e) {
			logger.error(e.getMessage(), e);
			return false;
		} catch (BiffException e) {
			logger.error(e.getMessage(), e);
			return false;
		} 
		return true;
	}
	
	/**
	 * 写到excel
	 * @param filePath
	 * @param sheetName
	 * @param list
	 * @return
	 */
	public  boolean write_3(String filePath,String sheetName,List<DaifaVO> list){
		try {
			//创建excel文件
			WritableWorkbook book = this.createWorkbook(filePath);
			//创建excel sheet
			WritableSheet sheet = book.createSheet(sheetName,0); 
			//初始化报表标题Label
			this.initLabel_3(sheet);
			//写数据到excel单元格中
			this.addCell_3(sheet, list);
			book.write();//写入数据  
			book.close();//关闭资源
		} catch (RowsExceededException e) {
			logger.error(e.getMessage(), e);
			return false;
		} catch (WriteException e) {
			logger.error(e.getMessage(), e);
			return false;
		} catch (IOException e) {
			logger.error(e.getMessage(), e);
			return false;
		} catch (BiffException e) {
			logger.error(e.getMessage(), e);
			return false;
		} 
		return true;
	}
	
	/**
	 * 读清算对比excel文件
	 * @param filePath 文件路径
	 * @param s 第几个sheet
	 * @return
	 */
	public static List<LiquidationBean> read(String filePath,int s){
		List<LiquidationBean> list = new ArrayList<LiquidationBean>();
		 try {
			//打开文件  
			Workbook book = Workbook.getWorkbook(new File(filePath));  
			//获取第一个工作表  
			Sheet sheet = book.getSheet(s); 
			logger.info("共"+sheet.getRows()+"行!");
			//得到第16列,第0行单元格
			Cell cell_0 = sheet.getCell(16,0);//凭证号
			String result0 = cell_0.getContents();
			logger.info("【清算需匹对的列名为】:"+result0);
			for (int i = 1; i < sheet.getRows(); i++) {
				LiquidationBean bean = new LiquidationBean();
				//得到第16列,第1行单元格(凭证号=交易流水号)
				Cell cell_1 = sheet.getCell(16,i);
				bean.setLocallogno(cell_1.getContents());
				//交易日期
				Cell cell_2 = sheet.getCell(0,i);
				bean.setLocaldate(cell_2.getContents());
				//交易金额
				Cell cell_3 = sheet.getCell(8,i);
//				bean.setAmount(Long.valueOf(cell_3.getContents()));
				bean.setAmountStr(cell_3.getContents());
				//交易状态
				Cell cell_4 = sheet.getCell(9,i);
				bean.setStatus(cell_4.getContents());
				//交易结果
				Cell cell_5 = sheet.getCell(10,i);
				bean.setPaytag(cell_5.getContents());
				
				list.add(bean);
			}
			book.close();//关闭资源
		} catch (BiffException e) {
			logger.error(e.getMessage(), e);
		} catch (IndexOutOfBoundsException e) {
			logger.error(e.getMessage(), e);
		} catch (IOException e) {
			logger.error(e.getMessage(), e);
		}  
		return list;
	}
	
	/**
	 * 两数组对比,数据中存放String类型
	 * @param list1
	 * @param list2
	 * @return 匹配后不同的list
	 */
	public static List<String> getDifferentList(List<String> list1, List<String> list2) {
        long st = System.nanoTime();
         List<String> diff = new ArrayList<String>();
         List<String> maxList = list1;
         List<String> minList = list2;
         if(list2.size()>list1.size()){
             maxList = list2;
             minList = list1;
         }
         Map<String,Integer> map = new HashMap<String,Integer>(maxList.size());
         for (String bean : maxList) {
             map.put(bean, 1);
         }
         for (String bean : minList) {
             if(map.get(bean)!=null){
                 map.put(bean, 2);
                 continue;
             }
             diff.add(bean);
         }
         for(Map.Entry<String, Integer> entry:map.entrySet()){
             if(entry.getValue()==1){
                 diff.add(entry.getKey());
             }
         }
        logger.info("getDifferentList total times "+(System.nanoTime()-st));
        return diff;
    }
	
	/**
	 * 根据两数组中TradeCode对比,数据中存放LiquidationBean类型
	 * 如果需匹配多个字段,可在TradeCode字段上拼接字符串,作为key
	 * @param list1
	 * @param list2
	 * @return 匹配后不同的list
	 */
	public static List<LiquidationBean> getDifferentBeanList(List<LiquidationBean> list1, List<LiquidationBean> list2) {
        long st = System.nanoTime();
         List<LiquidationBean> diff = new ArrayList<LiquidationBean>();
         List<LiquidationBean> maxList = list1;
         List<LiquidationBean> minList = list2;
         if(list2.size()>list1.size()){
             maxList = list2;
             minList = list1;
         }
         Map<String,Integer> map = new HashMap<String,Integer>(maxList.size());
         //对象bean以key放到map中
         Map<String,LiquidationBean> beanMap = new HashMap<String,LiquidationBean>(maxList.size());
         //把最大的数组存入map中
         for (LiquidationBean bean : maxList) {
             map.put(bean.getLocallogno(), 1);
             beanMap.put(bean.getLocallogno(), bean);
         }
         //循环小的那个数组,通过从map获得key比较是否异同
         for (LiquidationBean bean : minList) {
             if(map.get(bean.getLocallogno())!=null)
             {
                 map.put(bean.getLocallogno(), 2);
                 continue;
             }
             diff.add(bean);
         }
         for(Map.Entry<String, Integer> entry:map.entrySet()){
             if(entry.getValue()==1){
            	 LiquidationBean bean = beanMap.get(entry.getKey());
            	 diff.add(bean);
             }
         }
        logger.info("getDifferentBeanList total times "+(System.nanoTime()-st));
        return diff;
        
    }
	
	
	public static void main(String[] args) {
//		read("E:\\testExcel\\20140401点数.xls",0);
		
		List<LiquidationBean> excelList = ExcelUtil.read("E:\\wokespace2\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\pm\\upload\\20140401dianshu.xls", 0);
		for (int i = 0; i < excelList.size(); i++) {
			LiquidationBean bean = excelList.get(i);
//			System.out.println(bean.getLocallogno()+","+bean.getLocaldate()+","+bean.get);
		}
		
	}
}

 

 

 

 

分享到:
评论

相关推荐

    JXL读写Excel小例子

    读取Excel文件同样简单。以下代码演示了如何打开一个已存在的Excel文件并读取其内容: ```java import jxl.Workbook; import jxl.Sheet; import jxl.Cell; import jxl.read.biff.BiffException; import java.io....

    JXL读写EXCEL示例

    读取Excel文件: 1. 创建一个`Workbook`对象:这是JXL中的核心类,代表整个Excel工作簿。你可以通过`Workbook.getWorkbook(File)`方法打开一个现有的Excel文件。 ```java File excelFile = new File("path_to_your_...

    JXL 读取EXCEL

    标题 "JXL 读取EXCEL" 涉及到的是使用Java Excel Library(简称JXL)这个开源库来处理Microsoft Excel文件。JXL是一个强大的工具,它允许开发者在Java程序中读取、写入和修改Excel文件。下面将详细介绍JXL库以及如何...

    jxl读写excel数据,输出图片

    使用JXL,我们可以读取Excel文件中的数据,包括文本、数字、日期等。以下是一个简单的示例,展示如何读取Excel文件: ```java WritableWorkbook workbook = Workbook.getWorkbook(new File("input.xls")); Sheet ...

    jxl读取Excel文件

    NULL 博文链接:https://zhouyq.iteye.com/blog/272883

    JXL读写Excel例子demo

    在"JXL读写Excel例子demo"中,我们将探讨如何利用JXL库来处理Excel数据。这个示例程序包含了一个名为"Jxl读写Excel例子demo.jxl.jar"的库文件,它是JXL库的实现,可以集成到Java项目中以处理Excel文件。 JXL库提供...

    ExcelDemo_Excel导出_下载_POI读excel_JXL读写excel_java读写excel_列宽_读取合并或拆分单元格内容

    以下是一个使用JXL读取Excel文件的示例: ```java import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write....

    JXL读写Excel源码

    在Android开发中,JXL可以帮助我们创建、更新或读取Excel文件,这对于数据存储、报告生成或测试自动化等场景非常有用。 在描述中提到,由于作者正在从事安卓测试工作,所以回顾并使用了JXL。尽管Android原生并不...

    使用jxl读取Excel表格数据

    "使用jxl读取Excel表格数据"这个主题就是关于如何利用jxl库来实现这一目标。jxl是一个开源的Java库,它提供了对Microsoft Excel文件格式的支持,使得在Java中操作Excel变得简单。 首先,你需要获取jxl的jar包。由于...

    jxl读取excel的java代码小程序

    在这个"jxl读取excel的java代码小程序"中,我们将探讨如何利用JXL库来实现Excel文件的读取操作。 首先,我们需要在项目中引入JXL库。如果使用Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;...

    Jxl读写Excel例子demo(2)

    本示例“Jxl读写Excel例子demo(2)”将详细解释如何利用jxl.jar库进行Excel文件的操作。 首先,我们需要理解Jxl库的核心概念。Jxl提供了对Excel文件格式的全面支持,包括单元格类型(文本、数字、日期等)、样式...

    java利用jxl读取excel文件

    使用`jxl`库读取Excel文件主要涉及以下步骤: 1. **导入必要的库**:在Java源代码中,你需要导入`jxl`相关的包。例如: ```java import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; ...

    jxl读取Excel报表

    标题中的“jxl读取Excel报表”指的是利用jxl库来操作Excel文件,特别是从Excel文件中提取数据以进行分析或进一步处理。以下是对这个主题的详细讲解: 首先,`jxl.jar`是jxl库的主要组件,它支持读取和写入Microsoft...

    jxl的excel读写操作

    2. **读取Excel文件** 使用`Workbook`类来打开Excel文件。以下是一个基本示例: ```java Workbook workbook = Workbook.getWorkbook(new File("yourfile.xls")); Sheet sheet = workbook.getSheet(0); // 获取第...

    jxl读取excel数据(带实例)

    本文将详细介绍如何使用JXL库来读取Excel数据,并通过一个实际的代码示例进行演示。 首先,你需要在项目中引入JXL库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;...

    用JXL读写excel到数据库实例

    使用jxl,读写excel数据进数据库的例子。 需要jxl.jar、poi-2.0-final-20040126.jar、mysql-connector-java-3.0.8-stable-bin.jar、jakarta-poi-1.5.1-final-20020615.jar。

    jxl读写excel源码

    Java编程语言提供了多种库来处理Excel文件,其中jxl是一个广泛使用的开源库,它使得在Java应用程序中读取和写入Excel文件变得简单。本文将详细介绍如何使用jxl库进行Excel文件的读写操作,以及适合初学者的关键知识...

    jsp+jspsmart上传+poi3.8读取excel2007+jxl读取excel2003

    在给定的标题和描述中,"jsp+jspsmart上传+poi3.8读取excel2007+jxl读取excel2003" 提到了一种结合Java Web技术实现文件上传,并通过不同库解析Excel文件的解决方案。这里我们将详细探讨涉及的各个知识点。 首先,`...

    利用jxl读取Excel代码的完整内容,包括jar包

    本篇将详细介绍如何利用jxl库读取Excel文件,并提供一个完整的代码示例。 首先,jxl库提供了一个方便的API,让我们能够轻松地与Excel文件交互。要使用jxl,你需要下载jxl.jar文件,并将其添加到你的项目类路径中。...

    POI和JXL读取EXCEL数据的工具类(POI支持2007)

    本主题将详细讲解如何使用Apache POI和JExcelApi(JXL)这两个Java库来读取Excel文件,以及提供的工具类`PoiUtil.java`和`JxlUtil.java`的使用方法。 Apache POI是一个流行的开源库,它允许开发者创建、修改和显示...

Global site tag (gtag.js) - Google Analytics