zoukankan      html  css  js  c++  java
  • Excel操作类库最常用到的4种开源项目与MS Excel类库写操作对比分析性能

    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.0Visual Studio Tools for OfficePIAOffice14
    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() + "
    ");
     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

  • 相关阅读:
    保持同步
    将Cent0S 7的网卡名称eno16777736改为eth0
    Linux系统各发行版镜像下载(2)
    Linux系统各发行版镜像下载
    ~/.ssh目录找不到解决方法
    克隆后虚拟机网络配置
    新建的linux虚拟机找不到eth0解决办法
    SecureCRT 7 注册码
    linux运维常用命令
    shell脚本实例(2)
  • 原文地址:https://www.cnblogs.com/spring_wang/p/3157168.html
Copyright © 2011-2022 走看看