java-Apache POI公式单元格复制非常慢
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Apache POI公式单元格复制非常慢,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1550字,纯文字阅读大概需要3分钟。
内容图文
![java-Apache POI公式单元格复制非常慢](/upload/InfoBanner/zyjiaocheng/655/d71b6a4f358e4a14ae58fe53db53c24d.jpg)
我正在使用Apache POI 3.8生成一个excel文件,并且需要复制一些现有的行n°次.
这是因为我有一些复杂的公式,可以将其用作模板来创建新行,并用正则表达式替换单元格索引.
问题是性能太差了,它需要2小时才能生成大约4000行.
正如我最初所想的那样,我已经确定问题不在regexp部分,而是在公式单元格的重复中.
我实际上使用它来复制公式单元格:
case Cell.CELL_TYPE_FORMULA:
newCell.setCellType(oldCell.getCellType());
newCell.setCellFormula(oldCell.getCellFormula());
break;
如果我将公式复制为这样的文本:
case Cell.CELL_TYPE_FORMULA:
newCell.setCellType(Cell.CELL_TYPE_STRING);
newCell.setCellValue("="+oldCell.getCellFormula());
break;
即使使用我的正则表达式,它也相当快.
无论如何,这不是一个完美的解决方案,因为当我需要以意大利语格式书写时,该公式具有英语关键字(即IF()).
此外,需要在excel中用诸如“将所有->’=’替换为’=’”之类的方式在excel中强制重新评估具有此类插入公式的单元格.
由于HSSFFormulaParser.parse(),问题似乎在于setCellFormula().
奇怪的是,解析时间似乎呈指数增长:
100 rows -> 6785ms
200 rows -> 23933ms
300 rows -> 51388ms
400 rows -> 88586ms
看起来,是每次我复制一个公式时,POI库都会重新评估,重新解析或重新放置所有前面的行.
有谁知道如何解决这个问题?
提前致谢.
解决方法:
哦,我…我想我找到了…
原来是:
// If the row exist in destination, push down all rows by 1 else create a new row
if (newRow != null) {
worksheet.shiftRows(destinationRowNum, worksheet.getLastRowNum(), 1);
} else {
newRow = worksheet.createRow(destinationRowNum);
}
我评论了一切只剩下
newRow = worksheet.createRow(destinationRowNum);
现在我需要60秒来处理所有行!
可能是我的模板中有污垢,这导致POI在每次迭代时都会移动所有内容.
内容总结
以上是互联网集市为您收集整理的java-Apache POI公式单元格复制非常慢全部内容,希望文章能够帮你解决java-Apache POI公式单元格复制非常慢所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。