Excel工具EEC(Excel Export Core)是一款轻量且高效的Excel读写工具,EEC的设计初衷是为了解决Apache POI内存高、速度慢且API臃肿的诟病。EEC的底层并不依赖POI包,所有的底层代码均自己实现,事实上EEC仅依赖dom4j
和slf4j
,前者用于小文件xml读取,后者统一日志接口。
它具有以下主要特点和功能:
一、主要特点
- 包体小:EEC的体积相对较小,便于集成和使用。
- 接入代码量少:EEC的接入代码简洁,降低了开发成本和时间。
- 运行时消耗资源少:EEC在运行时对系统资源的消耗较低,适合处理大数据量的Excel文件。
- 独立底层实现:EEC的底层并不依赖Apache POI等常见Excel处理库,而是独立实现了所有底层代码,仅依赖dom4j(用于小文件xml读取)和slf4j(统一日志接口)。
二、主要功能
- 大数据量支持:EEC支持在较小的内存(如10MB)下读写百万级数据,解决了Apache POI等库内存高、速度慢的问题。
- 流式读写:EEC支持Stream+Lambda方式读文件,可以像操作集合类一样操作Excel,按需加载数据,不会将整个文件读入内存。
- 多种数据格式支持:EEC不仅支持xlsx和xls格式的Excel文件,还支持CSV格式,并提供了CSV与Excel格式互转的功能。
- 动态样式:EEC支持在导出Excel时设置动态样式,如根据数据内容改变单元格颜色、字体等,提高了报表的可读性和美观度。
- 自适应列宽:EEC支持自适应列宽功能,对于中文内容的支持更加精准,避免了列宽不足导致的内容溢出问题。
- 模板导出:EEC支持使用xls和xlsx模板格式进行导出,可以合并多个Excel文件,提高了报表制作的灵活性和效率。
三、使用场景
EEC适用于需要处理大数据量Excel文件的场景,如数据报表生成、数据分析、数据导出等。同时,由于其低资源消耗和高效读写能力,EEC也适合在性能/内存要求较高的环境中使用。
四、使用方法
1、引入依赖
<dependency>
<groupId>org.ttzero</groupId>
<artifactId>eec</artifactId>
<version>${eec.version}</version>
</dependency>
2、动态样式
new Workbook("2021小五班期未考试成绩")
.addSheet(new ListSheet<>("期末成绩", students
, new Column("学号", "id", int.class)
, new Column("姓名", "name", String.class)
, new Column("成绩", "score", int.class, n -> (int) n < 60 ? "不合格" : n)
).setStyleProcessor((o, style, sst) ->
o.getScore() < 60 ? sst.modifyFill(style, new Fill(PatternType.solid, Color.orange)) : style)
).writeTo(Paths.get("f:/excel"));
3、宽度自适应
// 测试类
public static class WidthTestItem {
@ExcelColumn(value = "整型", format = "#,##0_);[Red]-#,##0_);0_)")
private Integer nv;
@ExcelColumn("字符串(en)")
private String sen;
@ExcelColumn("字符串(中文)")
private String scn;
@ExcelColumn(value = "日期时间", format = "yyyy-mm-dd hh:mm:ss")
private Timestamp iv;
}
new Workbook("Auto Width Test")
.setAutoSize(true) // <- 自适应列宽
.addSheet(new ListSheet<>(randomTestData()))
.writeTo(Paths.get("f:/excel"));
4、多级表头
public static class RepeatableEntry {
@ExcelColumn("运单号")
private String orderNo;
@ExcelColumn("收件地址")
@ExcelColumn("省")
private String rProvince;
@ExcelColumn("收件地址")
@ExcelColumn("市")
private String rCity;
@ExcelColumn("收件地址")
@ExcelColumn("详细地址")
private String rDetail;
@ExcelColumn("收件人")
private String recipient;
@ExcelColumn("寄件地址")
@ExcelColumn("省")
private String sProvince;
@ExcelColumn("寄件地址")
@ExcelColumn("市")
private String sCity;
@ExcelColumn("寄件地址")
@ExcelColumn("详细地址")
private String sDetail;
@ExcelColumn("寄件人")
private String sender;
}
五、总结
EEC作为一款轻量且高效的Excel读写工具,凭借其包体小、接入代码量少、运行时消耗资源少以及强大的数据处理能力,在大数据量Excel文件处理领域具有显著优势。无论是数据报表生成、数据分析还是数据导出等场景,EEC都能提供高效、可靠的解决方案。