idea怎么导入poi

idea怎么导入poi

一文搞定POI,再也不怕excel导入导出了

写在前面

在Java日常开发过程中,实现Excel文件的导入导出功能是一项常见的需求。

通过使用相关的Java库,如Apache POI、EasyPoi或EasyExcel,可以轻松地实现Excel文件的读写操作。

而这篇文章将介绍如何在Java中使用Apache POI、EasyPoi 和EasyExcel库来进行Excel文件的导入和导出操作,帮助您快速掌握这一实用的技能。

一、使用场景

下面是excel导入导出的几个最常用的使用场景。

企业管理系统:企业管理系统通常需要导入员工信息、客户信息、销售数据等大量数据到系统中,以及导出报表、数据分析结果等信息。

学校教务系统:学校教务系统可能需要导入学生信息、课程表、成绩等数据,以及导出学生成绩单、教师工资表等信息。

电子商务平台:电子商务平台需要导入商品信息、订单数据等内容,以及导出销售报表、库存清单等信息,方便管理和分析。

④ 人力资源管理系统:人力资源管理系统需要导入员工档案、薪资信息等数据,以及导出薪资条、考勤报表等信息,方便人力资源管理和工资结算。

⑤ 医院信息系统:医院信息系统可能需要导入患者信息、医疗记录等数据,以及导出医疗报告、统计分析等信息,方便医护人员进行医疗服务和管理。

以上仅是一些常见的使用场景,实际上各种系统中的Excel导入导出功能可以根据具体需求进行定制和扩展

二、三个库简介

1、Apache POI

Apache POI是一个流行的Java库,用于处理Microsoft Office格式文件,包括Excel、Word和PowerPoint。它提供了丰富的API,可以创建、读取和修改各种类型的Office文档。

官网:https://poi.apache.org/

优点:

  1. 功能强大:支持处理复杂的Excel文件,包括单格、样式、图表等内容。

  2. 稳定性高:作为一个成熟的开源项目,得到广泛支持和持续维护。

  3. 灵活性:可以满足各种定制化需求,可以实现复杂的Excel处理功能。

缺点:

  1. 学习曲线较陡:对于初学者来说,学习成本可能较高。
  2. 性能相对较低:在处理大量数据时,性能可能受到一定影响。

2、EasyPoi

easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法

官网: https://gitee.com/lemur/easypoi

优点:

  1. 简单易用:EasyPoi 提供了简洁的 API 接口,使得 Excel 操作更加便捷。
  2. 功能丰富:支持 Excel 文件的导入导出、模板导出、校验等多种功能。
  3. 易于扩展:EasyPoi 基于 Apache POI 和 JexcelApi,可以方便地扩展和定制功能。
  4. 文档齐全:EasyPoi 提供了详细的文档和示例,便于开发人员学习和使用。

缺点:

  1. 功能有限:相比于 Apache POI,EasyPoi 可能在一些高级功能上有所限制。
  2. 可能存在性能问题:由于封装层的存在,EasyPoi 在处理大量数据时可能存在一定的性能损耗。

3、EasyExcel

EasyExcel是一个阿里巴巴基于Apache POI封装的开源框架,专注于Excel文件的读写操作。它提供了简洁易用的API,简化了Excel处理的流程。

官网:https://easyexcel.opensource.alibaba.com/

优点:

  1. 简单易用:提供了简洁的API,使用起来非常方便。
  2. 高性能:在处理大量数据时具有较高的性能,能够快速导入导出Excel文件。
  3. 支持注解:支持使用注解配置Excel文件的导入导出规则,简化了开发过程。

缺点:

  1. 功能相对有限:相比Apache POI,功能相对简单,可能无法满足某些复杂的Excel处理需求。
  2. 定制化能力较弱:定制化能力不如Apache POI灵活。

POI和EasyExcel区别

三 、各版本Excel 区别

不同版本的Excel在功能和格式上可能会有一些差异。所以后续在处理不同版本的excel时,会有少许不同

以下是一些常见的Excel版本之间的区别

