赞
踩
发生情景:
最近使用到了模板导出功能,最开始使用的是hutool的POI工具,但是做下拉列表的时候,addSelect方法报错;
问题:
Excel在添加自定义下拉数据的时候,输入内容不能大于255个字符,这在做一些简单的下拉选项时没有问题,但是在下拉选项数据量过大时,就得换一种方式了——即‘从单元格选择下拉选项’,但是在hutool的官网API手册中未发现此内方法,所以转战POI
解决方案:
在创建Excel时新建一个sheet页, 将需要下拉的数据写到新建的sheet页中, 然后再对所需列设置下拉单元格即可;话不多说,下面贴代码。
代码:
<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>
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); }
3.在你的代码中使用方法即可
以上POI对设置下拉选项的工具方法,希望对大家有所帮助!
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。