vc操作excel:[1]初始化連接、創建和寫入

有了上一篇vc操作word的經驗,這篇寫起來明顯就簡單了。無論是操作word還是excel,原理上是一樣的。另外操作excel遇到了意想不到的問題,在後面的補充里會加以說明。

工具/原料

vc6.0
Microsoft Office 2003

方法/步驟

新建MFC工程,工程名為 3 。在選擇From a type library時,選擇Microsoft Office安裝目錄下的office11文件夾,將文件過濾器改為 所有文件,找到excel.exe文件,確定,按shift添加所有的類。(這裡有疑問,可參見我的上一篇經驗「vc操作word:[1]初始化連接、創建和寫入。按:本來想寫成系列經驗的,奈何這幾天出問題了)

先初始化COM庫,在CMy3App類的InitInstance函數中,加入以下代碼:

if(CoInitialize(NULL)!=S_OK)

{

AfxMessageBox("Fail");

return FALSE;

}

新建一個類型為Generic Class的類,命名為CMeExcel

在文件視圖區打開MeExcel.h文件,如圖所示,加入以下代碼:

//頭文件

#include"comdef.h"

#include"atlbase.h"

#include"excel.h"

以及

//變量申明和函數定義

_Application m_exApp;   //Application

_Workbook m_exBook;   //表格,單數

Workbooks m_exBooks;  //表格,複數

_Worksheet m_exSheet;  //表單

Worksheets m_exSheets;

Range m_exRange;           //類似於單元格

BOOL CreateApplication();

BOOL CreateWorksheet();

BOOL SetItem();

打開MeExcel.cpp文件,如圖加入以下代碼:

BOOL CMeExcel::CreateWorksheet()

{

m_exBooks.AttachDispatch(m_exApp.GetWorkbooks());

m_exBook.AttachDispatch(m_exBooks.Add(_variant_t("")));

m_exSheets.AttachDispatch(m_exBook.GetWorksheets());

m_exSheet.AttachDispatch(m_exSheets.GetItem(_variant_t("sheet1")));

return TRUE;

}

BOOL CMeExcel::SetItem()

{

m_exRange.AttachDispatch(m_exSheet.GetCells());

m_exRange.SetItem(_variant_t((long)6),_variant_t((long)4),_variant_t("Hello"));

return FALSE;

}

//參照,word文檔建立的方法,會對它有更深刻的理解

現在開始調用類函數,創建excel表格,並寫入數據。只需在對話框中添加成員變量 CMeExcel m_meExcel,在對話框初始化函數中加入以下代碼:

m_meExcel.CreateApplication();

m_meExcel.CreateWorksheet();

m_meExcel.SetItem();

點擊運行。在第三行第五列顯示」Hello「。也就是運行m_meExcel.SetItem();函數的結果。

補充:在第一次編譯運行的時候,出現...\vc98\atl\include\atlbase.h(4497) : error C2660: 'VarCmp' : function does not take 3 parameters的錯誤,打開atlbase.h文件,果斷看不懂,按字面意思的理解,VarCmp函數不帶3個參數。在網上找資料,徹底被誤導了。打開MSDN,查找VarCmp,好吧,我承認技術不行看不懂,但是它說,總共有4個參數,當最後一個參數為1的時候,Ignore case,忽視的情況,不管,直接傳個 1 進去。編譯成功!

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場