我正在用excel创建日历。第一列是01.01.2010 (dd.MM.yyyy),第二列是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)
我发现这个bug报告表明它已经在3.6版本中修复了。我们使用的是3.5版,但更改为3.6版似乎没有任何好处。有人有什么建议吗?
https://issues.apache.org/bugzilla/show_bug.cgi?id=46806
编辑:似乎bug问题是关于公式的..
发布于 2011-08-05 00:00:17
2007年前的excel表格有256列的限制。这些工作表还会生成".xls“扩展名。Excel2007和更高版本可以容纳16K列,都是基于XML格式并生成".xlsx“格式。2007年之前的工作表的POI对象模型是org.apache.poi.hssf.usermodel
,而2007年以后的工作表的对象模型是org.apache.poi.xssf.usermodel
,package org.apache.poi.ss.usermodel
提供了涵盖这两种对象模型的统一接口。因此,要创建256个以上的列,必须在org.apache.poi.xssf.usermodel
包或org.apache.poi.ss.usermodel
中使用类。
发布于 2010-02-24 22:39:02
您的问题可能出在Excel,而不是您的API。
The maximum number of columns in a pre-Excel 2007 spreadsheet is 256。
发布于 2010-02-24 22:37:16
您可能会考虑从纵向切换到横向(换句话说,调换数据),这样您就可以在一年中的每一天使用65k行。这正是我对一个需要大量列和少量行的报告所做的。
或者,您可以将一年分成6个月的子期间,每个子期间都有自己的工作表。
这些都是权宜之计,但根据您的需求,可能会为您提供一个“足够好”的解决方案。
https://stackoverflow.com/questions/2326668
复制相似问题