服务器运行一直都是正常的,最近却爆了一个让人头疼的错误。
先贴错误:
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:921)
at org.apache.poi.hssf.usermodel.HSSFCell.<init>(HSSFCell.java:161)
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:141)
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:119)
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:97
看错误猜到七七八八了:由于03对行数(65535)和列数(255)有限制,所以当数据超出范围后就报错了。
解决办法:把HSSF改用XSSF模块生成Excel07的文档
其实也可以进行验证检测,根据先贴excel版本跟导出数据是否超过限制,来选择HSSF还是XSSF
贴部分代码(其他自行补充):
is2003=false;
if(is2003){
// 加载下拉列表内容
DVConstraint constraint = DVConstraint.createFormulaListConstraint(formulaString);
// 设置数据有效性加载在哪个单元格上。
// 四个参数分别是:起始行、终止行、起始列、终止列
int firstRow = naturalRowIndex - 1;
int lastRow = naturalRowIndex - 1;
int firstCol = naturalColumnIndex - 1;
int lastCol = naturalColumnIndex - 1;
CellRangeAddressList regions = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
// 数据有效性对象
DataValidation data_validation_list = new HSSFDataValidation(regions, constraint);//new HSSFDataValidation(regions, constraint);
// 设置输入信息提示信息
data_validation_list.createPromptBox("下拉选择提示", "请使用下拉方式选择合适的值!");
// 设置输入错误提示信息
data_validation_list.createErrorBox("选择错误提示", "你输入的值未在备选列表中,请下拉选择合适的值!");
//sheet.addValidationData(data_validation_list);
return data_validation_list;
}else{
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet) sheet);
// 加载下拉列表内容
XSSFDataValidationConstraint constraint = (XSSFDataValidationConstraint) dvHelper
.createFormulaListConstraint(formulaString);
// 设置数据有效性加载在哪个单元格上。
// 四个参数分别是:起始行、终止行、起始列、终止列
int firstRow = naturalRowIndex - 1;
int lastRow = naturalRowIndex - 1;
int firstCol = naturalColumnIndex - 1;
int lastCol = naturalColumnIndex - 1;
CellRangeAddressList regions = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
DataValidation data_validation_list = (XSSFDataValidation) dvHelper.createValidation(
constraint, regions);
// 设置输入信息提示信息
data_validation_list.createPromptBox("下拉选择提示", "请使用下拉方式选择合适的值!");
// 设置输入错误提示信息
data_validation_list.createErrorBox("选择错误提示", "你输入的值未在备选列表中,请下拉选择合适的值!");
sheet.addValidationData(data_validation_list);
return data_validation_list;
}
代码不是最简的,还可以做一部分的提取处理.........嘻嘻