HSSFworkbook,XSSFworkbook,SXSSFworkbook区别总结

用JavaPOI导出Excel时,我们需要考虑到Excel版本及数据量的问题。针对不同的Excel版本,要采用不同的工具类,如果使用错了,会出现错误信息。JavaPOI导出Excel有三种形式,他们分别是1.HSSFWorkbook 2.XSSFWorkbook 3.SXSSFWorkbook。

HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;

XSSFWorkbook:是操作Excel2007后的版本,扩展名是.xlsx;

SXSSFWorkbook:是操作Excel2007后的版本,扩展名是.xlsx;

第一种:HSSFWorkbook

poi导出excel最常用的方式;但是此种方式的局限就是导出的行数至多为65535行,超出65536条后系统就会报错。此方式因为行数不足七万行所以一般不会发生内存不足的情况(OOM)。

第二种:XSSFWorkbook

这种形式的出现是为了突破HSSFWorkbook的65535行局限。其对应的是excel2007(1048576行,16384列)扩展名为“.xlsx”,最多可以导出104万行,不过这样就伴随着一个问题—OOM内存溢出,原因是你所创建的book sheet row cell等此时是存在内存的并没有持久化。

第三种:SXSSFWorkbook

从POI 3.8版本开始,提供了一种基于XSSF的低内存占用的SXSSF方式。对于大型excel文件的创建,一个关键问题就是,要确保不会内存溢出。其实,就算生成很小的excel(比如几Mb),它用掉的内存是远大于excel文件实际的size的。如果单元格还有各种格式(比如,加粗,背景标红之类的),那它占用的内存就更多了。对于大型excel的创建且不会内存溢出的,就只有SXSSFWorkbook了。它的原理很简单,用硬盘空间换内存(就像hash map用空间换时间一样)。

SXSSFWorkbook是streaming版本的XSSFWorkbook,它只会保存最新的excel rows在内存里供查看,在此之前的excel rows都会被写入到硬盘里(Windows电脑的话,是写入到C盘根目录下的temp文件夹)。被写入到硬盘里的rows是不可见的/不可访问的。只有还保存在内存里的才可以被访问到。

SXSSF与XSSF的对比:

a. 在一个时间点上,只可以访问一定数量的数据

b. 不再支持Sheet.clone()

c. 不再支持公式的求值

d. 在使用Excel模板下载数据时将不能动态改变表头,因为这种方式已经提前把excel写到硬盘的了就不能再改了

当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:Javaheap space;内存溢出错误。这时应该用SXSSFworkbook。

HSSFworkbook,XSSFworkbook,SXSSFworkbook区别总结相关推荐

  1. HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简结

    HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简结 说明:用JavaPOI导出Excel时,我们需要考虑到Excel版本及数据量的问题.针对不同的Excel版本,要 ...

  2. C# HSSFWorkbook与XSSFWorkbook的区别和.xls和.xlsx的区别

    .xls和.xlsx的区别 1..xls是2003版Office Microsoft Office Excel 工作表的格式,用03版Office,新建Excel默认保存的Excel文件格式的后缀是. ...

  3. XSSFWorkbook,SXSSFWorkbook以及EasyExcel读取Excel文件的比较

    同时读取30w数据,比较运行时间及CPU.内存占比 1.EasyExcel package com.apesource;import java.util.ArrayList; import java. ...

  4. Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载

    场景 HSSFworkbook,XSSFworkbook,SXSSFworkbook区别 HSSFWorkbook: 是操作Excel2003以前(包括2003)的版本,扩展名是.xls:导出exce ...

  5. 使用Java导出数据到Excel

    一.excel数据导出限制 1. Excel 2003及以下的版本.一张表最大支持**65536**行数据,256列.也就是说excel2003完全不可能满足百万数据导出的需求. 2. Excel 2 ...

  6. 百万数据的导入导出解决方案

    300万数据的导入导出 前景: 在项目开发中往往需要使用到数据的导入和导出, 导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上. 写本文的背景是因为在工作中 ...

  7. java poi 往xlsx写数据为空

    今天遇到一个有趣的问题,不报任何异常, 程序跑完了,居然没往excel里写数据 后来 将SXSSFWorkbook改为XSSFWorkbook才成功!!! /*** 向已存在的excel中追加数据** ...

  8. 聊聊Excel的大批量导入导出

    几乎每个后台管理系统都难逃excel导入和导出的功能,目前针对大数据量的导入和导出多数是使用EasyExcel,EasyExcel极大地简单了java对excel的读写操作,从pom的依赖上知道eas ...

  9. 使用建造者模式(Builder Pattern) 设计Excel导出场景,附源码

    目录 建造者模式(Builder Pattern)简单介绍: 常见Excel导出场景 常见Excel 导出编码过程-结合过程查看代码 本文中的Excel导出使用方式 使用建造者模式设计Excel 导出 ...

最新文章

  1. 计蒜之道2015程序设计大赛初赛第三场——腾讯手机地图
  2. 前端也能玩转机器学习?Google Brain 工程师来支招!
  3. Project Euler Problem 104 Pandigital Fibonacci ends
  4. 嵌入式基础面八股文——进程与线程的基本概念(1)
  5. 做网站买主机还是服务器,做网站买主机还是服务器
  6. swift 笔记 (二十一) —— 高级运算符
  7. 深度学习图解 - 具备高中数学知识就能从入门到精通的神书 Andrew W· Trask
  8. Java 汉字繁体转简体
  9. java ckfinder_java 使用ckfinder
  10. java集合根据条件筛选数据
  11. 靠写代码登上胡润富豪榜花半年写得Python基础 入门必看
  12. C#不使用委托实现函数回调
  13. QCC512x QCC302x 延时函数 (阻塞与非阻塞)
  14. linux tar.xz 解压命令,Linux下.tar.xz文件的解压教程详解
  15. 武器装备自动测试系统软件ETest
  16. add_metrology_object_circle_measure (对齐测量模型)
  17. 中国是时候在东亚做老大了?
  18. 理解中国经济的五层思维-中国视角下的宏观经济
  19. STM32开发笔记48:STM32F4+DP83848以太网通信指南系列(二):系统时钟
  20. Objective-c:OC语言简介、类与对象

热门文章

  1. [转载] Python 迭代器 深入理解 与应用示例
  2. 决策树的value是什么意思_从零开始的机器学习实用指南(六):决策树
  3. excel保存快捷键_干货 | 快速提高工作效率的电脑快捷键!
  4. linux multipath.log,Linux Multipath配置
  5. elementui 弹窗 显示详细信息_ElementUI中el-table双击单元格事件并获取指定列的值和弹窗显示详细信息...
  6. python isupper需要调包吗_密码强度等级
  7. java vector_Java Vector lastElement()方法与示例
  8. c# 命名空间命名规范_C#命名空间能力问题和解答 套装2
  9. 第 6-4 课:MyBatis 核心和面试题(上)
  10. 2019最新C语言知识整理小白进来看看??