【问题标题】:apache poi excel big auto column widthapache poi excel大自动列宽
【发布时间】:2015-05-01 02:56:39
【问题描述】:

我正在尝试使用最新的 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,我的内存也快用完了。

谢谢

内存

【问题讨论】:

  • 你为什么不使用 SXSSF?这是演示 BigGrid 东西的新替代品
  • 是的,看到SXSSF会在以后的项目中用到.....以后知道了
  • 我面临同样的问题!你最终做了什么?

标签: java apache-poi out-of-memory big-o


【解决方案1】:

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

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

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

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

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

【讨论】:

【解决方案2】:

我还建议您考虑使用 sxssf。它使用 xml 格式将其加载到 Excel 中。这是创建大型报表或网格的更快和更好的方法。默认情况下,xssf 中的 autosizing 函数耗时过长。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多