每日一博 - Excel导入导出的那点事儿

简介: 每日一博 - Excel导入导出的那点事儿

POI


想到数据的导入导出,大部分人最会想到apache的poi框架 以及Excel的版本问题。


POI 是 Apache 的一个开源项目,全称是 Poor Obfuscation Implementation,它是 Java 语言对 Microsoft Office 文档格式的操作工具。


主要功能包括:

  1. 提供对 Excel 电子表格的读写支持,可以读取和修改 Excel 的数据、样式等内容。
  2. 提供对 Word 文档的读写支持,可以读取和修改 Word 文档的文本、样式、列表等内容。
  3. 提供对 PowerPoint 演示文稿的读写支持,可以读取和修改 PPT 的文本、表格、图片等内容。
  4. 提供对 Outlook 电子邮件的支持,可以创建和修改 Outlook 邮件文件。
  5. 支持其他 Microsoft Office 文件格式,如 Visio、Publisher 等。


POI 的主要优点:


   使用 Java 语言开发,跨平台运行于 Windows、Linux、Unix 等系统。

   提供了易于使用的 API,可以用 Java 代码方便地处理 Office 文档。

   成熟稳定,拥有大量用户群,社区活跃。

   免费开源,代码托管在 Apache。

总之,POI 是操作 Office 文档的好工具,适合在需要编程处理 Excel、Word、PPT 等 Office 文档的场景下使用



POI不同版本的实现


HSSFWorkbook

早期使用最多的对象,它可以操作Excel2003以前(包含2003)的所有Excel版本。

在2003以前Excel的版本后缀还是.xls


XSSFWorkbook

操作的Excel2003–Excel2007之间的版本,Excel的扩展名是.xlsx


SXSSFWorkbook

POI3.8之后的版本才有的,它可以操作Excel2007以后的所有版本Excel,扩展名是.xlsx



不同API实现的优缺点


HSSFWorkbook


它是POI版本中最常用的方式


缺点

  • 最多只能导出 65535行,也就是导出的数据函数超过这个数据就会报错;

优点

  • 一般不会报内存溢出。(因为数据量还不到7w所以内存一般都够用, 是将数据先读取到内存中,然后再操作)



XSSFWorkbook

优点

这种形式的出现是为了突破HSSFWorkbook的65535行局限,是为了针对Excel2007版本的1048576行,16384列,最多可以导出104w条数据;



缺点

虽然导出数据行数增加了好多倍,但是随之而来的内存溢出问题也更加突出。因为所创建的book,Sheet,row,cell等在写入到Excel之前,都是存放在内存中的


SXSSFWorkbook

从POI 3.8版本开始,提供了一种基于XSSF的低内存占用的SXSSF方式:


优点:

  • 一般不会出现内存溢出(它使用了硬盘来换取内存空间,当内存中数据达到一定程度这些数据会被持久化到硬盘中存储起来,而内存中存的都是最新的数据),
  • 支持大型Excel文件的创建(存储百万条数据轻轻松松)



缺点:

既然一部分数据持久化到了硬盘中,且不能被查看和访问那么就会导致,在同一时间点我们只能访问一定数量的数据,也就是内存中存储的数据;

sheet.clone()方法将不再支持,还是因为持久化的原因;

不再支持对公式的求值,还是因为持久化的原因,在硬盘中的数据没法读取到内存中进行计算;

在使用模板方式下载数据的时候,不能改动表头,还是因为持久化的问题,写到了硬盘里就不能改变了;



经验



1、当我们经常导入导出的数据不超过7w的情况下,可以使用 HSSFWorkbook 或者 XSSFWorkbook都行;


2、当数据量查过7w并且导出的Excel中不牵扯对Excel的样式,公式,格式等操作的情况下,推荐使用SXSSFWorkbook;


3、当数据量查过7w,并且我们需要操做Excel中的表头,样式,公式等,这时候我们可以使用 XSSFWorkbook 配合进行分批查询,分批写入Excel的方式来做;


百万级别的数据导入导出的方案 EasyExcel

https://github.com/alibaba/easyexcel

e7e916e071fd44b6b17034a1c2ec273b.png

9aa39ab882934fcc8333e8df855c4f44.png

0c64e55d23bc4f0ebaee3cc68aa52c28.png


通用导入导出思路


通用导入导出思路

相关文章
|
7月前
|
SQL 数据库连接 数据库
【SQL Server】2. 将数据导入导出到Excel表格当中
【SQL Server】2. 将数据导入导出到Excel表格当中
160 0
|
7月前
|
easyexcel Java 测试技术
用 EasyExcel 实现 Excel 的导入导出
用 EasyExcel 实现 Excel 的导入导出
363 0
|
6月前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
84 0
|
4月前
|
开发框架 算法 .NET
C#使用MiniExcel导入导出数据到Excel/CSV文件
C#使用MiniExcel导入导出数据到Excel/CSV文件
82 0
|
6月前
|
Java easyexcel
java开发excel导入导出工具类基于EasyExcel
java开发excel导入导出工具类基于EasyExcel
315 1
|
6月前
|
Java API Spring
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
542 1
|
6月前
|
easyexcel Java API
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
1114 1
|
6月前
|
前端开发 Java 开发工具
如何在Spring Boot框架下实现高效的Excel服务端导入导出?
ArtifactId:是项目的唯一标识符,在实际开发中一般对应项目的名称,就是项目根目录的名称。 Group Id,Artfact Id是保证项目唯一性的标识,一般来说如果项目打包上传至maven这样的包管理仓库中。在搜索你的项目时,Group Id,Artfact Id是必要的条件。 Version:版本号,默认0.0.1-SNAPSHOT。SNAPSHOT代表不稳定的版本,与之相对的有RELEASE。 Project type:工程的类型,maven工程还是gradle工程。 Language:语言(Java,Kotlin,Groovy)。
|
6月前
|
easyexcel Java API
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
|
7月前
|
Java easyexcel Maven
【Java专题_04】集成EasyExcel进行Excel导入导出详细教程
【Java专题_04】集成EasyExcel进行Excel导入导出详细教程
462 0