EasyExcel多sheet的導入和導出
EasyExcel對於導入導出的操作十分簡潔,方便快捷。其中對於多單文件多sheet的操作比較不同,在此做一下記錄
從多sheet中導入數據
public Result importDetail(@RequestParam(value = "file") MultipartFile serviceFile) throws IOException {
ExcelReader excelReader = null;
InputStream in = null;
try {
in = serviceFile.getInputStream();
ExcelListener excelListener = new ExcelListener();
excelReader = EasyExcel.read(in, PurchaseDetailVO.class, excelListener).build();
//獲取採購單主信息
ReadSheet readSheet = EasyExcel.readSheet(0).build();
excelReader.read(readSheet);
List<PurchaseFeignParam> purchaseFeignParams = ConverterUtils.convertList(excelListener.getData(), PurchaseFeignParam.class);
if (CollectionUtils.isEmpty(purchaseFeignParams)) {
return Result.fail(30101, "導入數據爲空", null);
}
//插入採購單數據
purchaseFeignClient.createPurchase(purchaseFeignParams.get(0));
//清空list數據
excelListener.getData().clear();
//獲取明細表信息
ReadSheet readDetailSheet = EasyExcel.readSheet(1).build();
excelReader.read(readDetailSheet);
List<PurchaseDetailFeignParam> purchaseDetailFeignParam = ConverterUtils.convertList(excelListener.getData(), PurchaseDetailFeignParam.class);
//插入採購單明細數據
return purchaseDetailFeignClient.createPurchaseDetailBatch(purchaseDetailFeignParam);
} catch (IOException ex) {
logger.error("import excel to db fail", ex);
} finally {
in.close();
// 這裏一定別忘記關閉,讀的時候會創建臨時文件,到時磁盤會崩
if (excelReader != null) {
excelReader.finish();
}
}
return Result.success();
}
導出爲多sheet
public Result<Boolean> exportBookRecord(HttpServletResponse response) {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 這裏URLEncoder.encode可以防止中文亂碼
try {
String fileName = URLEncoder.encode("template", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
//導出採購單模板 放在sheet0
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
WriteSheet mainSheet = EasyExcel.writerSheet(0, "採購單").head(PurchaseVO.class).build();
excelWriter.write(Lists.newArrayList(),mainSheet);
//導出採購單明細模板 放在sheet1
WriteSheet detailSheet = EasyExcel.writerSheet(1, "採購單明細").head(PurchaseDetailVO.class).build();
excelWriter.write(Lists.newArrayList(),detailSheet);
//關閉流
excelWriter.finish();
} catch (IOException e) {
logger.error("導出異常{}", e.getMessage());
}
return Result.success();
}