From 023ceaaf91447ca5b853392b91c131e7a21f28af Mon Sep 17 00:00:00 2001 From: velenooo <8834950+velenooo@user.noreply.gitee.com> Date: Wed, 2 Apr 2025 05:20:53 +0000 Subject: [PATCH] =?UTF-8?q?!666=20fix:=20=E6=A8=A1=E6=9D=BF=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=A4=9A=E4=B8=AA=E5=AD=97=E6=AE=B5=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E5=80=BC=E8=B6=85=E8=BF=87100=E4=B8=AA=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=EF=BC=8C=E9=87=87=E7=94=A8=E5=A4=9A=E4=B8=AAsheet=E7=9A=84?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E8=A7=A3=E5=86=B3=E3=80=82=20*=20fix:=20?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=AF=BC=E5=87=BA=E5=A4=9A=E4=B8=AA=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E4=B8=8B=E6=8B=89=E5=80=BC=E8=B6=85=E8=BF=87100?= =?UTF-8?q?=E4=B8=AA=E5=BC=82=E5=B8=B8=EF=BC=8C=E9=87=87=E7=94=A8=E5=A4=9A?= =?UTF-8?q?=E4=B8=AAsheet=E7=9A=84=E6=96=B9=E6=A1=88=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/excel/core/ExcelDownHandler.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java index 32fee7a6c..d10ec70e6 100644 --- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java +++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java @@ -291,9 +291,11 @@ public class ExcelDownHandler implements SheetWriteHandler { * @param value 下拉选可选值 */ private void dropDownWithSheet(DataValidationHelper helper, Workbook workbook, Sheet sheet, Integer celIndex, List value) { + //由于poi的写出相关问题,超过100个会被临时写进硬盘,导致后续内存合并会出Attempting to write a row[] in the range [] that is already written to disk + String tmpOptionsSheetName = OPTIONS_SHEET_NAME + "_" + currentOptionsColumnIndex; // 创建下拉数据表 - Sheet simpleDataSheet = Optional.ofNullable(workbook.getSheet(WorkbookUtil.createSafeSheetName(OPTIONS_SHEET_NAME))) - .orElseGet(() -> workbook.createSheet(WorkbookUtil.createSafeSheetName(OPTIONS_SHEET_NAME))); + Sheet simpleDataSheet = Optional.ofNullable(workbook.getSheet(WorkbookUtil.createSafeSheetName(tmpOptionsSheetName))) + .orElseGet(() -> workbook.createSheet(WorkbookUtil.createSafeSheetName(tmpOptionsSheetName))); // 将下拉表隐藏 workbook.setSheetHidden(workbook.getSheetIndex(simpleDataSheet), true); // 完善纵向的一级选项数据表 @@ -302,9 +304,9 @@ public class ExcelDownHandler implements SheetWriteHandler { // 获取每一选项行,如果没有则创建 Row row = Optional.ofNullable(simpleDataSheet.getRow(i)) .orElseGet(() -> simpleDataSheet.createRow(finalI)); - // 获取本级选项对应的选项列,如果没有则创建 - Cell cell = Optional.ofNullable(row.getCell(currentOptionsColumnIndex)) - .orElseGet(() -> row.createCell(currentOptionsColumnIndex)); + // 获取本级选项对应的选项列,如果没有则创建。上述采用多个sheet,默认索引为1列 + Cell cell = Optional.ofNullable(row.getCell(0)) + .orElseGet(() -> row.createCell(0)); // 设置值 cell.setCellValue(value.get(i)); } @@ -312,13 +314,13 @@ public class ExcelDownHandler implements SheetWriteHandler { // 创建名称管理器 Name name = workbook.createName(); // 设置名称管理器的别名 - String nameName = String.format("%s_%d", OPTIONS_SHEET_NAME, celIndex); + String nameName = String.format("%s_%d", tmpOptionsSheetName, celIndex); name.setNameName(nameName); // 以纵向第一列创建一级下拉拼接引用位置 String function = String.format("%s!$%s$1:$%s$%d", - OPTIONS_SHEET_NAME, - getExcelColumnName(currentOptionsColumnIndex), - getExcelColumnName(currentOptionsColumnIndex), + tmpOptionsSheetName, + getExcelColumnName(0), + getExcelColumnName(0), value.size()); // 设置名称管理器的引用位置 name.setRefersToFormula(function);