19

我正在用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

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

4

6 回答 6

27

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

于 2011-08-04T16:00:16.683 回答
9

您的问题可能与 Excel 相关,而不是您的 API。

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

于 2010-02-24T14:39:01.757 回答
9

我想到了。我不得不从org.apache.poi.hssf.usermodel切换 到org.apache.poi.ss.usermodel

这允许您使用 16k 列或类似的东西。

于 2010-02-24T19:39:10.447 回答
3

您可能会考虑从纵向切换到横向(换句话说,转置数据),以便一年中的几天可以使用 65k 行。这正是我对需要大量列和少量行的报告所做的。

或者,您可以将一年分成 6 个月的子时段,每个子时段都在自己的工作表上。

这些都是权宜之计的解决方案,但可能会根据您的要求为您提供“足够好”的解决方案。 

于 2010-02-24T14:37:16.143 回答
2

这是因为 Excel 的列数有限请参阅: http: //office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP005199291.aspx

于 2010-11-24T13:52:21.133 回答
1


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

Workbook workbook = new XSSFWorkbook()

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>`enter code here`
   <version>3.15</version>
  </dependency>

  <dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>3.15</version>
  </dependency>
于 2018-05-18T11:50:05.150 回答