19

是否可以在流式 SXSSFWorkbook 上使用 autoSizeColumns?我实现了一个导出功能,将对象列表导出到 Excel。起初我使用 XSSFWorkbook(不是流式传输),在创建了所有单元格之后,我自动调整了所有列的大小,从而生成了一个不错的 excel 文件。

对于性能问题,我们想将工作簿更改为流版本,但这导致 org.apache.poi.ss.util.SheetUtil.getCellWidth 处出现 NullPointer。

是否可以为 SXSSFWorkbook 调用 autoSizeColumns?

我使用 poi-ooxml 3.9,但我在 3.8 中遇到了同样的问题。

4

3 回答 3

20

您需要确保每个单元格都有一个值。

我们使用以下代码为单元格设置字符串值:

Cell c = row.createCell(i);
c.setCellValue(text == null ? "" : text );

** 单元格不应为空值,否则会引发 NullPointerException。因此设置如上所示的值。

非常感谢,这有帮助!!

于 2013-01-24T09:05:47.090 回答
2

使用sheet.isColumnTrackedForAutoSizing(0); 对于第一次和随后用于其他列,每当执行 autoSizeColumn(0) 的代码被执行时,我都会遇到异常。通过使用上面的代码,我已经解决了这个问题,并且根据文本扩展列宽也很好。

于 2019-10-18T09:30:14.963 回答
-1

错误:NullPointerException onorg.apache.poi.ss.util.SheetUtil.getCellWidth(SheetUtil.java:122)

修复:始终为 Cell 设置 value 如下所示,当 Cell 中存在 null 时会抛出 NullPointerException,因此将 value 设置为:

Cell c = row.createCell(i);
c.setCellValue(text == null ? "" : text );
于 2020-04-01T11:46:02.900 回答