Excel怎么导出百万级数据
以前很久没碰到导出上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怎么导出百万级数据相关推荐
- Excel导入导出百万级数据
Excel百万级数据导入导出方案 本文使用EasyExcel工作,导出格式XLSX 1.生成测试数据 这里用到的是MYSQL 5.7.31 创建表语句 CREATE TABLE `ACT_RESULT ...
- 使用POI导出百万级数据到excel的解决方案
使用POI导出百万级数据到excel的解决方案 参考文章: (1)使用POI导出百万级数据到excel的解决方案 (2)https://www.cnblogs.com/hxun/p/11419006. ...
- oracle百万级数据导入,用Perl从oracle导出百万级数据到excel
Perl从oracle导出百万级数据到excel excel 2007 可以存放1048576行.16384列的数据:excel 2003大概是65535行 我从oracle中导出30万行60列的数据 ...
- php导出1万条数据excel_PHP快速导出百万级数据到CSV或者EXCEL文件
前言: 很多时候,因为数据统计,我们需要将数据库的数据导出到Excel等文件中,以供数据人员进行查看,如果数据集不大,其实很容易:但是如果对于大数集的导出,将要考虑各种性能的问题,这里以导出数据库一百 ...
- php oracle打印输出,php 连接oracle 导出百万级数据
1,我们一般做导出的思路就是,根据我们想要的数据,全部查询出来,然后导出来,这个对数据量很大的时候会很慢,这里我提出来的思想就是分页和缓冲实现动态输出. 2.普通的我就不说了,下面我说一下分页和内存刷 ...
- kettle分批处理大表数据_Kettle大量数据快速导出的解决方案(利用SQL导出百万级数据,挺快的)...
org.apache.commons commons-vfs2 2.0 org.scannotation scannotation 1.0.3 dom4j dom4j 1.6.1 pentaho-ke ...
- php导出1万条数据excel_实用!用PHP导出百万级大数据到Excel
实用!用PHP导出百万级大数据到Excel 作者:PHPYuan 时间:2018-07-31 03:41:41 关注我们的人 月薪都过万了 一.数据量分析 假设我们需要单日导入的数量为20W+ Exc ...
- JAVA导出exls时报oom_如何实现导出百万条数据到EXCEL中不报OOM异常?
Java项目中使用POI导出百万条数据到Excel中,但是会出现内存溢出异常. 存在以下问题需要考虑POI导出条数限制6w+ 数据量大的话会导致内存溢出 现在的做法是每6w条数据做一次分割,创建一个新 ...
- java读取百万条记录出错_如何实现导出百万条数据到EXCEL中不报OOM异常?
Java项目中使用POI导出百万条数据到Excel中,但是会出现内存溢出异常. 存在以下问题需要考虑POI导出条数限制6w+ 数据量大的话会导致内存溢出 现在的做法是每6w条数据做一次分割,创建一个新 ...
最新文章
- pta 7-3 两个有序链表序列的合并 (20 分)
- angular 4使用jquery 第三方插件库
- python 文件保存读取时不用with的问题
- 某一个接口403 其他接口可以调通_设计模式HR:不会设计模式,你来面什么试?你以为设计模式只有23种?(真正的入门到精通可以用到入土)...
- java null转换jason_Java笔记Java常量、变量
- Ubuntu18.04.4 环境下对属性加密算法CP-ABE环境搭建
- 雷神开机logo更改_国产外星人雷神再发新品 911MT逐影者RTX2060光追游戏本评测
- nginx+tomcat+redis负载均衡,实现session共享
- 7-3 主从复制配置
- HW浮动静态路由及负载均衡
- Android四大组件之 --- Service入门
- 用jTessBoxEditor自动训练3500常用汉字
- [SNMP超详解]:简介、抓包分析与编程实战
- 程序员的一天:程序员每天工作是怎样的?带你看看!!
- UE4遇到的各种奇葩问题
- 让一台电脑死机至少需要几行代码
- 设置手机最小宽度为1000,无限重启怎么办
- Emitted value instead of an instance of Error) <v-uni-view v-for=“item in pi
- Web服务器性能测试工具介绍
- JetsonNano国产套件成功部署YoloV5手把手图解教程
热门文章
- 科大讯飞 前端 websocket 实时语音识别 代码_科大讯飞发布智能录音笔和智能TWS耳机,搭载核心AI转写能力...
- 构建和配置更安全的网站
- java 函数式接口与lambda表达式的关系
- C语言实现科学计算器
- php根据来路,小西的博客
- MC9S12XS128 PIM配置
- 【批处理DOS-CMD命令-汇总和小结】-显示文本文件内容(type),对文本文件的整行字符串进行排序(sort)
- 联想笔记本ubuntu系统下的背光调节
- C++ 上机实验(二)【继承与多态】
- 算法:动态规划——线性模型之小朋友过桥