栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

JAVA 通过POI实现Excel从单元格选择下拉选项

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA 通过POI实现Excel从单元格选择下拉选项

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

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

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

代码:

  1. maven引入POI的包,注意两个包的版本需一致,不然会报错。
		
            org.apache.poi
            poi
            3.10-FINAL
        
        
            org.apache.poi
            poi-ooxml
            3.10-FINAL
        

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

    
    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));
        }
    }
    
    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);
    }

3.在你的代码中使用方法即可

以上POI对设置下拉选项的工具方法,希望对大家有所帮助!

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/937785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号