package com.ruoyi.web.controller.tool; import org.apache.poi.hssf.usermodel.DVConstraint; import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; public final class ExcelUtil { /** * firstRow 开始行号(下标0开始) * lastRow 结束行号,最大65535 * firstCol 区域中第一个单元格的列号 (下标0开始) * lastCol 区域中最后一个单元格的列号 * dataArray 下拉内容 * sheetHidden 影藏的sheet编号(例如1,2,3),多个下拉数据不能使用同一个 * */ public static void selectList(Workbook workbook, int firstRow, int lastRow, int firstCol, int lastCol, String[] dataArray, int sheetHidden){ String hiddenName = "hidden_" + (int)((Math.random()*9+1)*100); Sheet sheet = workbook.getSheetAt(0); Sheet hidden = workbook.createSheet(hiddenName); Cell cell = null; for (int i = 0, length = dataArray.length; i < length; i++) { String name = dataArray[i]; Row row = hidden.createRow(i); cell = row.createCell(0); cell.setCellValue(name); } Name namedCell = workbook.createName(); namedCell.setNameName(hiddenName); namedCell.setRefersToFormula(hiddenName + "!$A$1:$A$" + dataArray.length); //加载数据,将名称为hidden的 DVConstraint constraint = DVConstraint.createFormulaListConstraint(hiddenName); // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列 CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol); HSSFDataValidation validation = new HSSFDataValidation(addressList, constraint); // 将sheet设置为隐藏 workbook.setSheetHidden(sheetHidden, true); sheet.addValidationData(validation); } }