以前很久没碰到导出上10万数据到Excel。最近两年的业务有导出几十万数据的场景。Excel导出之前一直用NPOI导出的,NPOI的优势是不依赖Office环境。但是早期的NPOI导出操作Excel全在内存里。发现导出4万以上数据内存就剧增了。导出个几万数据得需要内存大几个G。

为了解决大数据的Excel就开始查解决办法。网上也有各种办法,最后找到了NPOI新版提供的SXSSFWorkbook方式解决了导出百万数据占内存和慢的问题。他和XSSFWorkbook的差别是SXSSFWorkbook及时把数据写磁盘了,因此占用内存小,也不用担心内存无法铺开表格。缺点就是及时写磁盘了往回操作之前行会报数据写入磁盘错误。

示例代码

实现示例,用Nuget引用NPOI

using NPOI.SS.UserModel;
using NPOI.XSSF.Streaming;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp1
{class Program{static void Main(string[] args){Console.WriteLine("请输入导出行数:");string num = Console.ReadLine();int numInt = Convert.ToInt32(num);IWorkbook workbook = new SXSSFWorkbook(new XSSFWorkbook());NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("表单1");NPOI.SS.UserModel.IRow row = null;System.Diagnostics.Stopwatch wc = new System.Diagnostics.Stopwatch();wc.Start();//遍历组装串for (var i = 0; i < numInt; i++){row = sheet.CreateRow(i);int index = 0;//遍历属性的集合,创建DataTablefor(int j= 0;j < 30;j++){row.CreateCell(j).SetCellValue(i+"*"+j);index++;}}Save("out.xlsx", workbook);double allTime=wc.ElapsedMilliseconds / 1000;Console.WriteLine("新模式总共花:"+allTime+"秒");wc.Restart();IWorkbook workbookOld = new XSSFWorkbook();NPOI.SS.UserModel.ISheet sheetOld = workbookOld.CreateSheet("表单1");NPOI.SS.UserModel.IRow rowOld = null;wc.Start();//遍历组装串for (var i = 0; i < numInt; i++){rowOld = sheetOld.CreateRow(i);int index = 0;//遍历属性的集合,创建DataTablefor (int j = 0; j < 30; j++){rowOld.CreateCell(j).SetCellValue(i + "*" + j);index++;}}Save("outOld.xlsx", workbookOld);double allTimeOld = wc.ElapsedMilliseconds / 1000;Console.WriteLine("老模式总共花:" + allTimeOld + "秒");Console.ReadLine();}/// <summary>/// 保存/// </summary>/// <param name="fullName"></param>/// <param name="workbook"></param>private static void Save(string fullName, IWorkbook workbook){FileStream file = null;System.IO.FileInfo fi = new FileInfo(fullName);string dreict = fi.DirectoryName;if (!Directory.Exists(dreict)){Directory.CreateDirectory(dreict);}try{file = new FileStream(fullName, FileMode.Create);workbook.Write(file);}finally{if (file != null){file.Close();file.Dispose();}}}}
}

导出50万条新模式耗时55秒,内存占用10兆左右。

老模式直接内存不够无法导出

这就是Excel导出百万级数据的经验。之前回答导出不了的可以联系检验更新导出程序即可了。

Excel怎么导出百万级数据相关推荐

  1. Excel导入导出百万级数据

    Excel百万级数据导入导出方案 本文使用EasyExcel工作,导出格式XLSX 1.生成测试数据 这里用到的是MYSQL 5.7.31 创建表语句 CREATE TABLE `ACT_RESULT ...

  2. 使用POI导出百万级数据到excel的解决方案

    使用POI导出百万级数据到excel的解决方案 参考文章: (1)使用POI导出百万级数据到excel的解决方案 (2)https://www.cnblogs.com/hxun/p/11419006. ...

  3. oracle百万级数据导入,用Perl从oracle导出百万级数据到excel

    Perl从oracle导出百万级数据到excel excel 2007 可以存放1048576行.16384列的数据:excel 2003大概是65535行 我从oracle中导出30万行60列的数据 ...

  4. php导出1万条数据excel_PHP快速导出百万级数据到CSV或者EXCEL文件

    前言: 很多时候,因为数据统计,我们需要将数据库的数据导出到Excel等文件中,以供数据人员进行查看,如果数据集不大,其实很容易:但是如果对于大数集的导出,将要考虑各种性能的问题,这里以导出数据库一百 ...

  5. php oracle打印输出,php 连接oracle 导出百万级数据

    1,我们一般做导出的思路就是,根据我们想要的数据,全部查询出来,然后导出来,这个对数据量很大的时候会很慢,这里我提出来的思想就是分页和缓冲实现动态输出. 2.普通的我就不说了,下面我说一下分页和内存刷 ...

  6. kettle分批处理大表数据_Kettle大量数据快速导出的解决方案(利用SQL导出百万级数据,挺快的)...

    org.apache.commons commons-vfs2 2.0 org.scannotation scannotation 1.0.3 dom4j dom4j 1.6.1 pentaho-ke ...

  7. php导出1万条数据excel_实用!用PHP导出百万级大数据到Excel

    实用!用PHP导出百万级大数据到Excel 作者:PHPYuan 时间:2018-07-31 03:41:41 关注我们的人 月薪都过万了 一.数据量分析 假设我们需要单日导入的数量为20W+ Exc ...

  8. JAVA导出exls时报oom_如何实现导出百万条数据到EXCEL中不报OOM异常?

    Java项目中使用POI导出百万条数据到Excel中,但是会出现内存溢出异常. 存在以下问题需要考虑POI导出条数限制6w+ 数据量大的话会导致内存溢出 现在的做法是每6w条数据做一次分割,创建一个新 ...

  9. java读取百万条记录出错_如何实现导出百万条数据到EXCEL中不报OOM异常?

    Java项目中使用POI导出百万条数据到Excel中,但是会出现内存溢出异常. 存在以下问题需要考虑POI导出条数限制6w+ 数据量大的话会导致内存溢出 现在的做法是每6w条数据做一次分割,创建一个新 ...

最新文章

  1. pta 7-3 两个有序链表序列的合并 (20 分)
  2. angular 4使用jquery 第三方插件库
  3. python 文件保存读取时不用with的问题
  4. 某一个接口403 其他接口可以调通_设计模式HR:不会设计模式,你来面什么试?你以为设计模式只有23种?(真正的入门到精通可以用到入土)...
  5. java null转换jason_Java笔记Java常量、变量
  6. Ubuntu18.04.4 环境下对属性加密算法CP-ABE环境搭建
  7. 雷神开机logo更改_国产外星人雷神再发新品 911MT逐影者RTX2060光追游戏本评测
  8. nginx+tomcat+redis负载均衡,实现session共享
  9. 7-3 主从复制配置
  10. HW浮动静态路由及负载均衡
  11. Android四大组件之 --- Service入门
  12. 用jTessBoxEditor自动训练3500常用汉字
  13. [SNMP超详解]:简介、抓包分析与编程实战
  14. 程序员的一天:程序员每天工作是怎样的?带你看看!!
  15. UE4遇到的各种奇葩问题
  16. 让一台电脑死机至少需要几行代码
  17. 设置手机最小宽度为1000,无限重启怎么办
  18. Emitted value instead of an instance of Error) <v-uni-view v-for=“item in pi
  19. Web服务器性能测试工具介绍
  20. JetsonNano国产套件成功部署YoloV5手把手图解教程

热门文章

  1. 科大讯飞 前端 websocket 实时语音识别 代码_科大讯飞发布智能录音笔和智能TWS耳机,搭载核心AI转写能力...
  2. 构建和配置更安全的网站
  3. java 函数式接口与lambda表达式的关系
  4. C语言实现科学计算器
  5. php根据来路,小西的博客
  6. MC9S12XS128 PIM配置
  7. 【批处理DOS-CMD命令-汇总和小结】-显示文本文件内容(type),对文本文件的整行字符串进行排序(sort)
  8. 联想笔记本ubuntu系统下的背光调节
  9. C++ 上机实验(二)【继承与多态】
  10. 算法:动态规划——线性模型之小朋友过桥