资讯专栏INFORMATION COLUMN

为导入的excel增加信息反馈

Baoyuan / 1601人阅读

摘要:导入信息反馈成功条,失败条导出失败原因总结现在这种实现,比之前好了一些,但感觉有些地方实现还是不好,欢迎大家提出改进意见。

问题描述

之前excel导入的时候,当发生错误的我们只是提供一个导入失败的错误提示很不友好,为此为导入增加错误信息的反馈,设计方案是在导入之后,将导入的结果返回回来,由于可能涉及到大量的数据导入所以将错误信息放在原导入excle的后面,导入完成后重新下载含有反馈信息的excel。

实现效果如下所示:

实现方法

定义一个类来保存我们的返回信息,包含成功条数,失败条数,失败时要导出的反馈信息。

public class ImportBackMessage {
    /**
     * 成功导入的数量
     */
    private int successCount = 0;
    /**
     * 失败导入的数量
     */
    private int errorCount = 0;
    /**
     * 失败反馈文件名
     */
    private String fileName;
}

将错误信息写入原excel

// 保存学生信息
// 成功:将反馈的信息中成功数量加1
// 失败:将反馈的信息中失败数量加1,并且检查实体属性,将错误的信息加在该excel行后面
try {
    studentRepository.save(student);
    importBackMessage.setSuccessCount(importBackMessage.getSuccessCount() + 1);
} catch (Exception e) {
    String backMessage = checkStudentMessage(student);
    Cell cell = row.createCell(importMessage.size());
    if (backMessage.length() != 0) {
        cell.setCellValue("错误原因:" + backMessage);
    } else {
        cell.setCellValue("错误原因:未知错误");
    }
    importBackMessage.setErrorCount(importBackMessage.getErrorCount() + 1);
}

在这里遇到了一些问题,并没有理想的将问题解决掉,理想的实现是将导入成功的信息删除掉,在导入错误的信息之后增加错误提示。但在我们在excel中删除成功的行时,遇到了一些问题。
最开始使用removeRow(Row row)方法发现该方法只能删除行内容,但还会保留该行的位置
后来查询这使用了shiftRows(int startRow,int endRow,int n)这个方法用法是将startrow到endrow行之间的内容向下移动n行,当n为负数时向上移动。

但当我们使用这个方法后在我们导出的文件产生了excel损坏,我无法打开,错误如下,

开始查了好久也没明白为什么会出错,之后在使用google查找Excel found unreadable content,发现这好像是一个Apache poi的一个bug。

所以最后的解决方法是保留成功数据,在失败的数据后面添加失败原因。如下所示

3.将更改内容重新写入导入的excel文件中

OutputStream os=null;
os=new FileOutputStream(file);//file是导入的文件
workbook.write(os);
os.flush();
os.close();

4.angular显示反馈信息

前台只是负责信息的显示使用了nz-modal,并增加判断如果失败条数大于0则显示导出失败原因的按钮。


    

成功{{backMessage.successCount}}条,失败{{backMessage.errorCount}}条

总结

现在这种实现,比之前好了一些,但感觉有些地方实现还是不好,欢迎大家提出改进意见。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74181.html

相关文章

  • 自己写简单java excel导入导出工具(封装POI)

    Octopus 如何导入excel 如何导出excel Octopus Octopus 是一个简单的java excel导入导出工具. 如何导入excel 下面是一个excel文件中sheet的数据,有四个学生信息. studentId name sex inTime score 20134123 John M 2013-9-1 89 20124524 Joyce F 2012...

    xiangchaobin 评论0 收藏0
  • 探索大型神经网络智能调参(一):构建大规模BPNN

    摘要:此神经网络有个隐含层,每层个节点,个是一个预测类的后向反馈神经网络,建立值用以量化某声学设备设计方案的好坏和个设计尺寸的函数关系。导入依赖库用以处理矩阵数据,用以可视化,用以训练后向反馈神经网络。 我们正在研究如何用更廉价、更高效、鲁棒性更好的方法对大宽度、大深度的神经网路进行调参(hidden layer的层数,每层layer的节点,epochs,batch_size)。无论如何,先...

    赵连江 评论0 收藏0
  • XCel 项目总结 - Electron 与 Vue 性能优化

    摘要:而这里的单元格信息是唯一的,所以直接通过为一个空对象赋值即可。和相关的知识和技巧高亮的列单元格采用展示。在中,被选中的单元格会高亮相应的行和列,以提醒用户。 showImg(https://segmentfault.com/img/bVGkdk?w=900&h=500); XCEL 是一个 Excel 数据清洗工具,其通过可视化的方式让用户轻松地对 Excel 数据进行筛选。 XCEL...

    XUI 评论0 收藏0
  • Java对象和Excel转换工具XXL-EXCEL

    摘要:一行代码完成对象和之间的转换。说明属性列名称四版本更新日志版本,新特性导出支持对象装换为,并且支持字节数组等多种导出方式导入支持转换为对象,并且支持文件路径等多种导入方式版本,新特性字段支持类型。 《Java对象和Excel转换工具XXL-EXCEL》 showImg(https://segmentfault.com/img/remote/1460000012470335);showI...

    mj 评论0 收藏0

发表评论

0条评论

Baoyuan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<