每日一博 - 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


通用导入导出思路


通用导入导出思路

相关文章
|
4月前
|
easyexcel Java 测试技术
用 EasyExcel 实现 Excel 的导入导出
用 EasyExcel 实现 Excel 的导入导出
208 0
|
2月前
|
Java easyexcel Maven
【Java专题_04】集成EasyExcel进行Excel导入导出详细教程
【Java专题_04】集成EasyExcel进行Excel导入导出详细教程
|
3月前
|
前端开发
若依框架 ------- 导入导出(Excel)
若依框架 ------- 导入导出(Excel)
91 0
|
9月前
|
JSON 数据格式
excel的导入导出和异常非空 总计等处理;导出多个excel合并导出zip(hutool导出)(详细讲解包括分析等等)(一)
excel的导入导出和异常非空 总计等处理;导出多个excel合并导出zip(hutool导出)(详细讲解包括分析等等)(一)
113 0
|
5月前
|
Java
SpringBoot实现Excel导入导出
SpringBoot实现Excel导入导出
59 0
|
5月前
|
开发框架 Java easyexcel
如何使用 SpringBoot 集成 EasyExcel 3.x 来实现优雅的 Excel 导入导出功能?
如何使用 SpringBoot 集成 EasyExcel 3.x 来实现优雅的 Excel 导入导出功能?
295 2
如何使用 SpringBoot 集成 EasyExcel 3.x 来实现优雅的 Excel 导入导出功能?
|
5月前
|
Java
Java Excel导入导出功能实现
Java Excel导入导出功能实现
50 0
|
6月前
|
前端开发 计算机视觉
Excel | 前端实现复杂表格导入导出
通过前端技术实现复杂excel表格(合并单元格,这里没有做表格的数据类型)的导入导出,下面代码还有简单表格的导出。 以下代码,cv即可用。主要是vue3以及ts的简单写法。
|
8月前
|
easyexcel Java
EasyExcel实现Excel文件多sheet导入导出
EasyExcel实现Excel文件多sheet导入导出
643 0
|
9月前
|
easyexcel Java 数据挖掘
SpringBoot整合EasyExcel,Excel导入导出就靠它了
SpringBoot整合EasyExcel,Excel导入导出就靠它了
1369 0