VC操作EXCEL
首先給大家介紹一下報表建立模組的組成,如下圖所示
模版檔案。由於筆者設計的報表都是週期性的固定報表,做成模版更適合資料的讀寫操作和圖表的生成,所以將全部的報表歸納整理生成了幾類模版。
模版描述檔案。主要紀錄資料寫在那個行那個列,那個圖表對應什麼型別的資料。它跟隨模版檔案的變更一起變更,時刻與模版檔案保持同步,這樣可以不必修改程式就能夠更改輸出報表的格式。
資料來源描述檔案。主要描述對應檔案的源資料所在的那種資料庫。
接下來給大家介紹一下程式操作
一、插入型別庫
1、在一個已有的MFC工程按Ctrl + W 彈出ClassWizard對話方塊。
2、Add Class.../From a type Library... 在 Office 目錄中,找到你想使用的Excel型別庫。若你安裝的是Offce2000則選擇安裝目錄下的EXCEL9.OLB檔案進行倒入,生成的倒入檔名稱叫做excel9.h和excel9.cpp;若你安裝的時office2003則選擇。選擇安裝目錄下EXCEL.exe進行到入,生成的倒入檔案時excel.h和excel.cpp。兩者的部分介面有所不同。
3、在彈出的對話方塊中選擇要新增的類,具體選那些類要根據實際情況而定。當然你也可以全選
說明:型別庫會給出Excel的全部介面類,可以根據需要挑選自己需要的類,但是一般情況下的EXCEL文的操作都會涉及以下的幾個類:_Application、WorkBooks、_WorkBook、WorkSheets、_WorkSheet、Range。若涉及圖表的操作還會涉及如下的幾個類:ChartObjects、ChartObject、_Chart、Series
二、服務的啟動和關閉
伺服器的啟動
說明:
在此之前要新增CoInitialize(NULL)函式初始化Com介面。
關鍵詞"Excel.Application"是啟動Excel的COM服務的唯一標示。
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的位置無資料(指的是區域空而非零)則程式丟擲異常。