• 解决POI的SXSSFSheet 创建excel下拉框,下拉框内容过多时不显示的问题


    1. 1. 复现 :使用POI导出带下拉框的excel文件,如果下拉框内容过多,下拉框变为了空
    2.  解决思路 : 导出时创建隐藏的sheet,下拉框的取值从隐藏的sheet中获取,下拉框显示正常
    3. 记录:因为网上的一些代码用的都不是SXSSFSheet创建 所以拿过来都需要改,所以我把改好的代码贴上来,大家就不用修改了
    4. 代码:
      1. /**
      2. * @description: 解决下拉框过长不显示问题
      3. * @author: Johnny
      4. * @param workbook
      5. * @param sheet
      6. * @param intArr (开始行,结束行,下拉框所在的列)
      7. * @param deptList 下拉数据数组
      8. * @return: void
      9. **/
      10. public static void setLongHSSFValidation(XSSFWorkbook workbook, XSSFSheet sheet,
      11. Integer[] intArr, String[] deptList) {
      12. int firstRow = intArr[0];
      13. int endRow =intArr[1];
      14. int cellNum =intArr[2];
      15. String hiddenName = "hidden"+cellNum;
      16. //1.创建隐藏的sheet页。
      17. XSSFSheet hidden = workbook.createSheet(hiddenName);
      18. //2.循环赋值(为了防止下拉框的行数与隐藏域的行数相对应,将隐藏域加到结束行之后)
      19. for (int i = 0, length = deptList.length; i < length; i++) {
      20. hidden.createRow(endRow + i).createCell(cellNum).setCellValue(deptList[i]);
      21. }
      22. Name category1Name = workbook.createName();
      23. category1Name.setNameName(hiddenName);
      24. //3 A1:A代表隐藏域创建第N列createCell(N)时。以A1列开始A行数据获取下拉数组
      25. category1Name.setRefersToFormula(hiddenName + "!A1:A" + (deptList.length + endRow));
      26. //
      27. DataValidationHelper helper = sheet.getDataValidationHelper();
      28. DataValidationConstraint constraint = helper.createFormulaListConstraint(hiddenName);
      29. CellRangeAddressList addressList = new CellRangeAddressList(1, endRow, cellNum, cellNum);
      30. DataValidation dataValidation = helper.createValidation(constraint, addressList);
      31. if (dataValidation instanceof XSSFDataValidation) {
      32. // 数据校验
      33. dataValidation.setSuppressDropDownArrow(true);
      34. dataValidation.setShowErrorBox(true);
      35. } else {
      36. dataValidation.setSuppressDropDownArrow(false);
      37. }
      38. // 作用在目标sheet上
      39. sheet.addValidationData(dataValidation);
      40. // 设置hiddenSheet隐藏
      41. workbook.setSheetHidden(workbook.getSheetIndex(hiddenName), true);
      42. }
    5. 这是一般的下拉框代码,数据量少的时候可以用
    1. /**有下拉框不显示的问题
    2. * 设置excel下拉框
    3. * @param sheet
    4. * @param textlist 下拉数据列表
    5. * @param firstRow
    6. * @param endRow
    7. * @param firstCol
    8. * @param endCol
    9. * @return
    10. */
    11. public static XSSFSheet setHSSFValidation(XSSFSheet sheet,
    12. String[] textlist, int firstRow, int endRow, int firstCol,
    13. int endCol) {
    14. // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
    15. CellRangeAddressList regions = new CellRangeAddressList(firstRow,
    16. endRow, firstCol, endCol);
    17. // 数据有效性对象
    18. DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
    19. DataValidationConstraint createExplicitListConstraint = dataValidationHelper.createExplicitListConstraint(textlist);
    20. DataValidation createValidation = dataValidationHelper.createValidation(createExplicitListConstraint, regions);
    21. if (createValidation instanceof XSSFDataValidation) {
    22. createValidation.setSuppressDropDownArrow(true);
    23. createValidation.setShowErrorBox(true);
    24. } else {
    25. createValidation.setSuppressDropDownArrow(false);
    26. }
    27. sheet.addValidationData(createValidation);
    28. return sheet;
    29. }

     

  • 相关阅读:
    【SOLIDWORKS学习笔记】制作小风扇摇头底座(上)--- 整体结构设计
    如何在华为 Ascend 设备上运行模型
    Vue学习之认识到应用(三)
    lvs负载均衡之配置lvs-dr模式的httpd负载集群
    2020 ICPC Shanghai Site G
    卷积神经网络中的 Full、Same 和 Valid 卷积
    主流开发语言与环境介绍
    bypass绕WAF
    Linux入门怎么学?262页linux学习笔记,零基础也能轻松入门
    解析外贸开发信的结构?营销邮件书写技巧?
  • 原文地址:https://blog.csdn.net/chuxuan0215/article/details/134177926