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