poi设置多个数据有效性校验超长问题


项目上最近有一个需求,需要导出的excel拥有多个数据有效性校验的功能,开始是参考了网上的使用POI为Excel添加数据有效性验证,核心代码大致如下

	XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper
			.createExplicitListConstraint(explicitListValues);
	CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
	XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);
	validation.setSuppressDropDownArrow(true);
	validation.setShowErrorBox(true);
	sheet.addValidationData(validation);

但是使用过程中,发现一旦有效性List超过255个字符整个Excel就会全部失效的情况,找了很久,参考了网上另外一篇poi导出excel时下拉列表值超过255问题解决方案
核心代码如下

         XSSFSheet sheet = wb.createSheet(sheetName);
         //获取所有sheet页个数
         int sheetTotal = wb.getNumberOfSheets();
         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";   //hiddenSheetName + ! 定位到用来加载列的新的sheet页,后面则是A列的1-65535为有效性List条件
         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);

成功解决问题!!!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM