分享

「软件更新」MyExcel 3.0.0.RC 发布:重构&性能提升

 xxcc140 2019-10-02

MyExcel简介

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

导入:提供简便的API,读取Excel内容,并转化为List< Bean >。

导出:可快速导出海量数据的简单列表,可生成高复杂度布局的Excel,复杂布局指的是包含多种不规则合并单元格、背景色、字体大小、斜体、下拉列表等,可自动划分Excel生成zip压缩包。

3.0.0.RC更新内容

  1. 修复DefaultExcelBuilder、DefaultStreamExcelBuilder自定义样式无效问题;
  2. 修复读取含小数点整数错误问题;
  3. 修复DefaultStreamExcelBuilder海量数据导出多sheet页,无法全部固定标题行问题;
  4. 修复DefaultStreamExcelBuilder续写时重设工作簿类型错误;
  5. 基于DefaultStreamExcelBuilder重写DefaultExcelBuilder,在保证API简单便捷的情况下,根源上解决性能问题;
  6. 新增DefaultExcelBuilder、DefaultStreamExcelBuilder支持图片导出;
  7. 新增DefaultExcelBuilder、DefaultStreamExcelBuilder支持全局样式设置,隔行样式设置;
  8. 新增DefaultExcelBuilder、DefaultStreamExcelBuilder、模板ExcelBuilder均支持自定义行高度;
  9. 新增DefaultStreamExcelBuilder新增cancel、clear接口,增强资源主动清理能力;
  10. 新增各项ExcelBuilder单元测试,提升项目稳定性;
  11. 新增读取异常时,相关行以及内容提示,加快问题定位速度;
  12. 删除rowAccessWindowSize选项,默认采用最佳实践,也避免使用者不熟悉导致的错误使用,不予向下兼容;
  13. 修改autoWidthStrategy方法为widthStrategy方法,加强接口语意;
  14. 原DefaultStreamExcelBuilder的start(int waitQueueSize,Class[] groups)参数改为方法选项,waitQueueSize()、groups();
  15. 同一文件续写时支持同名称续写;
  16. 重构SaxExcelReader,提升代码可读性;
  17. CsvBuilder新增append功能,允许对已生成的文件进行数据追加;
  18. DefaultStreamExcelBuilder时间处理类增加缓存,进一步提升导出性能;

问题

  1. 因大面积重构,造成了部分的API无法兼容3.0.0.RC以下版本:
  2. 删除rowAccessWindowSize选项;
  3. 原DefaultStreamExcelBuilder的start(int waitQueueSize,Class[] groups)参数改为方法选项,waitQueueSize()、groups();

// 新设定分组、等待队列容量方式

DefaultStreamExcelBuilder excelBuilder = DefaultStreamExcelBuilder.of(CommonPeople.class)

.start(100,CommonPeople.class);

// 新设定分组、等待队列容量方式

DefaultStreamExcelBuilder excelBuilder = DefaultStreamExcelBuilder.of(CommonPeople.class)

.groups(CommonPeople.class)

.waitQueueSize(100)

.start();

具体更新点如下:

  1. 新增csv追加数据方式

CsvBuilder<CsvPeople> csvBuilder = CsvBuilder.of(People.class);

for (int i = 0; i < 10; i++) {

csvBuilder.append(data(1000));

}

Csv csv = csvBuilder.build();

AttachmentExportUtil.export(csv.getFilePath(), 'test.csv', response);

// 该种方式会覆盖原append.csv文件

csv.write(Paths.get('/User/append.csv'));

// 该种方式会在原append.csv文件继续追加数据,而不是覆盖

csv.write(Paths.get('/User/append.csv'),true);

  1. 自定义高度(Bean形式)

@Data

@FieldDefaults(level = AccessLevel.PRIVATE)

@ExcelTable(sheetName = '人员信息', rowHeight = 50)

public class CommonPeople {

@ExcelColumn(title = '姓名', index = 0)

String name;

@ExcelColumn(title = '年龄', index = 1)

Integer age;

@ExcelColumn(title = '是否会跳舞', groups = CommonPeople.class, index = 2)

boolean dance;

@ExcelColumn(title = '金钱', decimalFormat = '#,000.00', index = 3)

BigDecimal money;

}

设定rowHeight即可。

3、自定义高度(模板方式)

<% DIRECTIVE SAFE_OUTPUT_OPEN; %>

<table>

<caption>${sheetName}</caption>

<thead>

<tr style='background-color: #6495ED'>

<th colspan='3' style='text-align: center;vertical-align: middle;font-weight: bold;font-size: 14px;'>产品介绍</th>

</tr>

<tr>

<% for(title in titles){ %>

<th>${title}</th>

<% } %>

</tr>

</thead>

<% if(data!=null){ %>

<tbody>

<% for(item in data){ %>

<tr style='height: 100px;'>

<td>${item.category}</td>

<td>${item.name}</td>

<td>${item.count}</td>

</tr>

<% } %>

</tbody>

<% } %>

</table>

<%

//关闭安全输出。

DIRECTIVE SAFE_OUTPUT_CLOSE;

%>

设定高度样式 style='height: 100px;'即可。

4、隔行样式设置

@ExcelColumn(order = 0, title = '姓名',style = {'title->color:red;','even->color:yellow;','odd->background-color:green;width:50'})private String name;

odd、even对应奇偶行样式。

更多更新内容请查看:https://github.com/liaochong/myexcel/wiki

MyExcel优势 | Advantages

1、可生成任意复杂表格:本工具使用迭代单元格方式进行Excel绘制,可生成任意复杂度Excel,提供多种宽度策略;

2、零学习成本:使用Html作为模板,学习成本几乎为零;

3、支持常用背景色、边框、字体等样式设置:具体参见下方Style-support(样式支持)部分;

4、支持.XLS、.XLSX、.CSV:支持生成.xls、.xlsx后缀的Excel,支持.csv文件生成;

5、支持低内存SXSSF模式:支持低内存的SXSSF模式,可利用极低的内存生成.xlsx;

6、支持生产者消费者模式导出:支持生产者消费者模式导出,无需一次性获取所有数据,分批获取数据配合SXSSF模式实现真正意义上海量数据导出;

7、支持多种模板引擎:已内置Freemarker、Groovy、Beetl等常用模板引擎Excel构建器(详情参见文档Getting started),默认内置Beetl模板引擎(推荐引擎,Beetl文档);

8、提供默认Excel构建器,直接输出简单Excel:无需编写任何Html,已内置默认模板,可直接根据POJO数据列表输出;

9、支持SAX模式读取:支持SAX模式导入海量数据;

10、支持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);});// 可接收inputStreampublic 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');

}

「软件更新」MyExcel 3.0.0.RC 发布:重构&性能提升

「软件更新」MyExcel 3.0.0.RC 发布:重构&性能提升

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多