package com.infynova.udi.service.helper; import com.alibaba.excel.EasyExcel; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.Collections; import java.util.List; /** * @author liudong * 2023/11/6 19:09 * @version 1.0 */ @Slf4j @Component("udiEasyExcelHelper") public class UdiEasyExcelHelper { public static <T> void exportTemplate(String name, Class<T> entity) throws IOException { List<T> list = Collections.emptyList(); export(name, list, entity); } public static <T> void export(String name, List<T> list, Class<T> entity) throws IOException { String sheetName = name; export(name, sheetName, list, entity); } public static <T> void export(String name, String sheetName, List<T> list, Class<T> entity) throws IOException { HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); export(response,name,sheetName,list,entity); } public static <T> void export(HttpServletResponse response,String name,String sheetName, List<T> list, Class<T> entity) throws IOException { log.info("导出excel~"); // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 String fileName = URLEncoder.encode(name, "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); EasyExcel.write(response.getOutputStream(), entity) .sheet(sheetName) .doWrite(list); } }