你还在用原生 poi 处理 excel?太麻烦了来瞧瞧这个

news/2024/7/21 7:41:35 标签: java, excel, 开发语言

1、easypoi

  1. 前言

Excel 在日常工作中经常被用来存储用例信息,是一种非常便捷的数据存储工具有着众多的优点,我们就不一一介绍了。

今天来讲讲 Java 操作 Excel,总所周知 Java 是世界上最好的语言(不容反驳),操作一个 Excel 肯定是不在话下,咱们熟知的 POI,Apache 大佬出品的一款非常强大的 office 软件操作包。虽然 POI 强大,但是代码相对比较繁琐,在当前 python 引领的大潮下,简化代码势在必行。

那么如何简化代码呢?其实这些事情早就已经有人帮我们想好和做好了,比如阿里巴巴的 easyexcel,和我们今天的主角 esaypoi 都是非常好的解决方案。那为什么选择 easypoi 而不是阿里的 easyexcel 呢,当然是 easypoi 的读写导入和导出更加简单。接下来大家就跟随着我一起慢慢揭开 easypoi 的神秘面纱。

  1. 简介

easypoi 功能如同名字 easy,主打的功能就是容易,让一个没见接触过 poi 的人员
就可以方便的写出 Excel 导出,Excel 模板导出,Excel 导入,Word 模板导出,通过简单的注解和模板。

官网:
https://opensource.afterturn.cn/doc/easypoi.html

  1. 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>
  1. 最简单的导入

完成最简单的导入,只需要两步:一使用注解配置实体类,二调用工具类。

实体类(省略 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。有了这个集合之后我们需要导入的数据就能任由我们如何处理了,是不是很简单。

  1. 最简单的导出
  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 实体类中的注解映射关系。

  1. 最后

通过 esaypoi 我们能够使用最少的代码完成基本的导入和导出,基本上能够应对实际工作中 80% 的需求了,如果需要对 Excel 修改的话,目前来说市面上的工具包都做的不太简单,所以还是需要通过编写原生 poi 代码完成,如果你需要修改 Excel 的代码可以留言哦~


http://www.niftyadmin.cn/n/203813.html

相关文章

【CSDN|每日一练】运输石油

目录 运行结果题目描述输入描述:输出描述:示例代码结语运行结果 题目描述 某石油公司需要向A、B两地运输石油。 两地的需求量不同,而一辆车只能装载一定量的石油。 经过计算A地需要a辆车,B地需要b辆车运输才能满足需求。 现在一共有n辆车分布在各地,每辆车前往A、B两地…

【超详细教程】解决libxxx.so: cannot open shared object file: No file or directory

一、参考资料 error while loading shared libraries的解决方案 libascend_hal.so: cannot open shared object file:No such…解决办法-云社区-华为云 (huaweicloud.com) 二、相关介绍 1. -lxxx.so命名 lxxx means lib lib-name .solc means libc.so, lltdl means lib…

PyCharm定制python模板

设置模板后&#xff0c;每新建一个py脚本&#xff0c;都会默认为模板内容 设置路径&#xff1a; File - Settings - Editor - File and Code Templates - Python Scipt 官方模板变量&#xff1a; 变量名含义${DATE}当前系统日期${DAY}当前月的第几日${DAY_NAME_SHORT}当前星期…

盲盒经济下与社交电商结合,打造电商卖货新模式

如今&#xff0c;盲盒经济正在从线下延伸到线上&#xff0c;从潮流玩具扩展到美妆、食品、服装、数码等领域&#xff0c;形成了一种新的电商生态。 什么是盲盒电商&#xff1f; 盲盒电商是一种电商行业的营销模式&#xff0c;通过发起盲盒活动或拆盲盒&#xff0c;让参与者不…

最值得入手的好物有哪些,推荐几款实用的数码好物

随着科技的进步&#xff0c;越来越多的数码产品不断的出现在我们的生活中&#xff0c;这其中也不乏一些实用的数码产品&#xff0c;让我们可以享受更舒适的生活&#xff0c;提高我们的工作效率。下面就给大家分享几款我最近使用过的一些数码产品&#xff0c;它们不仅功能强大而…

CnOpenData制造业单项冠军企业工商注册基本信息数据

一、数据简介 2016年3月&#xff0c;工信部印发《制造业单项冠军企业培育提升专项行动实施方案》&#xff0c;方案指出&#xff1a;“到2025年&#xff0c;总结提升200家制造业单项冠军示范企业&#xff0c;发现和培育600家有潜力成长为单项冠军的企业”。截至2022年&#xff0…

数据治理-数据质量管理-Data governance Day1

目录 前言&#xff1a; 一、数据与质量 1.1何为数据 1.2何为质量 二、管理 2.1管理啥 2.2减少不合格数据产生 1、自动化代替手工台账 2、流程优化 2.3清洗不合格数据 1、业务清洗 2、数据清洗 三、总结 前言&#xff1a; 首先我们来了解下数据治理七种常用方法&#xff0c;…

【git】解决本地仓库与远程仓库不一致问题

目录 方法1&#xff1a;(未验证) 方法2:&#xff08;验证过&#xff09; 方法3&#xff1a;常规 1.将远程仓库代码拉取到本地作为本地的一个新的分支 temp 2.将这个temp的分支与我们的主分支对比查看有什么不同&#xff0c;有那些冲突 3.将新的temp分支与本地主分支合并 …