C/C++讀寫excel文件 的幾種方式

因爲有些朋友問代碼的問題,將OLE讀寫的代碼分享在這個地方,大家請自己看。 http://blog.csdn.net/fullsail/article/details/8449448

C++讀取Excel的XLS文件的方法有很多,但是也許就是因爲方法太多,大家在選擇的時候會很疑惑。 
由於前兩天要做導表工具,比較了常用的方法,總結一下寫個短文,

1.OLE的方式 
這個大約是最常用的方式,這個方式其實啓動了一個EXCEL的進程在背後讀寫EXCEL文件,這個方式的最大好處是什麼事情都能做。包括設置EXCEL的格式,增加刪除Sheet,讀寫單元格,等等。功能幾乎是最全的,而且使用起來也不是特別的難。 
其基本方法都是使用導出的.h文件進行OLE操作,但是由於OLE的接口說明文檔不多,想非常完美的使用她們也不是太容易,好在例子也很多。 
網上普遍認爲OLE速度慢,EXCEL的OLE讀寫方式也基本一樣。但是讀取速度可以改進,如果在讀取的加載整個Sheet的Range的全部數據,而不是一個個單元格讀取,那麼速度還是相對不錯。想想原理也很簡單,整體讀取減少了OLE的交互次數。OLE的寫入方式一般只能幾個進行比較方便,所以速度可能要快很多。 
我自己的親身體會是,一個EXCEL文件,100多列的字段,如果採用一個個單元格的讀取方式,1s大約3條左右的記錄,如果整體讀取,速度可以提高几十倍。 
OLE讀寫EXCEL方式功能很強大,讀取速度還可以,但寫入速度不高,當然這個方式不可能移植的,而且你必須安裝了EXCEL。

2.Basic EXCEL 方式 
這是CodeProject上的一個推薦開源工程了, 
http://www.codeproject.com/KB/office/BasicExcel.aspx 
作者是基於EXCEL的文件格式進行的處理。但是爲什麼叫Basic EXCEL呢。 
他不支持很多東西,公式,文件格式,表格合併等(有人說中文支持也不好),所以可以認爲他只支持最基本的EXCEL表格, 
我自己的嘗試是如果這個EXCEL文件有其他元素(公式,格式等),使用Basic EXCEL讀取會失敗。 
OLE讀寫EXCEL方式功能比較弱,由於是直接根據文件格式操作,讀寫速度都不錯,你也不需要按照EXCEL,另外這個方式是可以移植的,但是有一些成本,其代碼比較晦澀難懂,而且沒有註釋,另外即使在Windows平臺上,告警也很多。

3.Sourceforge 上的幾個EXCEL庫。 
Sourceforge 上有幾個開源的的EXCEL庫,但是完善的不多,有的是爲了PHP讀寫EXCEL準備的,包括libXLS,XLSlib,SmartEXCEL等。我下載了幾個實驗了一下,在Widonws都沒有編譯成功。也罷了。

4.ODBC的方式 
這個親身沒有嘗試過,但是按照原理,應該只能讀寫。 
速度嗎,ODBC的速度本來就是出名的慢了。 
http://www.vckbase.com/document/viewdoc/?id=421

值得一提的是Basic EXCEL的作者原來在CodeProject上有一個給予ODBC方式的封裝CSpreadSheet 。如果有興趣,大家可以去看看。其實內心還是很佩服這個作者的。 
http://www.codeproject.com/KB/database/cspreadsheet.aspx

5.ADO的方式 
ADO的方式聽說應該就是使用OLEDB的方式。和OLE的方式應該沒有本質區別。我看了看例子也和OLE很像

6.LibXL 
LibXL 是一個收費的EXCEL的庫。 
http://www.libxl.com/ 
按照他的說明,他可以不依賴EXCEL讀取XLS文件。包括設置格式等。看例子操作應該很簡單。但是是否可以移植到Linux平臺,我估計難度也不小。呵呵。 
由於要收費,沒有法子測試了。

7.網上一些號稱不用OLE讀取EXCEL例子 
初步看了一下,這個應該是網上探索EXCEL格式文檔的例子。可以實際操作的方式不強。

============================================================================================================================== 
2015年1月更新一下 
其實目前看來,可以使用的庫比原來多了不少。 
第一。 
LibXL 目前國內用的人不少。當然他其實沒有免費,只是……你在CSDN也能找到了。 
其實作者買的也不算太貴了。

第二。 
基於QT的代碼。 
https://github.com/dbzhang800/QtXlsxWriter 
這個庫可以讀取XLSX的格式。其實是這個格式目前也開源了。 
當然前提是你用QT,這個工程量優點浩大。

第三, 
xlslib,這個庫可以讀取寫入xls格式的 
http://sourceforge.net/projects/xlslib/?source=navbar

如果你是用.NET,你就太幸福了。可選的多了取了。 
http://blog.wwery.cn/?p=210 
什麼你想把.NET的庫轉換爲C++可以使用?這個……希望你能成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章