• 关于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;
    }

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

  • 相关阅读:
    tomcat监控与优化
    rpm打包
    Rewrite和location 区别
    LNMP服务
    yum仓库脚本
    用户管理的脚本2
    pxe装机脚本
    用户管理的脚本1
    磁盘管理综合测试题
    MySQL 增量备份介绍及案例演示
  • 原文地址:https://www.cnblogs.com/LIFE-bug/p/5443027.html
Copyright © 2020-2023  润新知