首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel使用DataValidationHelper下拉列表

Excel使用DataValidationHelper下拉列表
EN

Stack Overflow用户
提问于 2016-10-05 07:09:14
回答 1查看 1.9K关注 0票数 5

我正在使用包含100万行的.xlsx(流)生成一个excel文件( SXSSFWorkbook )。一个列必须包含一个4-5值的下拉列表。我能产生这个,但我有两个问题-

  1. excel正在花费大量的时间来生成。7分钟下垂,11秒无250,000行。
  2. 文件生成后无法打开,因为它要求恢复最终将失败的数据。消息称“在文件D:\Test.xlsx删除功能中检测到错误: /xl/worksheets/sheet2.xml部件中的数据验证”

下面是代码片段

代码语言:javascript
复制
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);

请给我建议更好的解决办法。

EN

回答 1

Stack Overflow用户

发布于 2018-12-14 12:12:31

有一个简单的解决方案。在excel中创建一个隐藏的(或密码保护的)工作表,在下拉菜单中使用您需要的数据。然后在dataValidationConstraint标记中引用该表。下载不需要太多时间。PFB样本码

代码语言:javascript
复制
  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);
                }
            }
        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39867531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档