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. 从头认识java-特辑-你不知道的main函数

    这一章节我们来讨论一下main函数. 对于这个函数大家都不陌生,并且都习以为常.可是当中有一些东西,还是值得我们去总结的. 1.普通的main package com.ray.test; public ...

  2. Jmeter-Maven-Plugin高级应用:Remote Server Configuration

    Remote Server Configuration Pages 12 Home Adding additional libraries to the classpath Advanced Conf ...

  3. linux下mysql-5.5.15安装详细步骤

    linux下mysql-5.5.15安装详细步骤 注:该文档中用到的目录路径以及一些实际的值都是作为例子来用,具体的目录路径以各自安装时的环境为准 mysql运行时需要一个启动目录.一个安装目录和一个 ...

  4. ios8 xcode6 下的启动界面设置和图标设置

    IOS8 我试了网上不少设置启动动画的,不知道是不是我弄错了还是怎么的,反正启动不了,后来在code4论坛找到了这个: 启动屏幕:LaunchScreen.xib文件 桌面图标等相关app图片:Ima ...

  5. 解决Synergy的鼠标无法从服务器(server)机屏幕移动到客户机(client)屏幕的问题

    我在工作时使用一台Win 7笔记本和一台Ubuntu台式机,为了提升工作效率,我使用Synergy在两台机器间共享了笔记本的鼠标和键盘,即笔记本作为服务器,台式机作为客户机. 这样使用了大概一年多,但 ...

  6. UITableViewCell 取消分隔线

    方法一: [historyTodayTableVC setSeparatorStyle:UITableViewCellSeparatorStyleNone]; 方法二: [historyTodayTa ...

  7. [置顶] 【玩转cocos2d-x之二十】从CCObject看cocos2d-x的内存管理机制

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/13765639 再看CCObject,剔除上节的拷贝相关,以及Lua脚本相关的 ...

  8. SQL:1999基本语法(学习笔记)

    SQL:1999基本语法 SELECT [DISTINCT] * | 列名称 [AS]别名,........ FROM 表名称1 [别名1][CROSS JOIN表名称2 别名2]| [NATURAL ...

  9. Phpcms之L()函数

    .phpcms\languages\zh-cn    中文语言包2.phpcms\languages\en    英文语言包 phpcms v9语言包建立  在phpcms v9二次开发之模型类的应用 ...

  10. 强制MySQL查询走索引和强制查询不缓存

    有些情况下,表中创建了索引但是EXPLAIN的查看执行计划的时候发现并没有走索引.是因为优化器认为该语句不使用索引效率更好. 当然也可以强制走索引.类似: SELECT uid,uname FROM ...