1、Excel 97-2003(.xls)

  • 最大行数为65536行,最大列数为256列。
  • 支持的最大单格格式有限。
  • 不支持新的Excel特性,如条件格式、表格样式等。
  • 文件大小限制为2GB。

2、Excel 2007及以上版本(.xlsx)

  • 最大行数和列数均有较大提升,支持数百万行数和16384列。
  • 支持更多的单格格式和样式。
  • 引入了新的功能,如条件格式、表格样式、数据透视表等。
  • 支持更多的图表类型和图表样式。
  • 文件大小限制较大,最多可达16,384 x 1,048,576个单格。

四 、Excel 基本结构介绍

Java是面向对象的操作语言,万物皆对象。了解了Excel基本结构有助于我们将Excel与Java中对象关联起来

  • 工作簿(Workbook): Excel文件以工作簿的形式存在,一个工作簿可以包含多个工作表(Sheet)
  • 工作表(Sheet): 每个工作表由行(Row)和列(Column)组成,交叉形成单格(Cell),用于存储数据、文本、公式等内容
  • 单格(Cell): Excel中的最小单位,用于存储数据或公式。每个单格有一个唯一的地址,例如A1、B2等
  • 行(Row)和列(Column): 行是水平方向的一组单格,列是垂直方向的一组单格。行用数字标识,列用字母标识
  • 公式(Formula): Excel支持使用公式进行计算和数据处理。公式以等号(=)开头,可以引用其他单格的数值或内容进行运算
  • 函数(Function): Excel提供了大量的内置函数,用于进行各种复杂的计算和数据处理,如SUM(求和)、AVERAGE(平均值)、VLOOKUP(垂直查找)

Excel基本结构

五、Apache POI基本操作

由于Excel分为03版本和07版本,所以我们在使用的时候需要

注:

  • 处理03版本excel时,主要使用、、、等对象来操作Excel文件;

  • 处理07版本及之后版本excel时,主要使用、、、等对象来操作Excel文件

其他操作基本是一样的,了解这个之后,后续操作就很简单了~

5.1 基本写操作

5.1.1 03版本写excel

① 引入依赖


②实例代码


③ excel写出效果

image-20240303162520227

5.1.2 07版本写excel

07 版本依赖与处理03版本的有点不一样,代码基本上不变

① 所需依赖


② 代码修改

07版本操作与03版本操作基本没什么变化,我们只需将03版本代码中 修改成

 修改成 即可


③ 最终效果

07版本操作

5.1.3 03版本批量写excel

①代码


②最终效果

根据记录时间,耗时:1.663秒

03版本批量写入

5.1.4 07版本批量写excel

① 代码修改

我们只需将上面 修改成

 修改成 即可


② 最终效果

由于07及以上版本,没有限制行数,所以在写入数据时耗时相比较长。共耗时:10.959秒

07版本数据批量写入


注意: 如果03版本写入数据行数超过65536行会报如下错误,而07版本的不会报错

65536超出报错

5.1.5 07版本批量写入优化

通过上面的列子,我们可以看出来在07版本中批量写入大数据的时候耗时比较长,这小节,我们就使用apach提供新的类来优化代码

① 代码

代码基本不用变,我们只需要将 修改为

并且最终将数据写入过程中产生的缓存文件删除


② 最终效果

同样的数据大小,耗时明显减少了

07批量写入优化

5.2 基本读操作

5.2.1 基本读excel

① 03版本读取


②07版本读取

只需将修改为

 修改为


注:

如果上面获取单格数据的时候,取值的类型不对,即 类型的数据通过 获取,则会报错

其他类型不匹配情况类似

类型不匹配报错

5.2.2 读取不同类型数据

① 准备数据

现在有一张用户订单信息表,表内容如下,表中包含了各种类型的数据

用户订单信息表

②书写代码,将表格中的内容读取出来输出到控制台


读取不同类型数据

六、EasyPoi 使用

Easypoi的目标不是替代poi,而是让一个不懂导入导出的快速使用poi完成Excel和word的各种操作,而不是看很多api才可以完成这样工作

Easypoi 为谁而开发?

  • 不太熟悉poi的
  • 不想写太多重复太多的
  • 只是简单的导入导出的
  • 喜欢使用模板的

