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

在Apache Poi中调用trackAllColumnsForAutoSIzing的内存含义是什么

米夕
2023-03-14

使用Apache Poi,我将用于将数据写入Excel电子表格的代码从HSSF转换为SXSSF,以允许在写入大文件时占用更小的内存。我遇到的一个问题是尝试根据数据调整列的大小

for (int 0 = 1; i < next.getMapping().size(); i++)
{
     next.getSheet().autoSizeColumn(i);
} 

我现在抱怨我的专栏没有被追踪到而失败了

我通过添加first修复了这个问题

((SXSSFSheet)next.getSheet()).trackAllColumnsForAutoSizing();
workbook.write(fos);
fos.close();
workbook.dispose();
    null

调整列宽以适应内容。

在较大的工作表上,此过程可能相对较慢,因此通常每列只应在处理结束时调用一次。可以指定是考虑还是忽略合并单元格的内容。默认值是忽略合并的单元格。

关于SXSSF实现的特别注意事项:必须使用trackColumnForAutoSizing(int)或trackAllColumnsForAutoSizing()在SXSSFSheet中注册希望跟踪的列。之所以需要这样做,是因为计算列宽所需的行可能已落在随机访问窗口之外,并被刷新到磁盘中。即使所有行都在“随机访问”窗口中,也需要跟踪列。

共有1个答案

段良弼
2023-03-14

因为Apache POI是开源的,所以您可以阅读实现代码,看看它是如何工作的!

跟踪列不会对内存占用造成太大影响,因为主存储仅为每列一个对象:

Map<Integer, ColumnWidthPair> maxColumnWidths = 
                              new HashMap<Integer, ColumnWidthPair>();

跟踪所做的是减慢行的添加速度,因为对于被跟踪列中的每个单元格,POI必须在将其刷新到磁盘之前计算出单元格的宽度。

 类似资料:
  • 我本可以问我的一个同事这个问题,但我想如果我需要知道这个,那么其他新手也会知道,所以最好把它放在堆栈溢出上。 我得到registerOutParameter返回值,这些值不是ResultSet返回的,也不是ResultSet返回的。我无法想象这将如何发生,也无法想象一个可能的用例是什么。 所以你知道这不是懒惰,到目前为止我已经看过: oracle文档(https://docs.oracle.com

  • 当我运行react native项目时,我得到一个错误,但我不知道我会犯什么错误,我非常困惑。

  • 问题内容: Java中“ this”的含义是什么? 问题答案: this 指当前对象 每个非静态方法都在对象的上下文中运行。因此,如果你有这样的课程: 然后调用上会打印 因此,有效地将它用于多种用途: 澄清你在谈论一个字段,当还有其他与该字段同名的东西时 整体引用当前对象 在构造函数中调用当前类的其他构造函数

  • 问题内容: 这个静态函数是来自名称空间的类中的吗? 我该如何解释这个名字?在JRE中的哪个位置定义了此功能?在/ ? 问题答案: 否。实际上是类中的静态成员(不是.NET中的静态成员),它是。的实例。并且是该类的常规(重载)方法。 请参阅http://download.oracle.com/javase/6/docs/api/java/lang/System.html#out。 其实,如果/ /

  • 问题内容: 这段代码在: 最后一行使我感到非常困惑。我不知道的意思。 这些是其他代码: 结果是 我猜想的功能是从中选择所有元素,但是我还没有找到正式的解释。它是什么? 问题答案: builtin.go中的代码用作文档。该代码未编译。 在指出这个函数的最后一个参数是可变参数。可变参数在Go语言规范中进行了说明。 该类型的部分为任何围棋类型替身。

  • 问题内容: 我是Golang的新手,正在做http://tour.golang.org/。谁能向我解释 第1、3、5和7行, 特别是’*’和’&’的作用吗?我的意思是通过在函数声明中提及它们,它们应该/应该做什么?一个玩具的例子: 看起来它们就像我们在C ++中一样。但是我无法将这些概念与此处的内容联系起来。换句话说,当我在Go的函数声明中使用“ *”和“&”时,它们会做什么。 编辑: 我知道引用