阿里巴巴 Excel工具easyExcel

今天开发遇到需要导出excel表格的需求,在网上选择了阿里的easyExcel
线上阿里demo里面的代码

/**
     * 文件下载
     * 

* 1. 创建excel对应的实体对象 参照{@link DownloadData} *

* 2. 设置返回的 参数 *

* 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大 */ @GetMapping("download") public void download(HttpServletResponse response) throws IOException { // 这里注意 有同学反应下载的文件名不对。这个时候 请别使用swagger 他会影像 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=demo.xlsx"); EasyExcel.write(response.getOutputStream(), DownloadData.class).sheet("模板").doWrite(data()); } private List data() { List list = new ArrayList(); for (int i = 0; i < 10; i++) { DownloadData data = new DownloadData(); data.setString("字符串" + 0); data.setDate(new Date()); data.setDoubleData(0.56); list.add(data); } return list; }

DownloadData 对象

@Data
public class DownloadData {
    @ExcelProperty("字符串标题")
    private String string;
    @ExcelProperty("日期标题")
    private Date date;
    @ExcelProperty("数字标题")
    private Double doubleData;
}

然后自己把这些代码封装成一个工具类 ExcelUtils

import com.alibaba.excel.EasyExcel;
import lombok.extern.slf4j.Slf4j;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

@Slf4j
public class ExcelUtils {
    public static void downLoadExcel(HttpServletResponse response,Class clazz,List data,String fileName){
        try {
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-disposition", "attachment;filename="+fileName+".xlsx");
            EasyExcel.write(response.getOutputStream(),clazz).sheet("sheet1").doWrite(data);
        }catch (Exception e){
            log.error("excel处理异常:" + e);
        }

    }
}

使用

ExcelUtils.downLoadExcel(response,DownloadDTO.class,data(), “xiazai”)

这个工具还有一个小bug,就是filename不能是中文否则下载后成了____.xlsx
git地址
https://github.com/alibaba/easyexcel

你可能感兴趣的:(其他,java-基础)