poi导出excel时下拉列表值超过255问题解决方案

青春壹個敷衍的年華 提交于 2019-12-19 04:52:15

问题来源:

导出时如果下拉框中的文字总长度超过一定限制就会导致导出报255错误

解决方案思路:

在创建sheet页时新建一个sheet页, 将下拉的数据写到新建的sheet页中, 然后将该sheet页隐藏

代码参考:

XSSFWorkbook wb = new XSSFWorkbook();
String sheetName = data.getName();
if (null == sheetName) {
     sheetName = "Sheet1";
}
XSSFSheet sheet = wb.createSheet(sheetName);

//获取所有sheet页个数
int sheetTotal = wb.getNumberOfSheets();

//处理下拉数据
if (data.getCellRangeMap() != null) {
     Set<Map.Entry<Integer, String[]>> selectSet = data.getCellRangeMap().entrySet();
     Iterator iterator = ((Set) selectSet).iterator();

     while (iterator.hasNext()) {
         Map.Entry<Integer, String[]> entryMap = (Map.Entry<Integer, String[]>) iterator.next();
         Integer columnIndex = entryMap.getKey(); //下拉框所在的列
         String[] selectList = entryMap.getValue(); //对应列下拉框数据

         //新建一个sheet页
         String hiddenSheetName = "hiddenSheet" + sheetTotal;
         XSSFSheet hiddenSheet = wb.createSheet(hiddenSheetName);
         Row row;

         //写入下拉数据到新的sheet页中
         for (int i = 0; i < selectList.length; i++) {
             row = hiddenSheet.createRow(i);
             Cell cell = row.createCell(0);
             cell.setCellValue(selectList[i]);
         }

         //获取新sheet页内容
         String strFormula = hiddenSheetName + "!$A$1:$A$65535";
         XSSFDataValidationConstraint constraint = new XSSFDataValidationConstraint(DataValidationConstraint.ValidationType.LIST,strFormula);
         // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
         CellRangeAddressList regions = new CellRangeAddressList(0,65535, columnIndex, columnIndex);
         // 数据有效性对象
         DataValidationHelper help = new XSSFDataValidationHelper((XSSFSheet) sheet);
         DataValidation validation = help.createValidation(constraint, regions);
         sheet.addValidationData(validation);

         //将新建的sheet页隐藏掉
         wb.setSheetHidden(sheetTotal, true);

         sheetTotal++;
     }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!