附上java下载excel完整实现代码

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.qhsm.airportexpress.common.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

@Slf4j
@Component
public class ExcelUtil {

    /**
     * 下载excel公共方法
     *
     * @param response 响应
     * @param name     文件名称
     * @param template 模板名称
     * @param list     数据
     */
    public void exportExcelByTemplate(HttpServletResponse response, String name, String template, Object list) {
        response.setContentType("application/octet-stream");
        response.setHeader("content-type", "application/octet-stream");
        response.setCharacterEncoding("utf-8");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String fileName = name + sdf.format(new Date()) + ".xlsx";
        try {
            fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        } catch (
                UnsupportedEncodingException e) {
            log.error(e.getMessage(), e);
            throw new ServiceException("下载excel名称处理失败");
        }
        // 这里URLEncoder.encode可以防止中文乱码
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
        //获取模板
        ClassPathResource classPathResource = new ClassPathResource("template/" + template);
        try (InputStream inputStream = classPathResource.getInputStream();
             ServletOutputStream outputStream = response.getOutputStream()) {
            //设置输出流和模板信息
            ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(inputStream).build();
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            //开启自动换行,自动换行表示每次写入一条list数据是都会重新生成一行空行,此选项默认是关闭的,需要提前设置为true
            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            excelWriter.fill(list, fillConfig, writeSheet);
            excelWriter.finish();
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            throw new ServiceException("下载excel失败");
        }
    }
}

模版位置:

模版内容(圈内的字段名称与自己的对象字段名称一致):

你可能感兴趣的:(附上java下载excel完整实现代码)