6.1 所需依赖


  • idea怎么导入poi1.easypoi :父包–作用大家都懂得
  • 2.easypoi-annotation :基础注解包,作用与实体对象上,拆分后方便maven多工程的依赖管理
  • 3.easypoi-base :导入导出的工具包,可以完成Excel导出,导入,Word的导出,Excel的导出功能
  • 4.easypoi-web :耦合了spring-mvc 基于AbstractView,极大的简化spring-mvc下的导出功能
  • 5.sax :导入使用xercesImpl这个包(这个包可能造成奇怪的问题哈),word导出使用poi-scratchpad,都作为可选包了

如果不使用spring mvc的便捷福利,直接引入easypoi-base 就可以了,easypoi-annotation

6.2 常用注解

EasyPoi 为了方便我们操作,实现了实体和Excel的对应,model–row,filed–col,这样利用注解,我们就可以轻轻松松实现excel的导入导出

  • @Excel 作用到filed上面,是对Excel一列的一个描述
  • @ExcelCollection 表示一个集合,主要针对一对多的导出,比如一个老师对应多个科目,科目就可以用集合表示
  • @ExcelEntity 表示一个继续深入导出的实体,但他没有太多的实际意义,只是告诉系统这个对象里面同样有导出的字段
  • @ExcelIgnore 和名字一样表示这个字段被忽略跳过这个导导出
  • @ExcelTarget 这个是作用于最外层的对象,描述这个对象的id,以便支持一个对象可以针对不同导出做出不同处理
6.2.1 @ExcelTarget

限定一个到处实体的注解,以及一些通用设置,作用于最外面的实体

①常用属性

属性 类型 默认值 功能 null 定义id唯一标识,不能重复 10 定义单格高度 11 设置文字大小

②使用


6.2.2 @Excel

@Excel这个是必须使用的注解,用在filed(属性)上面,是对Excel一列的一个描述

① 常用属性

属性 类型 默认值 功能 null 生成Excel表格中列名 fasle 是否需要纵向合并单格(用于含有list中,单个的单格,合并list创建的多个row) “0” 指定生成Excel中列的顺序,按照数字自然顺序排序 {} 值得替换 导出是{a_id,b_id} 导入反过来 “upload” 指定导入Excel中图片的保存路径 1 导出类型 1 是文本 2 是图片,3 是函数,10 是数字 默认是文本 10 指定导出Excel时列的宽度 true 校验字段,看看这个字段是不是导入的Excel中有,如果没有说明是错误的Excel,读取失败, “” 导出Excel的时间格式 “” 导入Excel的时间格式 “” 时间格式,相当于同时设置了exportFormat 和 importFormat 1 导出类型 1 从file读取 2 是从数据库中读取 默认是文件 同样导入也是一样的 “” 文字后缀,如% 90 变成90% true 是否换行 即支持 fasle 纵向合并内容相同的单格

②使用


7.2.3 @ExcelEntity

来标记实体类中包含另一个实体类的字段的注解。通过在父实体类的字段上添加  注解,可以将子实体类中的字段映射到 Excel 表格中

① 常用属性

属性 类型 默认值 功能 id String null 定义ID

② 使用


在上面的示例中,  类中包含一个  类型的字段  ,通过在  字段上添加  注解,可以将  类中的字段映射到 Excel 表格中,并且在 Excel 表格中会显示为一个包含  和  列的子表格。

6.2.4 @ExcelCollection

一对多的集合注解,来标记实体类中包含集合类型字段的注解。

通过在父实体类的集合字段上添加  注解,可以将集合中的素映射到 Excel 表格中

①常用属性

属性 类型 默认值 功能 null 定义ID null 定义集合列名,支持nanm_id 0 排序,支持name_id ArrayList.class 导入时创建对象使用

② 使用


在上面的示例中,  类中包含一个  类型的字段  ,通过在  字段上添加  注解,可以将  类型的素映射到 Excel 表格中,并且在 Excel 表格中会显示为一个包含多个商品信息的列表。

6.2.5 @ExcelIgnore

来标记实体类中不需要导出到 Excel 表格的字段的注解

① 使用


