避免OOM的高效Excel处理 MiniExcel

本文介绍了在项目中使用HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook处理Excel数据的优缺点,特别提到了MiniExcel在大数据量Excel导出中的应用,以及如何通过分批写入和缓存管理来避免内存溢出问题。

当前项目中使用最多的几乎是下面的工具生成Excel:

HSSFWorkbook:一般用于操作Excel2003以前(包括2003)的版本,扩展名是.xls。
XSSFWorkbook:一般用于操作Excel2007及以上的版本,扩展名是.xlsx
SXSSFWorkbook(POI 3.8+版本):一般用于大数据量的导出。

第一种:HSSFWorkbook

针对EXCEL2003版本,扩展名为.xls,此种的局限就是导出的行数最多为65535行、256列。一般不会出现内存溢出(OOM)的情况

第二种:XSSFWorkbook

针对EXCEL2007+,扩展名为.xlsx ,最多可以导出1048576行,16384列,不过这样就伴随着一个问题–OOM内存溢出。

第三种:SXSSFWorkbook

SXSSFWorkbook可以根据行数将内存中的数据持久化写到文件中,以此逐步写入,避免OOM。

针对于现在项目需求,采用了MiniExcel进行Excel的导出

  1. 先添加MiniExcel的引用
    在这里插入图片描述

2.查询数据并调用MiniExcel生成文件

	public class ExcelConstants
    {
   
   
        // 一个sheet装100w数据
        public const int PerSheetRowCount = 1000000;
        // 每次查询20w数据,每次写入20w数据
        public const int PerWriteRowCount = 200000;
    }
    
 	public class ExportModel
    {
   
   
    
    	/*
    	引用MiniExcel  在生成Excel时会自动引用这里的描述作为列头
    	*/
        [ExcelColumnName("导出列1")]
        public string Column1{
   
    get; set; }

        [ExcelColumnName("导出列2")]
        public string Column2{
   
    get; set; }

        [ExcelColumnName("导出列3")]
        public string Column3{
   
    get; set
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值