多功能Excel工具包:MyExcel 3.9.1

,是一个集导入、导出、加密Excel等多项功能的工具包。

MyExcel采用声明式语法来构建、读取Excel,屏蔽POI的具体操作细节(对POI无感知),以开发常用的技术替代,使得构建(从简单到高度复杂Excel)以及读取Excel变得极为便利,且构建、读取性能极为优异,占用内存极低。

定位 | Target

  • 导入:提供简便的API,极低内存读取Excel内容,并转化为List< Bean >。
  • 导出:可快速导出海量数据的简单列表,可生成高复杂度布局的Excel,复杂布局指的是包含多种不规则合并单元格、背景色、字体大小、斜体等,可自动划分Excel生成zip压缩包。

优势 | Advantages

  • 可生成任意复杂表格:本工具使用迭代单元格方式进行Excel绘制,可生成任意复杂度Excel,提供多种宽度策略;
  • 零学习成本:使用Html作为模板,学习成本几乎为零;
  • 支持常用背景色、边框、字体等样式设置:具体参见下方Style-support(样式支持)部分;
  • 支持.XLS、.XLSX、.CSV:支持生成.xls、.xlsx后缀的Excel,支持.csv文件生成;
  • 支持低内存SXSSF模式:支持低内存的SXSSF模式,可利用极低的内存生成.xlsx;
  • 支持生产者消费者模式导出:支持生产者消费者模式导出,无需一次性获取所有数据,分批获取数据配合SXSSF模式实现真正意义上海量数据导出;
  • 支持多种模板引擎:已内置Freemarker、Groovy、Beetl等常用模板引擎Excel构建器(详情参见文档Getting started),默认内置Beetl模板引擎(推荐引擎,Beetl文档);
  • 提供默认Excel构建器,直接输出简单Excel:无需编写任何Html,已内置默认模板,可直接根据POJO数据列表输出;
  • 支持SAX模式读取:支持SAX模式导入海量数据;
  • 支持Excel容量设定:支持设定Excel容量,到达容量后自动新建Excel,可构建成zip压缩包导出;

导入示例

// (推荐)方式一:全部读取后处理,SAX模式,避免OOM,建议大量数据使用
List<ArtCrowd> result = SaxExcelReader.of(ArtCrowd.class)
        .sheet(0) // 0代表第一个,如果为0,可省略该操作
        .rowFilter(row -> row.getRowNum() > 0) // 如无需过滤,可省略该操作,0代表第一行
        .beanFilter(ArtCrowd::isDance) // bean过滤
        .read(path.toFile());// 可接收inputStream

// (推荐)方式二:读取一行处理一行,可自行决定终止条件,SAX模式,避免OOM,建议大量数据使用
// readThen有两种重写接口,返回Boolean型接口允许在返回False情况下直接终止读取
SaxExcelReader.of(ArtCrowd.class)
        .sheet(0) // 0代表第一个,如果为0,可省略该操作
        .rowFilter(row -> row.getRowNum() > 0) // 如无需过滤,可省略该操作,0代表第一行
        .beanFilter(ArtCrowd::isDance) // bean过滤
        .readThen(path.toFile() ,artCrowd -> {System.out.println(artCrowd.getName);});// 可接收inputStream

public class ArtCrowd {
    // index代表列索引,从0开始
    @ExcelColumn(index = 0)
    private String name;

    @ExcelColumn(index = 1)
    private String age;

    @ExcelColumn(index = 2,dateFormatPattern="yyyy-MM-dd")
    private Date birthday;
}

导出示例

List<ArtCrowd> dataList = this.getDataList();
    Workbook workbook = DefaultExcelBuilder.of(ArtCrowd.class)
            .build(dataList);
    AttachmentExportUtil.export(workbook, "艺术生信息", response);
    // 加密导出
    // AttachmentExportUtil.encryptExport(workbook, "艺术生信息", response,"123456");
}

3.9.1更新点如下:

  1. 修复DefaultStreamExcelBuilder在部分异常情况下,消费者线程无法被终止问题;
  2. 修复导出图片时,因图片后缀大小写问题导致的导出失败问题;
  3. SaxExcelReader新增readAllSheet方法,无需逐一设置需要读取的sheet;
  4. 模板导出支持单元格多样式(span分隔),即一个单元格内文本可以呈现不同样式;
  5. DefaultStreamExcelBuilder新增of(dataType,file)、of(dataType,inputStream)接口,支持按文件\文件流续写追加;
  6. 新增对pict、wmf格式图片导出支持;
  7. 代码优化(命名、格式),Lombok移除;

1. 本次更新涉及核心模块线程关闭问题修复,强烈建议升级,另,在导出时,务必进行资源关闭,否则可能引起系统线程耗尽,如:

try(DefaultStreamExcelBuilder<User> excelBuilder=DefaultStreamExcelBuilder.of(User.class).start()){

}

或者

DefaultStreamExcelBuilder<User> excelBuilder;
try{
   excelBuilder=DefaultStreamExcelBuilder.of(User.class).start());
   ....
}finally{
   if(excelBuilder!=null){
      excelBuilder.clear();
   }
}

其他,请移步文档:https://github.com/liaochong/myexcel/wiki

下载地址:

https://github.com/liaochong/myexcel

人已赞赏
企业应用新闻资讯

基于JVM的原生云原生微服务应用框架:Micronaut

2020-7-4 10:56:22

企业应用新闻资讯

分布式K/V存储方案:Apache Cassandra 4.0 beta

2020-7-28 10:04:41

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索