1. 复现 :使用POI导出带下拉框的excel文件,如果下拉框内容过多,下拉框变为了空
2. 解决思路 : 导出时创建隐藏的sheet,下拉框的取值从隐藏的sheet中获取,下拉框显示正常
3. 记录:因为网上的一些代码用的都不是SXSSFSheet创建 所以拿过来都需要改,所以我把改好的代码贴上来,大家就不用修改了
4. 代码:
调用:
int sheetIndex
= 1;
setLongHSSFValidation(workbook
,textLine1
,sheet
,1,size
,i
,sheetIndex
++);
setLongHSSFValidation(workbook
,textLine2
,sheet
,1,size
,i
,sheetIndex
++);
public static void setLongHSSFValidation(SXSSFWorkbook workbook
,String
[] deptList
,SXSSFSheet sheet
,int firstRow
, int endRow
, int cellNum
,int sheetIndex
) {
String hiddenName
= "hidden"+cellNum
;
SXSSFSheet 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);
} else {
dataValidation
.setSuppressDropDownArrow(false);
}
sheet
.addValidationData(dataValidation
);
workbook
.setSheetHidden(sheetIndex
, true);
}
这是一般的下拉框代码,数据量少的时候可以用
public static SXSSFSheet
setHSSFValidation(SXSSFSheet sheet
,
String
[] textlist
, int firstRow
, int endRow
, int firstCol
,
int endCol
) {
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);
} else {
createValidation
.setSuppressDropDownArrow(false);
}
sheet
.addValidationData(createValidation
);
return sheet
;
}
如果这篇博客对你有帮助,可以点赞,如有问题可以添加评论