java-使用Poi SXSSFWorkbook向Excel添加注释时使用了过多的内存
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-使用Poi SXSSFWorkbook向Excel添加注释时使用了过多的内存,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1503字,纯文字阅读大概需要3分钟。
内容图文
![java-使用Poi SXSSFWorkbook向Excel添加注释时使用了过多的内存](/upload/InfoBanner/zyjiaocheng/947/37db5166d3064aaba76c5b95435947bf.jpg)
我的应用程序创建了一个电子表格,该电子表格可能很大(最多500,000行,每行分布在六张纸上,每行约20列).
我使用Apache Poi,然后转而使用SXSSFWorkBook来将数据写入临时文件,以使所使用的内存与最终电子表格的大小不成比例,并且效果很好.
但是电子表格表示元数据已更改,并且当元数据已更改时,我想在显示旧值的单元格中添加注释.我可以在小型电子表格中使用它,但是在尝试大型文件时,它总是会因堆内存错误而失败.
我不确定问题是由于Poi将所有评论存储在内存中的限制还是我做错了.工作表是我自己的包装器类,每张纸只创建一个DrawingPatriach类,但是看起来我必须为所需的每个注释创建一个锚点.
private void addCellComment(Row r, Cell c, Worksheet sheet, String value)
{
String formattedValue = value.replace('\u0000', '\n');
int rowCount = value.split("\\\\u000").length;
ClientAnchor anchor = factory.createClientAnchor();
anchor.setCol1(c.getColumnIndex());
anchor.setCol2(c.getColumnIndex()+2);
anchor.setRow1(r.getRowNum());
anchor.setRow2(r.getRowNum()+rowCount);
Drawing drawing = sheet.getDrawing();
Comment comment = drawing.createCellComment(anchor);
RichTextString str = factory.createRichTextString(formattedValue);
comment.setString(str);
c.setCellComment(comment);
}
解决方法:
好吧,从Apache POI documentation起(重点是我的):
Please note that there are still things that still may consume a large amount of memory based on which features you are using, e.g. merged regions, hyperlinks, comments, … are still only stored in memory and thus may require a lot of memory if used extensively.
因此,我想这是Apache POI的局限性,您必须解决此问题.
内容总结
以上是互联网集市为您收集整理的java-使用Poi SXSSFWorkbook向Excel添加注释时使用了过多的内存全部内容,希望文章能够帮你解决java-使用Poi SXSSFWorkbook向Excel添加注释时使用了过多的内存所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。