poi生成excel表格(你还在用原生poi处理)
1、easypoi
- 前言
Excel 在日常工作中经常被用来存储用例信息,是一种非常便捷的数据存储工具有着众多的优点,我们就不一一介绍了。
今天来讲讲 Java 操作 Excel,总所周知 Java 是世界上最好的语言(不容反驳),操作一个 Excel 肯定是不在话下,咱们熟知的 POI,Apache 大佬出品的一款非常强大的 office 软件操作包。虽然 POI 强大,但是代码相对比较繁琐,在当前 python 引领的大潮下,简化代码势在必行。
那么如何简化代码呢?其实这些事情早就已经有人帮我们想好和做好了,比如阿里巴巴的 easyexcel,和我们今天的主角 esaypoi 都是非常好的解决方案。那为什么选择 easypoi 而不是阿里的 easyexcel 呢,当然是 easypoi 的读写导入和导出更加简单。接下来大家就跟随着我一起慢慢揭开 easypoi 的神秘面纱。
- 简介
easypoi 功能如同名字 easy,主打的功能就是容易,让一个没见接触过 poi 的人员就可以方便的写出 Excel 导出,Excel 模板导出,Excel 导入,Word 模板导出,通过简单的注解和模板。
官网:https://opensource.afterturn.cn/doc/easypoi.html
- maven 坐标
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>2.2.4</version>
</dependency>
- 最简单的导入
完成最简单的导入,只需要两步:一使用注解配置实体类,二调用工具类。
实体类(省略 get/set 方法):
public class API implements Serializable {
@Excel(name = "接口名称")
private String name;
@Excel(name = "接口编号")
private String id;
@Excel(name = "接口提交方式")
private String type;
@Excel(name = "接口地址")
private String url;
@Excel(name = "参数类型")
private String contentType;
}
@Excel(name = "接口名称")这个注解是啥意思呢?name 属性表示 Excel 表头。如图:
当我们导入 Excel 时,就会按照@Excel 注解的映射关系封装 API 实体类。
工具类:
FileInputStream fis = new FileInputStream(EXCEL_PATH);
//导入参数设置类
Importparams params = new ImportParams();
List<API> importExcel = ExcelImportUtil.importExcel(fis, API.class, params);
总共三行代码,第一行加载 Excel 文件,第二行设置导入参数,第三行根据导入参数返回对应结果并封装成 List 集合。这三个代码中主要讲解第二行和第三行,第二行是导入参数设置,它能给我们提供什么设置呢?参考下表:
属性 |
类型 |
默认值 |
功能 |
titleRows |
int |
0 |
表格标题行数,默认 0 |
headRows |
int |
1 |
表头行数,默认 1 |
startRows |
int |
0 |
字段真正值和列标题之间的距离 默认 0 |
keyIndex |
int |
0 |
主键设置,如何这个 cell 没有值,就跳过 或者认为这个是 list 的下面的值这一列必须有值,不然认为这列为无效数据 |
startSheetIndex |
int |
0 |
开始读取的 sheet 位置,默认为 0 |
sheetNum |
int |
1 |
上传表格需要读取的 sheet 数量,默认为 1 |
needSave |
boolean |
false |
是否需要保存上传的 Excel |
needVerfiy |
boolean |
false |
是否需要校验上传的 Excel |
saveUrl |
String |
"upload/excelUpload" |
保存上传的 Excel 目录,默认是 如 TestEntity 这个类保存路径就是 upload/excelUpload/Test/yyyyMMddHHmss****** 保存名称上传时间*五位随机数 |
verifyHanlder |
IExcelVerifyHandler |
null |
校验处理接口,自定义校验 |
lastOfInvalidRow |
int |
0 |
最后的无效行数,不读的行数 |
readRows |
int |
0 |
手动控制读取的行数 |
importFields |
String[] |
null |
导入时校验数据模板,是不是正确的 Excel |
keyMark |
String |
":" |
Key-Value 读取标记,以这个为 Key,后面一个 Cell 为 Value,多个改为 ArrayList |
readSingleCell |
boolean |
false |
按照 Key-Value 规则读取全局扫描 Excel,但是跳过 List 读取范围提升性能 仅仅支持 titleRows headRows startRows 以及 lastOfInvalidRow |
dataHanlder |
IExcelDataHandler |
null |
数据处理接口,以此为主,replace,format 都在这后面 |
对照完这张表之后,你会发现即使我们不对 ImportParams 做任何设置,也会有对应的默认值。那么第二句代码就能翻译成:读取第一个 Sheet 且只读取第一个,表头是 Sheet 的第一行且只有一行。最终我们就能得到第一个 Sheet 中每一行数据,并且每一行被封装成了 API 对象也就是一个 List。有了这个集合之后我们需要导入的数据就能任由我们如何处理了,是不是很简单。
- 最简单的导出
List<API> list = new ArrayList<API>();
ExportParams exportParams = new ExportParams();
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, API.class, list);
workbook.write(new FileOutputStream(EXCEL_PATH));
导出也只有四句代码。第一句是需要导出的数据集合,第二句导出参数,第三句获取导出 workbook 对象,第四句通过输出流导出数据到 Excel 中。其中第二句也是有很多设置的,我们就用默认设置也能是导出的。第三句也要用到 API 实体类中的注解映射关系。
- 最后
通过 esaypoi 我们能够使用最少的代码完成基本的导入和导出,基本上能够应对实际工作中 80% 的需求了,如果需要对 Excel 修改的话,目前来说市面上的工具包都做的不太简单,所以还是需要通过编写原生 poi 代码完成,如果你需要修改 Excel 的代码可以留言哦~
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com