Visual C++ Excel編程小節

    最近研究了一下Excel編程相關內容,原因是幫團委校對數據,需要校對的數據是人工錄入的可能會存在錯誤,比如學號或者姓名。正確的數據是從數據庫導出的Excel文件。最後效果圖如下:

clip_image002

讀寫Excel方式大致分爲三種:

1.採用數據庫方式連接,ODBC/ADO。

使用時必須安裝xls的ODBC驅動,一般情況下都是隨着Excel一起安裝的。不過也有例外,如果你使用的是64位的系統,會發現xls的驅動沒有,這是因爲目前還沒有xls的64位驅動,我使用的就是64位Windows,最後在虛擬機(XP)上完成的程序,順帶可以測試下。編寫時發現,使用ADO方式,後臺還是運行了Excel的進程,說明最根本還是第二種方法。

ADO編程模型(ADO2.5版本還加入了Stream對象,處理大數據;後來還有ADOX,擴展版本)

image

2.COM Automation,或者叫做互操作(C++ COM Interop),這就必須要瞭解Excel對象模型

excel

其中最常用的是Application/Workbook/WorkSheet/Range類,使用它們的屬性和方法就能實現絕大多數操作。這方面的資料很多是VBA的,轉換成C++代碼時注意將COM數據類型轉換成對應的數據類型(例如,使用_variant_t和_bstr_t類型來包裝COM下的VARIANT結構和BSTR指針)。ADO和Excel對象模型都是COM組件,微軟提供了智能指針模板例如_ConnectionPtr/_RecordsetPtr/_ApplicationPtr/,就可以避免使用COM時的引用計數和釋放等複雜操作了。

3.直接分析xls格式,這是依賴性最低的一種方法不需要安裝Excel或數據庫驅動,適合與沒有複雜數據與圖表的Excel文件。CodeProject上有兩篇文章,miniExcel和Basic_Excel就是這種方法。還有就是第三方的控件或者庫,多半是商業版,例如華表的Excel讀寫控件,LibXL(功能強大)。

幾點感觸是:在Windows下面編程,肯定會和COM打交道,所以應當重視起來,還有就是MFC框架,雖然用的很熟悉,但是確實笨重了一點,很多時候明顯感覺到壞代碼的味道:較長的方法,重複的代碼,資源文件應當與代碼分離…,就算分離出來,可複用性也不高,看來還得努力提高提高,WTL/ATL是不錯的選擇。互操作還是很有前途的。C++/COM/.NET之間的交互令人興奮。

 

幾篇很不錯的參考資料:

http://blog.csdn.net/bodybo/archive/2009/05/27/4220561.aspx

在VC中使用智能指針操作Excel

http://msdn.microsoft.com/zh-cn/library/wxks80sb.aspx

如何:以編程方式對工作表中的數據進行排序

http://support.microsoft.com/kb/257819/zh-cn#RetrieveExcel

如何在 Visual Basic 或 VBA 中使用 ADO 來處理 Excel 數據

http://conkeyn.javaeye.com.sixxs.org/blog/229992

VC++數據類型轉換大全

http://www.cnblogs.com/sensizhe/archive/2009/04/01/1427362.html

VC 利用ADO操作Excel

還有就是CodeProject和CodeGuru中的幾篇很好的文章就不列舉了。

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