在上面的示例中,  类中包含了  、  和  三个字段。通过在  字段上添加  注解,告诉 EasyPoi 在导出 Excel 表格时不导出该字段的内容。

6.3 注解使用导出Excel案例

6.3.1 导出基本数据

① 创建基本对象对象


②模拟测试数据


③导出数据


④ 查看excel

导出基本excel

6.3.2 忽略某个字段

① 添加注解


②查看excel

忽略某个字段

6.3.3 导出对象中含有对象的数据

① 添加注解


② 新建UserBaseInfo类


③ 测试数据中添加 对象


④ 导出excel数据

对象中包含对象

6.3.4 导出含list集合数据

①我们新建 对象


②  类中添加如下list集合


③添加测试数据


④ 由于是一对多关系,所以需要添加合并单格属性


⑤导出excel

导出list

6.3.5 导出图片

①类中定义头像字段


② 构造测试数据


③ 导出excel

导出图片

6.4 大数据导出

当我们导出得数据量为几十万到几百万时,一次将所有数据加载到内存中,会对cpu、内存都产生巨大压力。

当然了,EasyPoi作者也为我们考虑了,专门提供 方法来导出大数据


6.5 导入excel

6.5.1 导入基本数据

① 准备目标excel

目标excel

② 定义基本数据对象


③ 导入代码


② 打印导入结果


6.5.2 导入带图片数据

①excel数据

excel图片数据

②类设置图片保存路径


③ 导入excel

关键部分


④ 导入结果


图片保存路径

6.6 小结

以上小节为easypoi的最基本操作,如果大家还想了解更多,可以关注官方文档:http://doc.wupaas.com/docs/easypoi/

作者也给出了大量的实例:https://gitee.com/lemur/easypoi-test

八、EasyExcel使用

8.1 快速入门之写excel

8.1.1 引入依赖

目前最新的依赖是3.3.3,我们这里引入使用最多也最稳定的3.3.2版本


8.1.2 构建数据对象

8.1.3 构建测试数据

上面代码根据传入count,构建通用数据,后面不会重复写

8.1.4 写入数据

写入的数据

8.2 快速入门之读excel

8.2.1 准备目标excel

员工信息表

8.2.2 构建数据对象

这里我们沿用8.1.2 小节中创建的employee对象

8.2.3 读取数据

注: PageReadListener 为默认easyexcel为我们写好的监听类,当然了,我们也可以自己定义,在后面的进阶操作中

我们会说到


读取数据

8.3 进阶操作

8.3.1 复杂表头写入

① 准备对象


②代码


③excel写入示例

复杂表头

8.3.2 重复多次写入(写到单个或者多个Sheet)

① 准备对象


②代码


③Excel示例

100万数据写入

除了上面的常用例子外,还有更多玩法,大家可以参照官方文档,里面写的很详细,这里就不一一例举了~

8.4 excel填充

EasyExcel提供了数据填充的功能,可以将指定的数据填充到事先设计好带有样式和格式的Excel模板文,这样我们就可以制作出更加优美的excel

8.4.1 简单的填充

① 准备模板

image-20240310172107654

②准备对象


③填充数据

根据对象填充


根据map填充


④最终效果

最终效果

8.4.2 填充列表数据

①准备模板

相比上一小节的模板,列表数据的模板  依此类推

列表模板

②填充对象

参照上一小节

③ 准备数据


④ 填充数据


⑤ 最终效果

最终效果

8.4.3 复杂填充

当excel模板相对复杂时,也可以填充

① 准备复杂模板

复杂模板

② 准备填充对象

参照8.4.1小节

③准备数据

参照8.4.1小节

④填充数据


⑤ 最终效果

学生信息统计表

九、文章小节

文中只例举出excel 常用操作,如果这些还不满足你的需求,大家可以查看官方文档。

官方文档还是非常详细的,并且都给出了具体的demo。

另外文中例举出的代码已提交到https://gitee.com/xiezhr/excel-demo.git 欢迎大家访问查看

今天的文章
idea怎么导入poi分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/137497.html

(0)
编程小号编程小号
上一篇 2024-09-01 11:06
下一篇 2024-09-01

相关推荐