NC65导入文件

   在做NC65导入文件时,客户提供的excel文件可能会有两种情况,一种是固定字段所在列,一种是不确定字段所在列,也就是说列字段是随机的。

  第一种情况我们可以直接按照顺序直接进行获取,在这里我是创建一个新的vo来存储excel表格数据  

			ArrayList<String> billnolist = new ArrayList<>();
			HashMap<String, ArrayList<SaleImpExcelVO>> map = new HashMap<>();
			for (int rowNum = 2; rowNum <= sheet.getLastRowNum(); rowNum++) {
				Row row = sheet.getRow(rowNum);
				//1、检查必输项
				if(isEmpty(row,htlx)){
					ExceptionUtils.wrappBusinessException("第"+rowNum+"行数据,excel中必输项存在空值,请检查!");
				}
				String key = getValue(row.getCell(2));	// 合同号
				if(billnolist.contains(key)){
					ArrayList<SaleImpExcelVO> excelvo_list = map.get(key);
					SaleImpExcelVO excelvo  = getExcelVO(row);
					excelvo_list.add(excelvo);
					map.put(key, excelvo_list);
				}else{
					ArrayList<SaleImpExcelVO> excelvo_list = new ArrayList<>();
					SaleImpExcelVO excelvo  = getExcelVO(row);
					excelvo_list.add(excelvo);
					map.put(key, excelvo_list);
					billnolist.add(key);
				}

			}
	private SaleImpExcelVO getExcelVO(Row row) {
		SaleImpExcelVO vo = new SaleImpExcelVO();
		int i=0;
		vo.set表字段(getValue(row.getCell(i++)));				
		vo.set表字段(getValue(row.getCell(i++)));
		vo.set表字段(getValue(row.getCell(i++)));
		vo.set表字段(getValue(row.getCell(i++)));
		vo.set表字段(getValue(row.getCell(i++)));
		vo.set表字段(getValue(row.getCell(i++)));
		vo.set表字段(getValue(row.getCell(i++)));
		vo.set表字段(getValue(row.getCell(i++)));
		vo.set表字段(getValue(row.getCell(i++)));
		return vo;
	}

在这里for循环每执行一次,row会被从新赋值,并且会从新走一遍getExcelVO方法,这样就可以按顺序获取excel表字段。

   在excel表列字段顺序不固定的时候,可以根据首行的列名进行判断,来获取对应列的数据。

for(int i=0; i < cellCount; i++){//列
				Cell cell = rows.getCell(i);
				String filename=cell.getStringCellValue();
				if("到账日期".equals(filename)){
					vo.setDzdate(getValue(row.getCell(i)));
				}
				if("到账金额".equals(filename)){			
					vo.setDzmoney(getValue(row.getCell(i)));
				}
				if("汇入途径".equals(filename)){
					vo.setZjxz(getValue(row.getCell(i)));
				}
				if("收款账号".equals(filename)){
					vo.setSkaccount(getValue(row.getCell(i)));
				}	
				if("付款户名".equals(filename)){
					vo.setFkname(getValue(row.getCell(i)));
				}
				if("单位名称".equals(filename)){
					vo.setDwname(getValue(row.getCell(i)));
				}
				if("进账编号".equals(filename)){
					vo.setZdcode(getValue(row.getCell(i)));
				}
			
			}
			return vo;	
	}

以上两种方法只针对首行为字段名,其他行为数据的情况,在遇到字段名不只在首行的情况时可以用,下面是获取excel表中第三列第七行的数据。

  Row row = sheet.getRow(2);   // 第三行
  Cell cell = row.getCell(6);  // 第七列

  // 获取单元格的值
  String cellValue = cell.getStringCellValue();

需要注意的是java在读取excel表格的时候是从第0行开始的。如果excel存在时间数据,因为在获取的时候是String类型,所以需要转为对应的日期的类型,在这里我将日期的类型转为date。

		String dateString = excelvo.getDzdate();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		Date date = dateFormat.parse(dateString);	
		UFDateTime dateTime = new UFDateTime(date);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值