-
1. 复现 :使用POI导出带下拉框的excel文件,如果下拉框内容过多,下拉框变为了空
-
解决思路 : 导出时创建隐藏的sheet,下拉框的取值从隐藏的sheet中获取,下拉框显示正常
-
记录:因为网上的一些代码用的都不是SXSSFSheet创建 所以拿过来都需要改,所以我把改好的代码贴上来,大家就不用修改了
-
代码:
public static void setLongHSSFValidation(XSSFWorkbook workbook, XSSFSheet sheet,
Integer[] intArr, String[] deptList) {
int firstRow = intArr[0];
String hiddenName = "hidden"+cellNum;
XSSFSheet hidden = workbook.createSheet(hiddenName);
for (int i = 0, length = deptList.length; i < length; i++) {
hidden.createRow(endRow + i).createCell(cellNum).setCellValue(deptList[i]);
Name category1Name = workbook.createName();
category1Name.setNameName(hiddenName);
category1Name.setRefersToFormula(hiddenName + "!A1:A" + (deptList.length + endRow));
DataValidationHelper helper = sheet.getDataValidationHelper();
DataValidationConstraint constraint = helper.createFormulaListConstraint(hiddenName);
CellRangeAddressList addressList = new CellRangeAddressList(1, endRow, cellNum, cellNum);
DataValidation dataValidation = helper.createValidation(constraint, addressList);
if (dataValidation instanceof XSSFDataValidation) {
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setShowErrorBox(true);
dataValidation.setSuppressDropDownArrow(false);
sheet.addValidationData(dataValidation);
workbook.setSheetHidden(workbook.getSheetIndex(hiddenName), true);

- 这是一般的下拉框代码,数据量少的时候可以用
public static XSSFSheet setHSSFValidation(XSSFSheet sheet,
String[] textlist, int firstRow, int endRow, int firstCol,
CellRangeAddressList regions = new CellRangeAddressList(firstRow,
endRow, firstCol, endCol);
DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
DataValidationConstraint createExplicitListConstraint = dataValidationHelper.createExplicitListConstraint(textlist);
DataValidation createValidation = dataValidationHelper.createValidation(createExplicitListConstraint, regions);
if (createValidation instanceof XSSFDataValidation) {
createValidation.setSuppressDropDownArrow(true);
createValidation.setShowErrorBox(true);
createValidation.setSuppressDropDownArrow(false);
sheet.addValidationData(createValidation);