Newer
Older
pichan-haerbin / src / main / java / com / casic / util / ExportExcelUtil.java
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();
    }

}