gpt4 book ai didi

java - 使用 Poi SXSSFWorkbook 向 Excel 添加注释时使用的内存过多

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:46 29 4
gpt4 key购买 nike

我的应用程序创建了一个电子表格,这可能相当大(最多 500,000 行,每行分布在六张纸上,每张纸大约有 20 列)。

我使用 Apache Poi 并转而使用 SXSSFWorkBook 将数据写入临时文件,这样使用的内存与最终电子表格的大小不成比例,而且效果很好。

但电子表格表示元数据已更改,当元数据已更改时,我想向显示旧值的单元格添加注释。我在小型电子表格上工作,但在尝试大型文件时它总是因堆内存错误而失败。

我不确定问题是由于 Poi 将所有评论存储在内存中的限制还是我做错了。 Worksheet 是我自己的包装类,我只为每个工作表创建一个 DrawingPatriach 类,但看起来我必须为我需要的每个评论创建一个 anchor 。

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 添加注释时使用的内存过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42922120/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com