package com.casic.util; import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSON; import com.casic.model.ResponseData; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.List; @Slf4j public class ExportExcelUtil { protected <T> void exportExcel(Class<T> cls, List<T> dataList, String sheetName) throws IOException { HttpServletResponse response = this.getHttpServletResponse(); try { this.setExResponse(response); EasyExcel.write(response.getOutputStream(), cls).autoCloseStream(Boolean.FALSE).sheet(StringUtils.isNotEmpty(sheetName) ? sheetName : "数据").doWrite(dataList); } catch (Exception var6) { log.error("文件导出失败", var6); this.setCatchResponse(response, var6.getMessage()); } } private void setCatchResponse(HttpServletResponse response, String msg) throws IOException { response.reset(); response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); response.getWriter().println(JSON.toJSONString(ResponseData.error("下载文件失败" + msg))); } private void setExResponse(HttpServletResponse response) throws IOException { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("文件下载", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8" + fileName + ".xlsx"); } protected HttpServletResponse getHttpServletResponse() { return HttpContext.getResponse(); } }