Apache POI 4.1.2中的SXSSFSheet自适应列出错

3

我的项目使用Spring Boot。我尝试使用org.apache.poi 4.1.2将数据导出到Excel文件中,我使用autoSizeColumn方法自动调整列宽。

headerRow.forEach(item -> {
  sheet.autoSizeColumn(item.getColumnIndex());
});

但我收到了错误提示。
java.lang.IllegalStateException: Could not auto-size column. Make sure the column was tracked prior to auto-sizing the column.
at org.apache.poi.xssf.streaming.SXSSFSheet.autoSizeColumn(SXSSFSheet.java:1591)
at org.apache.poi.xssf.streaming.SXSSFSheet.autoSizeColumn(SXSSFSheet.java:1545)

如何修复此错误。
2个回答

3

我已经按照这个链接SXSSFSheet.autoSizeColumn is throwing IllegalStateException解决了这个问题。

我通过使用SXSSFSheet类的方法public void trackAllColumnsForAutoSizing()解决了这个问题。

public void trackAllColumnsForAutoSizing()

跟踪工作表中所有列的自动调整大小。如果调用此方法,则不需要跟踪单个列。由于确定单元格最佳适合宽度的成本很高,因此可能会影响性能。

自:3.14beta1


0

我已经通过以下方式解决了上述问题,请在将所有内容呈现到工作表上后再执行此操作。

如果您有列的列表,则以下内容将正常工作。

// autoSizing of the columns

for (int i = 0; i < columns.size(); i++) {
  workbookSheet.trackAllColumnsForAutoSizing();
  workbookSheet.autoSizeColumn(i);
}

对于您的情况,以下内容可行。

headerRow.forEach(item -> {
  sheet.trackAllColumnsForAutoSizing();
  sheet.autoSizeColumn(item.getColumnIndex());
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接