apache poi excel 大自动列宽

问题描述 投票:0回答:3

我正在尝试使用最新的 Apache poi 创建一个包含 30 列和 100 万条记录的大型 Excel 2010。我正在按照此链接中的描述进行创建http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BigGridDemo.java。但我希望列宽与列标题文本大小相同。但是当我使用以下代码创建 Excel 后执行此操作时

for (int x = 0; x < sheet.getRow(0).getPhysicalNumberOfCells(); x++) {
            sheet.setColumnWidth(x, 20*256);
        }

这花费了很长的时间,即使堆大小为 5GB,我也会出现内存不足的情况。

谢谢

公羊

java apache-poi out-of-memory big-o
3个回答
33
投票

首先选择第一行或标题,因为只有标题可以为您提供一行中的最大单元格数。

HSSFRow row = wb.getSheetAt(0).getRow(0);

然后在该行的每一列上使用

autoSizeColumn

for(int colNum = 0; colNum<row.getLastCellNum();colNum++)   
    wb.getSheetAt(0).autoSizeColumn(colNum);

这会将列宽设置为与其标题宽度相同。


5
投票

我还建议您考虑使用 sxssf。它使用 xml 格式将其加载到 Excel 中。这是创建大型报告或网格的更快更好的方法。 xssf 中的自动调整大小功能默认需要很长时间。


4
投票

sheet.autoSizeColumn(columnNumber)
有效。 这会将列的大小调整为最大单元格长度。

© www.soinside.com 2019 - 2024. All rights reserved.