如何使用 Apache POI 3.6 在 Excel 工作表中获取超过 255 列

2022-09-02 11:34:39

我正在 Excel 中创建日历。列 1 是 01.01.2010 (dd.MM.yyyy),列 2 是 02.01.2010,依此类推。

这是我的代码:

int day_cell = 0;

for(int i = 0; i < days.size(); i++)
{
     Date day = days.get(i);

     HSSFCell cell = row.createCell(day_cell++);
     cell.setCellValue(day.toString());
}

当我到达第256列时,POI会抛出这个异常:

java.lang.IllegalArgumentException: Invalid column index (256).  Allowable column range for BIFF8 is (0..255) or ('A'..'IV')
at org.apache.poi.hssf.usermodel.HSSFCell.checkBounds(HSSFCell.java:926)
at org.apache.poi.hssf.usermodel.HSSFCell.<init>(HSSFCell.java:162)
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:141)
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:119)

我发现这个错误报告表明它在3.6版本中已修复。我们使用的是3.5,但改用3.6似乎没有任何好处。有人有任何提示吗?

https://issues.apache.org/bugzilla/show_bug.cgi?id=46806

编辑:似乎错误问题与公式有关。


答案 1

2007 年之前的 Excel 工作表有 256 列的限制。这些工作表还会生成“.xls”扩展名。Excel 2007 及更高版本可以容纳 16K 列,基于 XML 格式并生成“.xlsx”格式。2007 年之前的工作表的 POI 对象模型是 2007 年以后的工作表的对象模型,该包提供了涵盖两个对象模型的统一接口。因此,要创建超过 256 列,您必须在包中或 中使用类。org.apache.poi.hssf.usermodelorg.apache.poi.xssf.usermodelorg.apache.poi.ss.usermodelorg.apache.poi.xssf.usermodelorg.apache.poi.ss.usermodel


答案 2

您的问题可能出在 Excel 上,而不是您的 API。

Excel 2007 之前的电子表格中的最大列数为 256


推荐