4种开源Excel读写类库与MS Excel类库写操作对比

软件开发过程中,经常需要将数据保存为.xls或.xlsx文件。之前发现微软提供的Microsoft.Office.Interop.Excel效率及其底下,所以搜集了另外4个可以独立读写Excel的开源类库,对写操作进行对比。

测试平台:

CPU Intel Xeon, 3200 MHz (16 x 200)
主板 MSI E7525 Master-S2 (MS-9151)
内存 1024 MB  (Registered ECC DDR2 SDRAM)
操作系统 Microsoft Windows 7 Ultimate SP1 (x86)
开发平台 Visual Studio 2010 & .Net Framework 4.0
测试用的5个类库:
测试代号 类库版本 运行时版本 网址/地址
MS Excel 14.0.0.0 2.0.50727 \Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14\
ExcelPackage 1.0.0.1 2.0.50727 http://excelpackage.codeplex.com/
EPPlus 2.9.0.1 2.0.50727 http://epplus.codeplex.com/
NPOI 1.2.4.0 4.0.30319 http://code.google.com/p/npoi/
ExcelLibrary 1.0.0.0 v2.0.50727 http://code.google.com/p/excellibrary/

在测试开始之前,先将一个366行8列的数据集读入内存,为了避免数据存入硬盘等操作产生的误差,测试仅记录了将数据循环写入数据表中单元格所消耗的时间,为了消除可能的误差,每次操作之间设计了一个30秒的停顿,代码框架如下:

 1: for (int s = 0; s < 51; s++)
 2: {
 3:     System.Diagnostics.Stopwatch MyWatch = new System.Diagnostics.Stopwatch();
 4:     //初始化
 5:     MyWatch.Start();
 6:     for (int i = 0; i < rows; i++)
 7:     {
 8:         for (int j = 0; j < columns; j++)
 9:         {
 10:             //写入单元格数据;
 11:         }
 12:     }
 13:     MyWatch.Stop();
 14:     //垃圾回收; 
 15:     textBox.AppendText(MyWatch.ElapsedMilliseconds.ToString() + "\r\n");
 16:     System.Threading.Thread.Sleep(30000);
 17: }

取重复测试51次,首次运行一般耗时较长,未计算在内,其余的计算平均值,结果如下表所示:

光从效率上讲,ExcelLibrary以平均高出第二名将近3倍,领先微软自己的Excel类库2700多倍的速度遥遥领先!但是兼容性和导出文件大小还是需要关注的。测试用的数据集粘贴在Excel 2010空文件中保存后,.xls文件大小为57KB,.xlsx文件为26KB,导出后的文件大小却不相同。细节如下图:

综合上述,如果单需要导出.xlsx格式,EPPlus显然是最佳选择,导出速度在所有支持07-10格式的类库中最快,生成的文件也最小;如果单需要导出.xls格式,ExcelLibrary是首选,速度遥遥领先,文件大小也有略有优势;就算同时需要导出两种格式,MS Excel依然不是首选,应为速度实在是慢到令人发指……需要注意的是,大于65536行的数据.xls格式不支持,必须使用.xlsx。

转载原地址:http://blog.wwery.cn/?p=210

Excel操作类库最常用到的4种开源项目与MS Excel类库写操作对比分析性能的更多相关文章

  1. Android常用酷炫控件(开源项目)github地址汇总

    转载一个很牛逼的控件收集帖... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.Gri ...

  2. .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍

    1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...

  3. JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载

    EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址:https://github.com/alibaba ...

  4. SDRAM单字写操作

    SDRAM单字写操作 1.单字写操作时序 2.写verilog程序体会 在初始状态,先写好跳转条件.If()....else... 3.通过仿顺序操作来实现连续写操作 首先完成单字写操作,然后跳转到下 ...

  5. Python 操作 MS Excel 文件

    利用 Python 对 Excel 文件进行操作需要使用第三方库: openpyxl,可执行 pip install openpyxl 进行安装 1. 导入 openpyxl 模块 导入 openpy ...

  6. Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库

    Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库1.1. 5种常用的Photoshop滤镜,分别针对照片的曝光.风格色调.黑白照片处理.锐利度.降噪这五大 ...

  7. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  8. CentOS系统操作mysql的常用命令

    MySQL名字的来历MySQL是一个小型关系型数据库管理系统,MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了 ...

  9. phpexcel的写操作将数据库中的数据导入到excel中

    这个版本据说是可以支持excel2007,但是我使用2007编辑的xlsx是无法获得该库的支持.于是乎我就将它转化为2003.感觉支持地很好. 下面介绍一下具体的使用: require_once('. ...

随机推荐

  1. 【UI设计】扁平化设计之流行色值

    收集了一些颜色值 顏色表示方法: 以命名方式定义经常使用的顏色,如color="green".可是自由度较低,何况单词量...... 以RGB值表示.如#FF0000表示red(红 ...

  2. Mac 显示和隐藏文件

    显示和隐藏文件 显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏Mac隐藏文件的命令: def ...

  3. [Javascript] Funciton Expression

    //This will load the code into the memory no matter //you call it or not function diffOfSquares(a,b) ...

  4. boost::tie()和boost::variant()解说

    #include<iostream> #include<boost/tuple/tuple.hpp> #include<boost/variant.hpp> #in ...

  5. Wndows 主进程(Rundll32)已停止工作

        打开电脑,出现"windows 主进程(Rundll32)已停止工作",百度了一下,是文件损坏了.     下载一个新的文件,替换即可,若遇到权限问题,使用魔方工具中的设置 ...

  6. 限制RICHTEXTBOX的输入的范围

        附件: http://files.cnblogs.com/xe2011/WindowsFormsApplication_LimitRichTextBoxInput.rar     using  ...

  7. 数据库 之 E-R实体关系模型

    E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. 1.表示方法 E-R是描述现实世界概念结构模型的 ...

  8. Linux c 管道文件-进程间的通信 mkfifo、pipe

    管道文件: 1.       创建管道mkfifo(命名管道) #include<sys/stat.h> int mkfifo( const  char  *pathname, mode_ ...

  9. iOS类方法实例方法 与 self

    Objective-C里面既有实例方法也类方法.类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method).工厂方法的称 ...

  10. E信通项目总结[转]

    http://ucd.leju.com/index.php/ouba2/