軟件開發過程中,經常需要將數據保存為.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。
from:http://blog.wwery.cn/?p=210


