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

时间:2010-02-24 14:28:51

标签: java excel apache-poi

我正在excel中创建日历。第1列是2010年1月1日(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

编辑:似乎错误问题是关于公式..

6 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:9)

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

The maximum number of columns in a pre-Excel 2007 spreadsheet is 256

答案 2 :(得分:9)

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

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

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:2)

答案 5 :(得分: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>