apache poi excel大自动列宽

Ram*_*tal 12 java big-o out-of-memory apache-poi

我尝试使用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);
        }
Run Code Online (Sandbox Code Playgroud)

它占用了大量的时间,即使有5GB的堆大小,我也会失去记忆.

谢谢

内存

San*_*ngh 31

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

HSSFRow row = wb.getSheetAt(0).getRow(0);
Run Code Online (Sandbox Code Playgroud)

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

for(int colNum = 0; colNum<row.getLastCellNum();colNum++)   
    wb.getSheetAt(0).autoSizeColumn(colNum);
Run Code Online (Sandbox Code Playgroud)

这将设置列宽与其标题宽度相同.


小智 5

我还建议您考虑使用 sxssf。它使用 xml 格式将其加载到 Excel 中。这是创建大型报表或网格的更快和更好的方法。默认情况下,xssf 中的自动调整大小功能花费的时间太长。