From 7181d114256d48d8f80a304f7293d8e533ef506f Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Fri, 9 Aug 2024 22:40:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9excel=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=8A=9F=E8=83=BD=EF=BC=8C=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=8B=E6=8B=89=E6=A1=86=E8=AE=BE=E7=BD=AE=20?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E9=9A=90=E8=97=8Fsheet=E4=B8=AD=E6=8B=89?= =?UTF-8?q?=E5=8F=96=E4=B8=8B=E6=8B=89=E6=A1=86=E5=86=85=E5=AE=B9=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=8D=95=E5=85=83=E6=A0=BC=E8=B6=85255?= =?UTF-8?q?=E6=95=B0=E5=80=BC=E4=B8=8A=E9=99=90=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/core/util/SpinnerWriteHandler.java | 58 +++++++++++++++++-- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/SpinnerWriteHandler.java b/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/SpinnerWriteHandler.java index a4bbb9b8..58112eb2 100644 --- a/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/SpinnerWriteHandler.java +++ b/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/SpinnerWriteHandler.java @@ -3,10 +3,7 @@ package cn.iocoder.yudao.framework.excel.core.util; import com.alibaba.excel.write.handler.SheetWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; -import org.apache.poi.ss.usermodel.DataValidation; -import org.apache.poi.ss.usermodel.DataValidationConstraint; -import org.apache.poi.ss.usermodel.DataValidationHelper; -import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.xssf.usermodel.XSSFDataValidation; @@ -49,11 +46,40 @@ public class SpinnerWriteHandler implements SheetWriteHandler { Sheet sheet = writeSheetHolder.getSheet(); /// 开始设置下拉框 DataValidationHelper helper = sheet.getDataValidationHelper();// 设置下拉框 + + //定义sheet的名称 + String hiddenName = "hidden"; + + //1.创建一个隐藏的sheet 名称为 hidden + Workbook workbook = writeWorkbookHolder.getWorkbook(); + Sheet hidden = workbook.createSheet(hiddenName); + Name category1Name = workbook.createName(); + category1Name.setNameName(hiddenName); + for (Map.Entry entry : mapDropDown.entrySet()) { + /*** 起始行、终止行、起始列、终止列 **/ CellRangeAddressList addressList = new CellRangeAddressList(1, 1000, entry.getKey(), entry.getKey()); + + // 获取excel列名 + String excelLine = getExcelLine(entry.getKey()); + + // 循环赋值 + String[] values = entry.getValue(); + for (int i = 0, length = values.length; i < length; i++) { + // 3:表示你开始的行数 3表示 你开始的列数 + Row row = hidden.getRow(i); + if (row == null) { + row = hidden.createRow(i); + } + row.createCell(entry.getKey()).setCellValue(values[i]); + } + // hidden!$H:$1:$H$50 sheet为hidden的 H1列开始H50行数据获取下拉数组 + String refers = hiddenName + "!$"+excelLine+ + "$1:$"+excelLine +"$"+ (values.length); + /*** 设置下拉框数据 **/ - DataValidationConstraint constraint = helper.createExplicitListConstraint(entry.getValue()); + DataValidationConstraint constraint = helper.createFormulaListConstraint(refers); DataValidation dataValidation = helper.createValidation(constraint, addressList); /*** 处理Excel兼容性问题 **/ if (dataValidation instanceof XSSFDataValidation) { @@ -65,5 +91,27 @@ public class SpinnerWriteHandler implements SheetWriteHandler { } sheet.addValidationData(dataValidation); } + + //设置列为隐藏 + int hiddenIndex = workbook.getSheetIndex("hidden"); + if (!workbook.isSheetHidden(hiddenIndex)) { + workbook.setSheetHidden(hiddenIndex, true); + } + } + + /** + * 返回excel列标A-Z-AA-ZZ + * @param num 列数 + * @return java.lang.String + */ + public static String getExcelLine(int num) { + String line = ""; + int first = num/26; + int second = num % 26; + if (first>0) { + line = (char)('A'+first-1)+""; + } + line += (char)('A'+second)+""; + return line; } }