From a22f137d77c1e356ad3022690699e0f3d8fb9daa Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期三, 06 五月 2026 08:29:04 +0800
Subject: [PATCH] XSSFWorkbook替换成SXSSFWorkbook,解决OOM; autoSizeColumn问题解决

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/ExcelUtil.java |   20 +++++++++++++++-----
 1 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/ExcelUtil.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/ExcelUtil.java
index f7f47b6..72c018a 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/ExcelUtil.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/ExcelUtil.java
@@ -2,10 +2,11 @@
 
 import com.zy.acs.framework.common.Cools;
 import io.swagger.annotations.ApiModelProperty;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.streaming.SXSSFSheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -24,19 +25,27 @@
     public static void build(Workbook workbook, HttpServletResponse response) {
         response.reset();
         Http.cors(response);
-        response.setContentType("application/octet-stream; charset=utf-8");
+
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8");
+
         try {
-            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("export", "UTF-8"));
+            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("export.xlsx", "UTF-8"));
             workbook.write(response.getOutputStream());
+            workbook.close();
+
         } catch (IOException ignore) {}
     }
 
     public static <T> Workbook create(List<T> list, Class<T> clz) {
-        HSSFWorkbook workbook = new HSSFWorkbook();
+        SXSSFWorkbook workbook = new SXSSFWorkbook();
         Sheet sheet = workbook.createSheet(clz.getSimpleName());
+        // 1. 鍚戜笅杞瀷骞惰皟鐢� trackAllColumnsForAutoSizing()
+        // autoSizeColumn闂瑙e喅
+        ((SXSSFSheet) sheet).trackAllColumnsForAutoSizing();
 
         Row header = sheet.createRow(0);
         Field[] fields = Cools.getAllFields(clz);
+
         int headerIdx = 0;
         for (Field field : fields) {
             if (Modifier.isFinal(field.getModifiers())
@@ -44,6 +53,7 @@
                     || Modifier.isTransient(field.getModifiers())) {
                 continue;
             }
+
             String memo = "Undefined";
             if (field.isAnnotationPresent(ApiModelProperty.class)) {
                 memo = field.getAnnotation(ApiModelProperty.class).value();
@@ -83,7 +93,7 @@
             }
         }
 
-        for (int i = 0; i <= fields.length; i++) {
+        for (int i = 0; i <= headerIdx; i++) {
             sheet.autoSizeColumn(i);
         }
 

--
Gitblit v1.9.1