easyExcel 2.1.3 使用

Posted ityangshuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了easyExcel 2.1.3 使用相关的知识,希望对你有一定的参考价值。

前言

由于apache poi和jxl,excelPOI都有一个严重的问题,就是非常消耗内存,特别处理数据量多时,速度慢并且时有异常发生,
所以改用由阿里研发的easyExcel更可靠一些,它的官方建议对于1000行以内的采用原来poi的写法一次读写,对于1000行以上的数据,
有用了一行行进行解析的方案,这样避免了内存的溢出。  
easyExcel主要功能:
1.支持Excel导入与导出,同时支持xls和xlsm,即07版本和03版本(官方建议03版本不要超过2000行)的Excel文件格式。
2.支持pojo注释时,映射成为java实体模型。
3.支持多个sheet,同时一个sheet支持多张表。
4.支持自定义Excel样式:字体,加粗,表头颜色,数据内容颜色等。
5.可以设置是否需要写表头。

写Excel

实体Dto

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.Data;
import java.util.Date;

@Data
public class TestDto {
    @ExcelProperty(value = { "列1", "字符串标题" }, index = 0)
    private String string;

    @DateTimeFormat("yyyy-MM-dd")
    @ExcelProperty(value = { "列1", "日期标题" }, index = 1)
    private Date date;

    @ExcelProperty(value = { "列1", "数字标题" }, index = 2)
    private Double doubleData;

    /**
     * 忽略这个字段
     */
    @ExcelIgnore
    private String ignore;
}

自定义工具类ExcelUtil

import cn.sipaote.human.excel.dto.TestDto;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.support.ExcelTypeEnum;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;

public class ExcelUtil {
    /**已过时!!!
     * 导出 Excel :一个 sheet,带表头
     * @param response HttpServletResponse
     * @param list 数据 list,每个元素为一个 BaseRowModel
     * @param fileName 导出的文件名
     * @param sheetName 导入文件的 sheet 名
     * @param model 映射实体类,Excel 模型
     */
    public static void write2Excel(HttpServletResponse response, List<? extends BaseRowModel> list,
                                  String fileName, String sheetName, BaseRowModel model)throws Exception  {
        ExcelWriter writer = new ExcelWriter(getOutputStream(fileName, response), ExcelTypeEnum.XLSX);
        Sheet sheet = new Sheet(1, 0, model.getClass());
        sheet.setSheetName(sheetName);
        writer.write(list, sheet);
        writer.finish();
    }

    /**2.*版本更新代码
     * excel的 pojo 实体类取消了 继承BaseRowModel.
     *
     */
    public static void writeExcel(HttpServletResponse response, List<?> list, String fileName, String sheetName)throws Exception  {
        EasyExcel.write(getOutputStream(fileName,response), TestDto.class)
                .sheet(sheetName)
                .doWrite(list);
    }
    /**
     * 导出文件时为Writer生成OutputStream
     * @param fileName
     * @param response
     * @return
     */
    private static OutputStream getOutputStream(String fileName, HttpServletResponse response) throws Exception {
        try {
            fileName = URLEncoder.encode(fileName, "UTF-8");
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf8");
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-Control", "no-store");
            response.addHeader("Cache-Control", "max-age=0");
            return response.getOutputStream();
        } catch (IOException e) {
            throw new Exception("导出excel表格失败!", e);
        }
    }
}

接口调用

@RequestMapping("/exportTest")
    public void exportEnterpriseBillV2(HttpServletResponse response) throws Exception {
        //模模拟sql查出的数据
        TestDto testDto = new TestDto();
        testDto.setDate(new Date());
        testDto.setDoubleData(2.232);
        testDto.setIgnore("哈哈哈");
        testDto.setString("easyExcel测试1");
        TestDto testDto2 = new TestDto();
        testDto2.setDate(new Date());
        testDto2.setDoubleData(1.111);
        testDto2.setIgnore("啦啦啦");
        testDto2.setString("easyExcel测试2");
        List<TestDto> list = new ArrayList<>();
        list.add(testDto);
        list.add(testDto2);
        ExcelUtil.writeExcel(response,list,"导出测试","sheet单1");
    }

导出效果展示

技术图片

具体方法查看官网:
https://www.yuque.com/easyexcel/doc/easyexcel

以上是关于easyExcel 2.1.3 使用的主要内容,如果未能解决你的问题,请参考以下文章

使用EasyExcel将MySQL中查询出来的数据下载到Excel文件中

使用EasyExcel将MySQL中查询出来的数据下载到Excel文件中

easyexcel无法在uniapp调用

使用easyexcel导入表格时接收前端的参数,并传入监听器

使用easyexcel导入表格时接收前端的参数,并传入监听器

使用easyexcel导出对%影响嘛