当前位置:   article > 正文

JAVA 通过POI实现Excel从单元格选择下拉选项_java的pio设置excel禁止输入,只能选择

java的pio设置excel禁止输入,只能选择

发生情景:
最近使用到了模板导出功能,最开始使用的是hutool的POI工具,但是做下拉列表的时候,addSelect方法报错;

问题:
Excel在添加自定义下拉数据的时候,输入内容不能大于255个字符,这在做一些简单的下拉选项时没有问题,但是在下拉选项数据量过大时,就得换一种方式了——即‘从单元格选择下拉选项’,但是在hutool的官网API手册中未发现此内方法,所以转战POI

解决方案:
在创建Excel时新建一个sheet页, 将需要下拉的数据写到新建的sheet页中, 然后再对所需列设置下拉单元格即可;话不多说,下面贴代码。

代码:

  1. maven引入POI的包,注意两个包的版本需一致,不然会报错。
		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.10-FINAL</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.10-FINAL</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.在你的Excel工具类中添加下面两个方法

    /**
     * 设置下拉框数据
     * @param wb       表格对象
     * @param typeName 要渲染的sheet名称
     * @param values   下拉框的值
     * @param col      下拉列的下标
     * @author Hower Wong
     * @date 2022年5月27日
     */
    public static void setDropDownBox(XSSFWorkbook wb, String typeName, String[] values, Integer col) {
        //获取所有sheet页个数
        int sheetTotal = wb.getNumberOfSheets();
        //处理下拉数据
        if (values != null && values.length != 0) {
            //新建一个sheet页
            String hiddenSheetName = "hiddenSheet";
            XSSFSheet hiddenSheet = wb.getSheet(hiddenSheetName);
            if (hiddenSheet == null) {
                hiddenSheet = wb.createSheet(hiddenSheetName);
                sheetTotal++;
            }
            // 获取数据起始行
            int startRowNum = hiddenSheet.getLastRowNum() + 1;
            int endRowNum = startRowNum;
            //写入下拉数据到新的sheet页中
            for (int i = 0; i < values.length; i++)
                hiddenSheet.createRow(endRowNum++).createCell(0).setCellValue(values[i]);
            //将新建的sheet页隐藏掉
            wb.setSheetHidden(sheetTotal - 1, true);
            //获取新sheet页内容
            String strFormula = hiddenSheetName + "!$A$" + ++startRowNum + ":$A$" + endRowNum;
            // 设置下拉
            XSSFSheet mainSheet = wb.getSheet(typeName);
            mainSheet.addValidationData(SetDataValidation(wb, strFormula, 1, 65535, col, col));
        }
    }
    /**
     * 返回类型 DataValidation
     * @param wb         表格对象
     * @param strFormula formula
     * @param firstRow   起始行
     * @param endRow     终止行
     * @param firstCol   起始列
     * @param endCol     终止列
     * @return 返回类型 DataValidation
     */
    public static DataValidation SetDataValidation(Workbook wb, String strFormula, int firstRow, int endRow, int firstCol, int endCol) {
        CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
        DataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet) wb.getSheet("typelist"));
        DataValidationConstraint formulaListConstraint = dvHelper.createFormulaListConstraint(strFormula);
        return dvHelper.createValidation(formulaListConstraint, regions);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

3.在你的代码中使用方法即可
调用方式
以上POI对设置下拉选项的工具方法,希望对大家有所帮助!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/170352?site
推荐阅读
相关标签
  

闽ICP备14008679号