陈昶聿
14 小时以前 2a9c68fe5130227d88b71e8eb57aced6b10d4d91
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
@@ -1,14 +1,11 @@
package com.ruoyi.common.utils.poi;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -23,8 +20,10 @@
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.ServletUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.reflect.FieldUtils;
@@ -445,6 +444,22 @@
        response.setCharacterEncoding("utf-8");
        this.init(list, sheetName, title, Type.EXPORT);
        exportExcel(response);
    }
    /**
     * 对list数据源将其里面的数据导入到excel表单(带文件名)
     *
     * @param response  返回数据
     * @param list      导出数据集合
     * @param sheetName 工作表的名称
     * @param fileName 导出文件的名称
     * @return 结果
     */
    public void exportExcelWithFileName(HttpServletResponse response, List<T> list, String sheetName, String fileName) {
        //设置文件名
        HttpServletRequest request = ServletUtils.getRequest();
        setExcelFileName(response, request, fileName);
        exportExcel(response, list, sheetName, StringUtils.EMPTY);
    }
    /**
@@ -1432,4 +1447,29 @@
        }
        return method;
    }
    /**
     * 设置导出Excel文件名称
     * @param response 返回数据
     * @param request 浏览器请求头
     * @param fileName 文件名称
     */
    public void setExcelFileName(HttpServletResponse response, HttpServletRequest request, String fileName) {
        try {
            //会清空响应缓冲区的内容,确保后续输出不会受到之前数据的影响
            response.reset();
            // 定义浏览器响应表头,顺带定义下载名
            fileName = fileName + ".xlsx";
            // 对文件名进行URL编码,支持中文文件名
            String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
            // 使用 filename* 参数支持 UTF-8 编码(RFC 5987),同时保留 filename 参数兼容旧浏览器
            response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName +
                    "\"; filename*=utf-8''" + encodedFileName);
            // 定义下载的类型,标明是excel文件
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
        }catch (Exception e){
            log.error("{}设置导出Excel文件名称异常,{}", fileName, e.getMessage());
        }
    }
}