因為有些朋友問代碼的問題,將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格式文檔的例子。可以實際操作的方式不強。