当前位置: 首页 > 知识库问答 >
问题:

java - poi设置下拉列表报错?

澹台臻
2023-11-17

前端请求文件模板,代码生成excel模板。其中有一列数据要做成下拉的模式。
功能也实现了。
但是如果下拉列表的下拉项过多。下载出的文件模板,下拉项点击无法展示出来。20多个下拉选项是可以正确下拉的,40多个就不行了。这个如果解决??

            //下拉选项            String[] departList = list.subList(0,35).stream().map(v->{                return v.getDepartName();            }).distinct().toArray(String[]::new);            //设置下拉的选项            XSSFDataValidationHelper helper = new XSSFDataValidationHelper(sheet);            DataValidationConstraint constraint = helper.createExplicitListConstraint(departList);            //设置影响的行和列            CellRangeAddressList addressList = new CellRangeAddressList(1, 300, 2, 2);            //设置校验            DataValidation validation = helper.createValidation(constraint, addressList);            validation.setSuppressDropDownArrow(true);            validation.setShowErrorBox(true);            validation.setErrorStyle(DataValidation.ErrorStyle.STOP);            validation.createErrorBox("提示","部门不存在!");            sheet.addValidationData(validation);

共有2个答案

慕金林
2023-11-17
XSSFSheet refSheet = workbook.createSheet("refSheet");for (int i = 0; i < departList.length; i++) {    XSSFRow row = refSheet.createRow(i);    XSSFCell cell = row.createCell(0);    cell.setCellValue(departList[i]);}String formula = "refSheet!$A$1:$A$" + departList.length;DataValidationConstraint constraint = helper.createFormulaListConstraint(formula);// ...其余设置相同
沃念
2023-11-17

这个问题可能是由于数据验证的行和列范围设置不正确导致的。在代码中,您设置了数据验证的行范围为1到300,列范围为2到2。这可能意味着,如果您的Excel表格的行或列超过这个范围,那么下拉列表将无法正常工作。

解决方案是将数据验证的行和列范围设置为包含所有需要数据验证的单元格。例如,如果您的Excel表格的行和列范围都大于300,那么您需要将行和列范围设置得更大一些。

此外,数据验证的错误提示信息也可能需要调整。在代码中,您设置了一个名为"提示"的错误提示框,并显示"部门不存在!"的信息。如果下拉列表无法正常工作,您可以尝试修改错误提示信息,以帮助用户更好地理解问题所在。

以下是修改后的代码示例:

//下拉选项String[] departList = list.subList(0,35).stream().map(v->{    return v.getDepartName();}).distinct().toArray(String[]::new);//设置下拉的选项XSSFDataValidationHelper helper = new XSSFDataValidationHelper(sheet);DataValidationConstraint constraint = helper.createExplicitListConstraint(departList);//设置影响的行和列CellRangeAddressList addressList = new CellRangeAddressList(1, sheet.getLastRowNum(), 2, 2);//设置校验DataValidation validation = helper.createValidation(constraint, addressList);validation.setSuppressDropDownArrow(true);validation.setShowErrorBox(true);validation.setErrorStyle(DataValidation.ErrorStyle.STOP);validation.createErrorBox("提示","部门不存在!");sheet.addValidationData(validation);

在这个示例中,我们将数据验证的行和列范围设置为从1到sheet.getLastRowNum()和从2到2,这样就可以覆盖所有需要数据验证的单元格了。

 类似资料:
  • 我需要使用Apache POI在excel文件中创建一个下拉列表。我能够做到这一点,但我不能使下拉列表中的第一个项目作为默认项目。

  • 增加下拉列表在到按钮上,确保 data-activates 属性匹配 <ul> 标签的 id,你可以增加分隔线通过 <li class="divider"></li> 标签。 <!-- Dropdown Trigger --> <a class='dropdown-button btn' href='#' data-activates='dropdown1'>单击我</a> <!-- D

  • 问题内容: 如何在引导程序3.0中将下拉触发按钮的宽度设置为等于下拉列表的宽度?与使用bootstrap-select所实现的功能类似。我试图用col- *类将整个列表包装在div中,但这似乎不起作用: 因此,我想:按钮宽度=下拉菜单列表= col- *宽度。 问题答案: 我通过设置下拉菜单和按钮宽度= 100%找到了解决方案。 现在,按钮和下拉列表的宽度相同,由列宽度控制。

  • 如何将bootstrap 3.0中下拉触发按钮的宽度设置为等于下拉列表的宽度?与使用引导选择时实现的功能类似(http://silviomoreto.github.io/bootstrap-select/).我试图用col-*类将整个列表包装在一个div中,但这似乎不起作用: 因此,我想:按钮宽度=下拉框列表=col-*宽度。

  • 实现下拉列表(Combo Box)功能,可以用作下拉单选框。 [Code4App.com]

  • 问题内容: 我需要在Excel工作表中的特定单元格上创建一个下拉列表(数据验证),然后将其读回。 在提供的教程的帮助下,我能够在Excel工作表中创建一个下拉列表,但是再次阅读该列表时,我还需要阅读该下拉列表的内容,以便可以呈现类似的下拉列表在用户界面上列出。 有什么建议? 问题答案: DataValidation甚至存储在HSSF工作簿中,但是它在该库中,并且由于这样,对它的访问权不提供给应用程