我正在使用包含100万行的.xlsx(流)生成一个excel文件( SXSSFWorkbook )。一个列必须包含一个4-5值的下拉列表。我能产生这个,但我有两个问题-
下面是代码片段
DataValidationHelper validationHelper = sh.getDataValidationHelper();
CellRangeAddressList addressList = new CellRangeAddressList(0, sh.getLastRowNum(), cellnum, cellnum);
DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(new String[] { "High risk", "Medium risk", "Low risk", "No risk" });
DataValidation dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setSuppressDropDownArrow(true);
sh.addValidationData(dataValidation);请给我建议更好的解决办法。
发布于 2018-12-14 12:12:31
有一个简单的解决方案。在excel中创建一个隐藏的(或密码保护的)工作表,在下拉菜单中使用您需要的数据。然后在dataValidationConstraint标记中引用该表。下载不需要太多时间。PFB样本码
main(){
new_workbook = new XSSFWorkbook();
hiddenRiskSheet= new_workbook.createSheet("RiskHidden");
createRiskHiddenSheet(hiddenPrepaidSheet);
hiddenRiskSheet.protectSheet("passw0rd");
hiddenRiskSheet.enableLocking();
DataValidationHelper validationHelper = null;
CellRangeAddressList addressList = new CellRangeAddressList(0, sh.getLastRowNum(), cellnum, cellnum);
DataValidationConstraint constraint = validationHelper..createFormulaListConstraint("RiskHidden!$A$1:$A$4");
DataValidation dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setSuppressDropDownArrow(true);
validationHelper.addValidationData(dataValidation);
}
public void createRiskHiddenSheet(XSSFSheet hiddenRiskSheet)
{
String[] risk = { "High risk", "Medium risk", "Low risk", "No risk" };
for (int i = 0; i < 4; i++) {
Row row = hiddenRiskSheet.createRow(i);
Cell cell = row.createCell(i);
String cat = risk[i];
cell.setCellValue(cat);
}
}
}https://stackoverflow.com/questions/39867531
复制相似问题