From 2e26104c3736d11a1ea0f27d818a5ea785fff9e2 Mon Sep 17 00:00:00 2001 From: caiyuchao Date: Mon, 15 Sep 2025 11:20:11 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=AF=BC=E5=87=BA=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=94=AF=E6=8C=81=E5=8F=AF=E9=80=89=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/excel/core/util/ExcelUtils.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/agt-framework/agt-spring-boot-starter-excel/src/main/java/org/agt/framework/excel/core/util/ExcelUtils.java b/agt-framework/agt-spring-boot-starter-excel/src/main/java/org/agt/framework/excel/core/util/ExcelUtils.java index 093b0bc..6a01081 100644 --- a/agt-framework/agt-spring-boot-starter-excel/src/main/java/org/agt/framework/excel/core/util/ExcelUtils.java +++ b/agt-framework/agt-spring-boot-starter-excel/src/main/java/org/agt/framework/excel/core/util/ExcelUtils.java @@ -1,15 +1,16 @@ package org.agt.framework.excel.core.util; -import org.agt.framework.common.util.http.HttpUtils; -import org.agt.framework.excel.core.handler.SelectSheetWriteHandler; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.converters.longconverter.LongStringConverter; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import jakarta.servlet.http.HttpServletResponse; +import org.agt.framework.common.util.http.HttpUtils; +import org.agt.framework.excel.core.handler.SelectSheetWriteHandler; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.List; +import java.util.Set; /** * Excel 工具类 @@ -43,6 +44,21 @@ public class ExcelUtils { response.setContentType("application/vnd.ms-excel;charset=UTF-8"); } + public static void writeSelected(HttpServletResponse response, String filename, String sheetName, + Class head, List data, Set includeColumnFieldNames) throws IOException { + // 输出 Excel + EasyExcel.write(response.getOutputStream(), head) + .autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理 + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 基于 column 长度,自动适配。最大 255 宽度 + .registerWriteHandler(new SelectSheetWriteHandler(head)) // 基于固定 sheet 实现下拉框 + .registerConverter(new LongStringConverter()) // 避免 Long 类型丢失精度 + .includeColumnFieldNames(includeColumnFieldNames) + .sheet(sheetName).doWrite(data); + // 设置 header 和 contentType。写在最后的原因是,避免报错时,响应 contentType 已经被修改了 + response.addHeader("Content-Disposition", "attachment;filename=" + HttpUtils.encodeUtf8(filename)); + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + } + public static List read(MultipartFile file, Class head) throws IOException { return EasyExcel.read(file.getInputStream(), head, null) .autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理