ExcelDataReader插件的使用
NPOI插件的弊端
刚来公司的时候公司软件导入导出操作都使用微软的office组件来实现,大家应该都知道这个组件有很大的弊端,就是运行主机上面必须安装office组件才可进行使用,不然无法进行导入导出操作,之前公司软件部门给的做法就是直接让客户安装Office就可以解决。
我接手后知道这个弊端,将插件进行了替换,使用网上比较流行的NPOI插件,基本上很少出现关于软件导入导出数据的反馈。但由于之前的软件需求基本都是少量数据的导入导出,NPOI都可以满足,现在新需求要求导入导出超过40w行的数据,NPOI插件就暴露出来弊端,在数据少的时候使用.xlsx的XFFSWorkbook类就可以实现,但是数据量超过某一个阀值,XFFSWorkbook就出现了异常,爆出内存溢出的消息,而且声明和访问时速度特别慢,感觉是组件内部在处理大数据文件时存在问题。
在网上查找发现NPOI对于大数据的处理有一个SXSSFWorkbook,它是NPOI专门来处理大数据文件的,我在使用过程中,当写入时,没问题可以使用,但是效率方面很差。可是在读取时,根本无法使用,因为它在使用过程中必须声明XFFWorkbook才可以,可是声明它的话就会遇到内存溢出问题。网上还有说直接使用xml形式来读取,但是xml格式需要自己去定义和解析,特别麻烦,故没有采用。
//声明处理.xlsx文件的方法(小文件)
IWorkbook workbook=new XSSFWorkbook();
//声明处理.xlsx文件的方法(大文件)
IWorkbook workbook=new XSSFWorkbook();
IWorkbook wb=new SXSSFWorkbook(workbook);
ExcelDataReader插件
在处理读取.xlsx文件时,在nuget中发现了ExcelDataReader插件,在做了demo后,对于40w行的读取很方便,而且速度特别快。推荐大家使用。
FileStream fs = null;
IExcelDataReader excelReader = null;
try
{
fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
excelReader = ExcelReaderFactory.CreateOpenXmlReader(fs);
int readIndex = 0;
int rowCount = excelReader.RowCount; //所有的行
DataRow dr;
object tempValue;
while (excelReader.Read())
{
dr = data.NewRow();
if (readIndex == startReadRowCount)
{
++readIndex;
continue;
}
//读取Excel中的头文件信息
if (readIndex <startReadRowCount)
{
dr[0] = excelReader.GetValue(0).ToString();
tempValue = excelReader.GetValue(1);
if (tempValue==null)
{
dr[1] = DBNull.Value;
}
else
{
dr[1] = excelReader.GetValue(1).ToString();
}
dr[2] = DBNull.Value;
dr[3] = DBNull.Value;
dr[4] = DBNull.Value;
dr[5] = DBNull.Value;
dr[6] = DBNull.Value;
}
else
{
dr[0] = excelReader.GetValue(0).ToString();
dr[1] = excelReader.GetValue(1).ToString();
dr[2] = Convert.ToDouble(excelReader.GetValue(2));
tempValue = excelReader.GetValue(3);
if (tempValue == null)
{
dr[3] = DBNull.Value;
}
else
{
dr[3] = Convert.ToDouble(excelReader.GetValue(3));
}
dr[4] = Convert.ToDouble(excelReader.GetValue(4));
dr[5] = Convert.ToDouble(excelReader.GetValue(5));
dr[6] = Convert.ToDouble(excelReader.GetValue(6));
}
data.Rows.Add(dr);
if (worker.CancellationPending) // 如果用户取消则跳出处理数据代码
{
e.Cancel = true;
break;
}
worker.ReportProgress(readIndex * 100 / rowCount);//加载进度条
++readIndex;
}
fs.Close();
fs.Dispose();
excelReader.Close();
excelReader.Dispose();
return data;
}
catch (Exception ex)
{
if (worker.CancellationPending) // 如果用户取消则跳出处理数据代码
{
e.Cancel = true;
}
if (fs != null)
{
fs.Close();
fs.Dispose();
}
if (excelReader != null)
{
excelReader.Close();
excelReader.Dispose();
}
throw new Exception("" + ex.Message);
}
插件下载地址:
https://www.nuget.org/packages/ExcelDataReader/3.0.0
ExcelDataReader插件的使用的更多相关文章
- Angular杂谈系列1-如何在Angular2中使用jQuery及其插件
jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...
- Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告
最近在做基于jenkins ant junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...
- 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)
前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...
- solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件
昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...
- 使用Visual Studio SDK制作GLSL词法着色插件
使用Visual Studio SDK制作GLSL词法着色插件 我们在Visual Studio上开发OpenGL ES项目时,避免不了写Shader.这时在vs里直接编辑shader就会显得很方便. ...
- 工欲善其事,必先利其器 之 VS2013全攻略(安装,技巧,快捷键,插件)!
如有需要WPF工具的朋友可以移步 工欲善其事,必先利其器 之 WPF篇: 随着开发轨迹来看高效WPF开发的工具和技巧 之前一篇<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATI ...
- Jquery mobiscroll 移动设备(手机)wap日期时间选择插件以及滑动、滚动插件
Jquery Mobiscroll是一个用于触摸设备(Android phones, iPhone, iPad, Galaxy Tab)的日期和时间选择器jQuery插件.以及各种滑动插件 可以让用户 ...
- 10个最好用的HTML/CSS 工具、插件和资料库
大家在使用HTML/CSS开发项目的过程中,有使用过哪些工具,插件和库?下面介绍的10种HTML/CSS工具,插件和资料库,是国外程序员经常用到的. Firebug Lite FirebugLite ...
- 在Sublime Text 3上安装代码格式化插件CodeFormatter
1.了解CodeFormatter插件 在Sublime Text 3中编写代码,为了能让我们的代码格式变得漂亮整洁,需要一个能自动格式代码的插件.这里发现CodeFormatter插件不错,它能支持 ...
- 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解
工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...
随机推荐
- PulADC驱动设计
Ref大电容10uF,X5R或钽电容,不建议NPO 参考信号的驱动(高能输出基准源,或者运放),低阻抗,大SlowRate,小建立时间:: ADA4841-1, AD8021, ADA4899-1, ...
- WEB攻击与防御技术 pikachu——文件包含下载上传漏洞
文件包含漏洞 一.LOCAL 上来就是一个选择,当我们选择一个球员的时候,如图所示,url会提交一个get请求 如果这个服务器架设在linux上我们就可以一直../../../../../到根目录然后 ...
- FastReport和RDLC报表
最近在做报表的时候第一次接触到RDLC报表,对比于之前使用的FastReport报表来说,在使用体验上个人目前感觉RDLC灵活性相对较差,尤其是表格的格式多样的时候,不易修改.RDLC应用于格式简单的 ...
- redis字段使用说明
Set(集合)增删改查: #删除当前选择数据库中的所有key127.0.0.1:6379> flushdbOK#生成set集合,添加4个数据127.0.0.1:6379> sadd set ...
- vue移动端在线签名
<template> <section class="signature"> <div class="signatureBox"& ...
- java pta第三次阶段性总结
一.前言 这是这学期最后一次总结,这三次的pta大作业也是最后一次,这几次大作业主要写了电信计费系统的主要功能,第一次大作业是座机计费功能,第二次大作业是手机计费功能,第三次大作业是短信计费的功能.这 ...
- Jetlinks物联网基础平台 前端运行项目遇到的问题
电脑中的环境要必备 node.js和yarn(需要将他们都添加到环境变量中,否则会报错) 1.在github上面拉取代码 $ git clone https://github.com/jetlinks ...
- 狐漠漠养成日记 Cp.00000 前言
前言 狐漠漠是我的常用网名,来源是因为我非常非常非常喜欢耳廓狐(也称作沙漠狐),所以我就给自己拟造了一个名叫狐漠漠的虚拟形象(如下图所示). 设定上是女孩子因为我想当女孩子但是我不是所以我就在设定上满 ...
- LeetCode刷题感想之BFS
BFS, 顾名思义,广度优先遍历,与DFS对应. 最大的一个区别是,在解题套路里,DFS 多数使用 List<List<Object>> 的方式来保存结果集,并且最后删除回溯的 ...
- vue-element-admin 安装运行失败
1.clone代码后 npm install,结果报错,如下: 解决方法: 在github中的添加新的ssh (生成ssh链接:https://blog.csdn.net/qq_35495339/ar ...