关于Excel2003行数(65535)和列数(255)限制问题解决

      服务器运行一直都是正常的,最近却爆了一个让人头疼的错误。

先贴错误:

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;
}

 

 

代码不是最简的,还可以做一部分的提取处理.........嘻嘻

 

posted on 2016-04-28 16:05  无厘虫小强-BUG  阅读(7941)  评论(0编辑  收藏  举报

导航