POI
Apache POI 项目的任务是创建和维护 Java API,用于处理基于 Office Open XML 标准 (OOXML) 和 Microsoft 的 OLE 2 复合文档格式 (OLE2) 的各种文件格式。简而言之,您可以使用 Java 读写 MS Excel 文件。此外,您可以使用 Java 读写 MS Word 和 MS PowerPoint 文件。Apache POI 是您的 Java Excel 解决方案(适用于 Excel 97-2008)。
Excel97-2003版本,一个sheet最大行数65536,最大列数256。
Excel2007版本开始,一个sheet最大行数1048576,最大列数16384。
HSSF:是操作 Microsoft Excel 97 (-2003),扩展名为.xls。
XSSF:是操作 Microsoft Excel XML (2007+),扩展名为.xlsx。
SXSSF:是在XSSF基础上,POI 3.8 版本开始提供的一种支持低内存占用的操作方式,扩展名为.xlsx。
SXSSF 是 XSSF 的 API 兼容的流式扩展,可在必须生成非常大的电子表格且堆空间有限时使用。SXSSF 通过限制对滑动窗口内行的访问来实现其低内存占用,而 XSSF 允许访问文档中的所有行。不再在窗口中的旧行变得不可访问,因为它们被写入磁盘。
在自动刷新模式下,可以指定访问窗口的大小,以在内存中保存一定数量的行。当达到该值时,创建附加行会导致索引最低的行从访问窗口中删除并写入磁盘。或者,可以将窗口大小设置为动态增长;它可以根据需要通过显式调用 flushRows(int keepRows) 定期修剪。
由于实现的流性质,与 XSSF 相比存在以下限制:
- 在某个时间点只能访问有限数量的行。
- 不支持 Sheet.clone()。
- 不支持公式评估
poi 大量数据导出
@Async 避免超时异步执行提前返回
APIs
- User API (HSSF and XSSF)
- Event API (HSSF Only)
- Event API with extensions to be Record Aware (HSSF Only)
- XSSF and SAX (Event API)
- SXSSF (Streaming User API)
- Low Level API
converting existing HSSF Usermodel code to SS Usermodel (for XSSF and HSSF)
|
|
HSSF对应:HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell……
XSSF对应:XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell……
SXSSF对应:SXSSFWorkbook、Sheet、Row、Cell……
大量数据导出
- 数据分组,处理完清空内存。
- 使用 SXSSF (Streaming User API)
- 大于100万拆分 sheet
SXSSF
SXSSF是XSSF API的兼容流式扩展,在必须生成非常大的电子表格、并且堆空间有限时使用。 SXSSF通过限制对滑动窗口内数据的访问实现低内存占用,而XSSF允许访问文档中的所有行。 不在窗口中的数据将变得不可访问,因为它们已经被写入磁盘。
可以通过SXSSFWorkbook(int windowSize)在工作簿创建时指定窗口大小,也可以通过SXSSFSheet.setRandomAccessWindowSize(int windowSize)在每个工作表中设置
默认窗口大小为100,由SXSSFWorkbook.DEFAULT_WINDOW_SIZE定义。
windowSize为-1表示无限制访问。在这种情况下,所有未通过调用flushRows()刷新的记录都可随机访问。
请注意,SXSSF通过调用dispose方法来分配必须始终明确清理的临时文件。
请注意,根据使用的功能不同,仍然可能会消耗大量内存,例如: 合并区域、超链接、注释等仍然只存储在内存中,因此如果广泛使用可能仍需要大量内存。
SXSSF是一种低内存占用的操作方式,因为其提供了一个新的方法:
SXSSFWorkbook w3= new SXSSFWorkbook(100);//内存中保留100条数据,其余写入硬盘临时文件
在数据量超过设置的值时,会在硬盘生成临时文件保存之前的数据,而且POI会根据规则自动删除生成的这些临时文件。
POI生成的临时文件
System.out.println(System.getProperty("java.io.tmpdir"));