概述
使用Easy Poi导入Excel时特别慢
问题描述:
在使用easy poi导入一个5000多行的excel时特别慢,大概需要5~6分钟,经过查看源码,发现了问题并已经解决,现在记录一下
- 依赖
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.2.0</version>
</dependency>
使用的是4.2.0版本
- 源代码
这段代码的位置是ExcelImportService类中的ExcelImportResult importExcelByIs(InputStream inputstream, Class<?> pojoClass,
ImportParams params, boolean needMore)方法里的一段
if (needMore) {
InputStream successIs = new ByteArrayInputStream(baos.toByteArray());
try {
Workbook successBook = WorkbookFactory.create(successIs);
if (params.isVerifyFileSplit()){
importResult.setWorkbook(removeSuperfluousRows(successBook, failRow, params));
//慢的原因定位到这行代码
importResult.setFailWorkbook(removeSuperfluousRows(book, successRow, params));
} else {
importResult.setWorkbook(book);
}
importResult.setFailList(failCollection);
importResult.setVerifyFail(verifyFail);
} finally {
successIs.close();
}
}
- 解决思路
既然这行代码执行的特别慢,那么就想办法不执行这段代码,让params.isVerifyFileSplit()为false就可以了。
所以回到自己的代码里,将importParam里的VerifyFileSplit属性设置为false
贴一下自己的方法的一部分代码,加上params.setVerifyFileSplit(false);就可以了。
public ExcelImportResult<?> resolveExcel(MultipartFile files, Class<?> t) throws CustomerException {
log.info(">>>>> ready to resolve excel");
long start = System.currentTimeMillis();
//保存文件到指定的文件夹里, 并将 MultipartFile 转成File
File file = saveFile(files, t, null);
ImportParams params = new ImportParams();
params.setStartRows(0);
//设置1,就遍历到第一行结束,如果设置2,就遍历到第二行结束
params.setHeadRows(1);
params.setNeedVerify(true);
//返回文件是否分割
params.setVerifyFileSplit(false);
params.setVerifyGroup(new Class[]{ViliGroupOne.class});
//设置自定义的校验规则
setRuleByClass(t, params);
最后
以上就是幽默毛豆为你收集整理的使用Easy poi导入数据时特别慢的问题汇总的全部内容,希望文章能够帮你解决使用Easy poi导入数据时特别慢的问题汇总所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复