如何使用Apache POI 3.6在Excel表格中获得超过255列
我在Excel中创build一个日历。 第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引发这个exception:
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)
我发现这个bug报告表明它已经在3.6版本中修复了。 我们使用3.5,但改为3.6似乎没有任何好处。 任何人有任何提示?
https://issues.apache.org/bugzilla/show_bug.cgi?id=46806
编辑:似乎错误问题是关于公式..
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
提供了一个统一的界面覆盖了两个对象模型。 因此,要创build超过256列,您必须使用org.apache.poi.xssf.usermodel
包中或org.apache.poi.ss.usermodel
。
您的问题可能与Excel,而不是您的API。
预Excel 2007电子表格中的最大列数是256 。
我想到了。 我不得不从org.apache.poi.hssf.usermodel切换到org.apache.poi.ss.usermodel
这使您可以使用16k列或类似的东西。
您可能会考虑从纵向切换到横向(换句话说,转换数据),以便您可以在一年中使用65k行。 这正是我所做的报告需要大量的列和less量的行。
或者,您也可以在6个月的子时间段内分别进行分配,每个分配一个表格。
这些都是临时解决scheme,但可能会为您提供一个“足够好”的解决scheme,具体取决于您的要求。
这是因为Excel数量有限列请参阅: http : //office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP005199291.aspx