如何加速apache POI中的自动调整列?

ant*_*ken 22 java excel performance autosize apache-poi

我使用以下代码来自动调整电子表格中的列:

for (int i = 0; i < columns.size(); i++) {
   sheet.autoSizeColumn(i, true);
   sheet.setColumnWidth(i, sheet.getColumnWidth(i) + 600);
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果大型电子表格超过3000行,则每列自动调整大小需要10分钟以上.尽管如此,它对于小文档来说非常快.有什么能帮助自动化更快地工作吗?

ant*_*ken 33

解决方案对我有用:

有可能避免合并区域,所以我可以迭代其他单元格,最后自动调整到最大的单元格,如下所示:

int width = ((int)(maxNumCharacters * 1.14388)) * 256;
sheet.setColumnWidth(i, width);
Run Code Online (Sandbox Code Playgroud)

其中1.14388是"Serif"字体的最大字符宽度和256个字体单位.

自动调整的性能从10分钟提高到6秒.

  • @antken,如何计算其他字体的“最大字符宽度”? (2认同)
  • 来自apache API:此过程在大型工作表上可能相对较慢,因此通常在处理结束时每列只调用一次. (2认同)
  • 因为宽度是以字符宽度的1/256为单位设置的。看到这个:https://poi.apache.org/apidocs/dev/org/apache/poi/hssf/usermodel/HSSFSheet.html#setColumnWidth-int-int- (2认同)