利用poi组件导入数据返回导入失败记录文件

表的一行就是一条数据,使拓展性强的话在导入时需要记录错误数据行索引,最后统一处理保留索引数据

public static void addImportTaskLog(ImportTaskPlan importPlan){
        //失败添加失败文档地址
        if (importPlan.getRowIndexList().size()>0){
            logger.info("导入错误数据行索引及异常信息:" + JSONUtility.objectToJson(importPlan));
            try {
                InputStream inputStream = HttpUtility.sendGetInputStream(importPlan.getFileUrl(), null, null);
                Workbook wb = WorkbookFactory.create(inputStream);
                Sheet sheet = wb.getSheetAt(0);
                Row row = sheet.getRow(0);
                int lastCellNum = row.getLastCellNum();
                Cell cell = row.createCell(lastCellNum);
                cell.setCellValue("导入失败原因");
                cell.setCellStyle(row.getCell(0).getCellStyle());
                Integer totalCount = importPlan.getTotalCount();
                //从第二行开始,第一行为表头
                for (int i = 1; i <= totalCount; i++) {
                    if (importPlan.getRowIndexList().containsKey(i-1)) {
                        Row rowi = sheet.getRow(i);
                        rowi.createCell(lastCellNum).setCellValue(importPlan.getRowIndexList().get(i-1));
                        continue;
                    }
                    //删除正常导入的行数据
                    sheet.shiftRows(i+1,sheet.getLastRowNum(),-1);
                }
                String filePathTmp = System.getProperty("user.dir") + File.separator + "temp" + File.separator + "export" + File.separator;
                String fullNameTmp = filePathTmp + importPlan.getExecCount() + "_" + new Date().getTimeFull() + "_" + importPlan.getFileName();
                logger.debug("导出错误文件路径:" + fullNameTmp);
                File dic = new File(filePathTmp);
                if (!dic.exists()) {
                    logger.debug("导出错误文件创建临时目录-" + dic.getAbsolutePath());
                    dic.mkdirs();
                    dic.setReadable(true, false);
                    dic.setWritable(true, false);
                }
                FileOutputStream out = null;
                try {
                    out = new FileOutputStream(fullNameTmp);
                    wb.write(out);
                    out.flush();
                    out.close();
                    importPlan.setUrl(uploadFile(fullNameTmp));
                    importPlan.update();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } catch (Exception e) {
                logger.info("添加导入计划日志错误:" + e);
            }
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现导入Excel并返回校验后的错误文件的功能,可以使用poi库进行Excel文件操作。 首先,我们需要在代码中引入poi库的相关类和方法,以实现Excel文件的读取和写入。然后,我们可以使用poi中的Workbook类来打开、读取和操作Excel文件。 在导入Excel文件过程中,可以使用进度条来显示处理进度。可以通过设置一个计数器来记录成功导入数据行数,同时使用一个进度条组件来展示导入进度。 对于校验错误信息的处理,需要先编写校验逻辑,例如对字段是否为空、数据格式是否符合要求进行验证。如果发现错误,可以在导入的过程中记录错误的行数或数据,并将这些错误数据写入一个新的Excel文件中。 为了保持错误文件的原样,可以在发现错误后,将错误的行数或数据一并写入新的Excel文件。这可以通过创建一个新的Workbook对象,然后在错误的行数或数据的单元格中添加相应的数据进行实现。 最后,将生成的错误文件和校验错误信息返回给用户。可以通过提供一个下载链接,让用户点击下载错误文件。同时,将校验错误信息作为结果返回给用户,可以通过一个弹窗或者是一个分来展示。 总结起来,要实现导入Excel并返回校验后的错误文件的功能,需要使用poi库进行Excel文件操作,编写校验逻辑进行数据验证,使用计数器和进度条来展示导入进度,并将错误数据写入新的Excel文件,最后将错误文件和校验错误信息返回给用户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值