EASYPOI大数据量SAX方式导出(20201126)

示例代码

@Test
public void testSaxImport() throws IOException, ParseException {

    File file =
new File("E:\\project\\urge.xls");
   
//存放验证失败内容
    List<CaseUrgeFullInfo> failList = new ArrayList<>();
   
//如果有验证失败项,记录失败原因
    AtomicReference<String> msg = new AtomicReference<>();
   
//用于数据验证
    InputStream inputStream = new FileInputStream(file);
   
//用户数据导入
    InputStream inputStream2 = new FileInputStream(file);
    try
{
        ExcelImportUtil.importExcelBySax(inputStream
, CaseUrgeFullInfo.class, new ImportParams(), new IExcelReadRowHandler<CaseUrgeFullInfo>() {

           
@Override
           
public void handler(CaseUrgeFullInfo caseUrgeFullInfo) {
               
if (StringUtils.isBlank(caseUrgeFullInfo.getCaseNumber())) {
                   
failList.add(caseUrgeFullInfo);
                   
msg.set("个案序列号不能为空");
               
}
               
//其他验证
                //最后判断是否有验证失败项,检查到有验证失败的,抛异常终止
                if (!failList.isEmpty()) {
                   
throw new RuntimeException(msg.get());
               
}
            }
        })
;
   
}catch (Exception e){
       
//有异常或者验证失败的情况,终止导入,只有全部验证通过才能导入
        logger.info("校验异常,e={}",e.getMessage());
        return;
   
}

   
//全部验证通过后进行入库
    //存放excel读取的数据
    List<CaseUrgeFullInfo> list = new ArrayList();
   
ExcelImportUtil.importExcelBySax(inputStream2, CaseUrgeFullInfo.class, new ImportParams(), new IExcelReadRowHandler<CaseUrgeFullInfo>() {
       
@Override
       
public void handler(CaseUrgeFullInfo caseUrgeFullInfo) {
           
list.add(caseUrgeFullInfo);
            if
(list.size() == 1000){
                handlerData()
;
           
}
        }
       
private void handlerData(){
           
//入库操作
            mongoTemplate.insertAll(list);
           
list.clear();
       
}
    })
;
   
//不够批次量(1000)的
    if(!list.isEmpty()){
       
//入库操作
        mongoTemplate.insertAll(list);
       
list.clear();
   
}
}

 

 

SAX方式导入BUG及缺点

使用的是easypoi-3.3.0版本

Git下载地址:https://gitee.com/lemur/easypoi/tree/3.3.0-releae/

存在BUG

  1. 如果有空单元格,会导致错位

https://gitee.com/lemur/easypoi/issues/I1HHEO?from=project-issue

  1. 最后一行无法读取

https://gitee.com/lemur/easypoi/issues/I15TBC?from=project-issue

缺陷

不支持ImportParams参数设置

https://gitee.com/lemur/easypoi/issues/I10LVR?from=project-issue

解决方案(BUG和缺陷)

从git上下载源码,参考官方解决bug修复以上BUG,重新打包easypoi-base-3.3.0.jar

无法设置ImportParam参数,无法校验,可以在导入之前使用编码方式做一次校验,校验完成后才能导入,参考“示例代码“部分。

参考

https://opensource.afterturn.cn/doc/easypoi.html#10703

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值