MyExcel,是一个集导入、导出、加密Excel等多项功能的Java工具包。
MyExcel采用声明式语法来构建、读取Excel,屏蔽POI的具体操作细节(对POI无感知),以开发常用的技术替代,使得构建(从简单到高度复杂Excel)以及读取Excel变得极为便利。
定位|Target
- 导入:提供简便的API,读取Excel内容,并转化为List< Bean >。
- 导出:可快速导出海量数据的简单列表,可生成高复杂度布局的Excel,复杂布局指的是包含多种不规则合并单元格、背景色、字体大小、斜体等,可自动划分Excel生成zip压缩包。
- 修复字体加粗样式与颜色样式无法共存问题;
- 修复SaxExcelReader读取多sheet异常问题;
- 修复超链接无下划线问题;
- 修复csv生成与读取未识别编码问题;
- 修复Bean字段重名无覆盖问题;
- 修复Bean父类字段默认导出在子类之后问题;
- 支持图片导入;
- 支持模板图片导出;
- 支持带括号负值形式(财务格式)读取;
- 支持BigInteger读取;
- 新增DefaultExcelReader\SaxExcelReader noTrim方法;
- 优化DefaultExcelReader\SaxExcelReader,默认读取时trim;
- 优化DefaultStreamExcelBuilder生产者消费者模式,避免消费者线程不受控风险;
- 优化读取逻辑,降低内存分配频率;
例如导入:
List<ArtCrowd> result = SaxExcelReader.of(ArtCrowd.class)
.sheet(0) // 0代表第一个,如果为0,可省略该操作,也可sheet("名称")读取
.rowFilter(row -> row.getRowNum() > 0) // 如无需过滤,可省略该操作,0代表第一行
.beanFilter(ArtCrowd::isDance) // bean过滤
.read(path.toFile());//
另外,MyExcel一直在实际生产环境中使用,每天导出、读取Excel接近上亿数据,内存占用、抖动极低,足够应对绝大部分应用场景。
例如导出:
@GetMapping("/default/excel/example")
public void defaultBuild(HttpServletResponse response) throws Exception {
List<ArtCrowd> dataList = this.getDataList();
Workbook workbook = DefaultExcelBuilder.of(ArtCrowd.class)
.build(dataList);
AttachmentExportUtil.export(workbook, "考生信息", response);
}