1. 程式人生 > >VC操作EXCEL

VC操作EXCEL

Excel為發人員提供了強大的外部介面,方便開發人員進行二次開發。最近筆者就採用excel automation技術成功地解決了excel報表的自動生成功能.

首先給大家介紹一下報表建立模組的組成,如下圖所示

模版檔案。由於筆者設計的報表都是週期性的固定報表,做成模版更適合資料的讀寫操作和圖表的生成,所以將全部的報表歸納整理生成了幾類模版。

模版描述檔案。主要紀錄資料寫在那個行那個列,那個圖表對應什麼型別的資料。它跟隨模版檔案的變更一起變更,時刻與模版檔案保持同步,這樣可以不必修改程式就能夠更改輸出報表的格式。

資料來源描述檔案。主要描述對應檔案的源資料所在的那種資料庫。

接下來給大家介紹一下程式操作

excel的流程:

一、插入型別庫

1、在一個已有的MFC工程按Ctrl + W 彈出ClassWizard對話方塊。

2、Add Class.../From a type Library... Office 目錄中,找到你想使用的Excel型別庫。若你安裝的是Offce2000則選擇安裝目錄下的EXCEL9.OLB檔案進行倒入,生成的倒入檔名稱叫做excel9.hexcel9.cpp;若你安裝的時office2003則選擇。選擇安裝目錄下EXCEL.exe進行到入,生成的倒入檔案時excel.hexcel.cpp。兩者的部分介面有所不同。

3、在彈出的對話方塊中選擇要新增的類,具體選那些類要根據實際情況而定。當然你也可以全選

說明:型別庫會給出Excel的全部介面類,可以根據需要挑選自己需要的類,但是一般情況下的EXCEL文的操作都會涉及以下的幾個類:_ApplicationWorkBooks_WorkBookWorkSheets_WorkSheetRange。若涉及圖表的操作還會涉及如下的幾個類:ChartObjectsChartObject_ChartSeries

二、服務的啟動和關閉

伺服器的啟動

說明:

在此之前要新增CoInitialize(NULL)函式初始化Com介面。

關鍵詞"Excel.Application"是啟動ExcelCOM服務的唯一標示。

SetVisible函式表示執行的程序是否可見。

SetDisplayAlerts函式表示是否忽略警告資訊,比如提示“檔案xxx.xls已經存在是否覆蓋?”,SetDisplayAlerts的引數為FALSE則不出現提示信並預設覆蓋。

服務的關閉

三、檔案的開啟與儲存

檔案的開啟

檔案的儲存

說明:

對於檔案的儲存2000版和2003版有所區別,2000版比2003版少了一個引數。

四、操作的退出

上面提到得服務的退出不代表檔案就關閉了,當服務停止後記憶體中依然駐留著一個Excel.exe程序必須殺掉該程序才算完整的退出。實現程式碼如下:

資料操作       1.獲取sheet 注意:sheet名稱必須在檔案中存在,否則程式丟擲異常。為了適應不同檔案的操作,此處的sheet名稱可通過配置檔案進行動態配置。 2.獲取range 3.指定行列的資料獲取 4.資料的填寫 5.資料區域的拷貝 假如有一個表格高度變數是dTableHeight,寬度變數是dTableWidth,將其拷貝若干份,每個表格之間相隔一行實現程式碼如下: 圖表操作 Excel提供了功能強大的圖表處理功能,我們可以輕而易舉的繪製各類統計報表。如下圖所示我們將對局有固定模版的圖表進行處理。   1.獲得圖表 注意:變數ChartNo表示圖表的排序值,即屬於一個sheet中的第幾個圖表,該排序值是根據使用者建立圖表的順序自動生成的。 2.設定曲線 要實現曲線的,就必須準確的描述曲線。曲線描述資訊是一個序列化的字串,它包含四個部分,每個部分之間依靠逗號分隔: 1.圖表的title. 2.圖表的x周描述資訊 3.顯示曲線所基於的資料區域描述 4.單一圖表內的曲線排序值(曲線id 其中某些專案可以不設,系統將取預設值,最終形成的序列化格式如下: =SERIES("示例",資料!$A$4:$A$34,資料!$C$4:$C$34,1),也可以省略指定x座標 =SERIES("示例", ,資料!$C$4:$C$34,1) 注意:設定的資料內不得出現沒有值得現象。比如基於資料區域a1:a100形成一條曲線,若a30的位置無資料(指的是區域空而非零)則程式丟擲異常。