当前位置: 首页 > 知识库问答 >
问题:

使用Poi SXSSFWorkbook向Excel添加注释时使用了太多内存

陆宇航
2023-03-14

但是电子表格表示已更改的元数据,并且当元数据已更改时,我希望在显示旧值的单元格中添加注释。我在小的电子表格上使用了这个方法,但是当尝试处理大文件时,它总是失败,导致堆内存错误。

我不确定问题是由于Poi限制将所有注释存储在内存中,还是我做错了。Worksheet是我自己的包装类,我只为每个sheet创建一个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);
} 

共有1个答案

孔欣荣
2023-03-14

好吧,从Apache POI文档(强调我的):

请注意,仍然有一些东西可能会消耗大量的内存,基于您正在使用的功能,例如合并区域、超链接、注释……仍然只存储在内存中,因此如果大量使用,可能需要大量的内存。

所以我想这是Apache POI的一个限制,您必须解决这个问题。

 类似资料:
  • 我在Python3.5上使用selenium,在ububtu vps上使用chrome webdriver,当我运行一个非常基本的脚本(导航到站点,输入登录字段,单击)时,内存占用增加了400MB,cpu占用增加到100%。我可以做些什么来降低这个数字,或者如果没有的话,有什么其他的办法吗? 我正在python中测试selenium,但我计划在java中使用它进行一个项目,其中内存使用对我来说是一

  • 我的问题结合了之前在Stackoverflow上发布的两个独立问题:I .为ggplot添加多个图例;ii .将线条图例添加到geom_sf。 我想在中添加多个图例(如第一篇文章中所述),但我使用了。这使得填充美学空间变得复杂。上面i.中建议的答案不适用于多种类型的几何图形——我们不能将点和线分配给单个类,然后使用因子。在我的例子中,我有几个线和点shapefile,只是想为添加的每个shapef

  • Java 导出Excel时如何添加注释? 我想在一个excel文件中添加注释,并且可以导出打开。有推荐的方案吗?

  • 问题内容: 我一直在寻找“如何在运行时向方法添加注释”的答案,发现了一个名为Byte Buddy的出色工具,可以使用它,但仍然无法按需使用。我确定它必须能够从这个问题做到这一点Byte Buddy可以在运行时创建字段和方法注释吗? 上这堂课: 和此代码: 向 类 添加注释很容易。但是对于 方法而言 ,似乎不更改方法实现是不可能的。 我敢肯定,我只是做得不好,但是不幸的是,当方法 没有代码更改 而只

  • 下面是我的代码, 我无法用注释来注释类, Netbean IDE说注释类型不适用于这种声明。 我用netbeans运行JDK 1.6和Jaxb 1.5。 感谢您的任何帮助。

  • 我想在我的pandas条形图中添加百分比值-以及计数。然而,我不能这样做。我的代码如下所示,到目前为止,我可以得到要显示的计数值。有人能帮我在每个条显示的计数值旁边/下面添加相对%值吗? 我的代码的输出如下所示。如何在显示的每个计数值旁边添加%值?