Apache POI Excel大自动列宽

14
我正在尝试使用最新的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堆大小,但仍然花费了大量时间,并出现了内存不足的问题。

谢谢

Ram


为什么不使用SXSSF呢?那是演示BigGrid的新替代品。 - Gagravarr
是的,我会在未来的项目中使用SXSSF.....稍后会了解到。 - Ram Sharan Mittal
我遇到了同样的问题!你最终做了什么? - gursahib.singh.sahni
3个回答

33

首先选择第一行或标题,因为只有标题才能给出一行中单元格的最大数量。

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

然后对该行的每个列使用 autoSizeColumn

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

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


有时候不起作用 - https://dev59.com/D1oU5IYBdhLWcg3w1pT2 - Roman Soviak
出现错误:java.lang.NoClassDefFoundError: 无法解析:Ljava/awt/font/FontRenderContext; - - Ramesh Bhati
@RameshBhati 请查看 https://dev59.com/D1oU5IYBdhLWcg3w1pT2#37070120 - Sankumarsingh

5

我建议您尝试使用sxssf。它使用xml格式将数据加载到Excel中,速度更快,更适合创建大型报告或网格。xssf中的自动调整大小功能默认情况下需要太长时间。


4

sheet.autoSizeColumn(columnNumber)的作用是自动调整列宽。 这将根据最长单元格的长度来调整列宽。


有时候,当使用autosizecolumn时,Android POI会崩溃。 - Roman Soviak
出现错误:java.lang.NoClassDefFoundError: 无法解析:Ljava/awt/font/FontRenderContext; - Ramesh Bhati

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