Java 程序员在项目上一般会经常遇到解析数据、生成Excel的需求,比较流行的就是Apache poi框架了,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。esayExcel在大数据量的时候是一行一行的解析,不同于POI的一次性解析,这样避免了内存的溢出。
我推荐使用的是2.1.2版本,也是我之前使用的最新版。
官方文档的地址
https://github.com/alibaba/easyexcel
添加依赖
com.alibaba
easyexcel
2.1.2
使用方法(模板导出)
写一个dto作为模型,在属性的名称加上注解,作为表头显示在表格中。@ContentRowHeight 单元格行高 @ColumnWidth 单元格列宽 @HeadRowHeight 头的行高@ExcelProperty输出在表格的字段value值代表输出的值index代表是列数(列数是从0开始的所有第0列也就是第一列)@ExcelIgnore不输出在表格中的字段
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.math.BigDecimal;
import java.util.Date;
@ContentRowHeight(20)
@HeadRowHeight(30)
@ColumnWidth(25)
public class PayApplyExcelDto {
@ExcelProperty(
value = {"公司名称"},
index = 0
)
private String comName;
@ExcelProperty(
value = {"制单部门"},
index = 1
)
private String unitName;
@ExcelProperty(
value = {"申请编号"},
index = 2
)
private String applyNum;
@ExcelProperty(
value = {"付款类别"},
index = 3
)
private String typeCode;
@ExcelProperty(
value = {"付款类型"},
index = 4
)
private String detTypeCode;
@ExcelProperty(
value = {"合同号"},
index = 5
)
private String conNum;
@ExcelProperty(
value = {"供应商"},
index = 6
)
private String venName;
@ExcelProperty(
value = {"实际收款方"},
index = 7
)
@ColumnWidth(30)
private String actualVenName;
@ExcelProperty(
value = {"发票类型"},
index = 8
)
private String invoiceType;
@ExcelProperty(
value = {"申请人"},
index = 9
)
private String applicantName;
@ExcelProperty(
value = {"申请日期"},
index = 10
)
@DateTimeFormat("yyyy-MM-dd")
private Date applyDate;
@ExcelProperty(
value = {"申请金额"},
index = 11
)
private BigDecimal applyAmt;
@ExcelProperty(
value = {"汇率"},
index = 12
)
private BigDecimal rate;
@ExcelProperty(
value = {"发票币种"},
index = 13
)
private String invoCurrency;
@ExcelProperty(
value = {"付款币种"},
index = 14
)
private String payCurrency;
@ExcelProperty(
value = {"实际支付日期"},
index = 15
)
@DateTimeFormat("yyyy-MM-dd")
private Date actualDate;
@ExcelProperty(
value = {"状态"},
index = 16
)
private String status;
@ExcelProperty(
value = {"仓储接口状态"},
index = 17
)
private String interStatus;
@ExcelProperty(
value = {"