背景
前几天来了一个比较奇怪的需求,就excel导入的模板各长各的,不像是平时数据数据导入的格式,那没办法,按照需求做吧,先看一下这个表格长啥样
这还是改了一版的样子了,上一版连表头都想变,我TM(小声bb)
实现
OK,既然确定了模板,那就开搞,经过确认,这上面几个数据都是固定的,也就是说只需要取第二列(B列)和第13列(N)列的数据
不多bb,直接上代码,主要还是操作了一下原生的poi
private Result<?> addOrderImport(SalesOrder order, MultipartFile file, List<OrderImport> list, List<SalesOrderlist> addList) throws IOException {
//生成XSSFWorkbook工作簿
Workbook workbook = new XSSFWorkbook(file.getInputStream());
//获取第一个sheet
Sheet sheetAt = workbook.getSheetAt(0);
//合同号
String contract = sheetAt.getRow(0).getCell(1).getStringCellValue();
//下定日期
Date orderDate = sheetAt.getRow(1).getCell(1).getDateCellValue();
//包装要求
String packingReq = sheetAt.getRow(2).getCell(1).getStringCellValue();
//备注
String remark = sheetAt.getRow(3).getCell(1).getStringCellValue();
//单位
String unit = sheetAt.getRow(1).getCell(13).getStringCellValue();
//包装规则
String packingRule = sheetAt.getRow(2).getCell(13).getStringCellValue();
//交期
Date deliveryDate = sheetAt.getRow(3).getCell(13).getDateCellValue();
//型号
String model = null;
//循环添加到addList中
for (OrderImport item : list) {
//获取型号
model = item.getModel() != null ? item.getModel() : model;
if (Strings.isEmpty(item.getMnum())) {
continue;
}
//数量不为空
SalesOrderlist orderDetail = new SalesOrderlist();
BeanUtils.copyProperties(item, orderDetail);
//单位处理(如果单位是千件,赋值给数量,自动算出重量;如果单位是公斤,赋值给重量,自动算出数量)
//。。。
}
return Result.OK();
}
主要还是利用流创建XSSFWorkbook,然后父类为Workbook,ALT+回车会自动创建XSSFWorkbook的父类,需要修改一下
getSheetAt(0)
获取第一个sheet工作簿
getRow(0)
:获取工作簿的第一行
getCell(1)
:获取第二列
getStringCellValue()
:返回字符串类型的数据
getDateCellValue()
:返回日期格式数据
然后后面的子表明细就简单了,就利用你所使用的poi工具的获取一下dto的数据进行转换就好了,修改一下第几行就行了