實務常需自動生成 Word 文件、填寫表格、提取資料庫資料。VC++ 呼叫 Word 較繁瑣,本文以 Office 2000 為例,詳細說明型別程式庫匯入、巨集錄製反推參數、表格填寫完整流程。
Word 2000 型別程式庫:MSWORD9.OLB (通常在 C:\Program Files\Microsoft Office\Office\)。用 ClassWizard Add Class → From a type library 選擇 _Application、_Document、Documents、Selection 四個核心類別。
產生 msword9.h/.cpp,包裝類別繼承 COleDispatchDriver。
wdParagraph) 用 VBA 立即視窗 ? wdParagraph 查得數值。VARIANT 型別:字串→VT_BSTR、布林→VT_BOOL、整數→VT_I4。
void CWordAutomationDlg::OnWordTableWrite()
{
BeginWaitCursor();
COleVariant vTrue((short)TRUE), vFalse((short)FALSE),
vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
_Application m_App;
Documents m_Docs;
Selection m_Sel;
m_Docs.ReleaseDispatch(); m_Sel.ReleaseDispatch();
m_App.m_bAutoRelease = TRUE;
if (!m_App.CreateDispatch("Word.Application")) {
AfxMessageBox("建立 Word 服務失敗"); return;
}
// 定義 VARIANT 參數
COleVariant varFilePath("word表格.doc");
COleVariant varstrNull("");
COleVariant varZero((short)0);
COleVariant varTrue((short)1, VT_BOOL);
COleVariant varFalse((short)0, VT_BOOL);
m_Docs.AttachDispatch(m_App.GetDocuments());
m_Docs.Open(varFilePath, varFalse, varFalse, varFalse,
varstrNull, varstrNull, varFalse, varstrNull,
varstrNull, varTrue, varTrue, varTrue);
m_Sel.AttachDispatch(m_App.GetSelection());
// 移動游標到表格目標儲存格並填入資料
m_Sel.MoveDown(COleVariant((short)4), COleVariant((short)1), COleVariant((short)0)); // wdParagraph
m_Sel.MoveDown(COleVariant((short)5), COleVariant((short)1), COleVariant((short)0)); // wdLine
m_Sel.TypeText("123456789");
m_Sel.MoveRight(COleVariant((short)1), COleVariant((short)1), COleVariant((short)0)); m_Sel.TypeText("李明");
m_Sel.MoveRight(COleVariant((short)1), COleVariant((short)1), COleVariant((short)0)); m_Sel.TypeText("25");
m_Sel.MoveRight(COleVariant((short)1), COleVariant((short)1), COleVariant((short)0)); m_Sel.TypeText("技術員");
m_Sel.MoveRight(COleVariant((short)1), COleVariant((short)1), COleVariant((short)0)); m_Sel.TypeText("本科");
m_Sel.MoveRight(COleVariant((short)1), COleVariant((short)1), COleVariant((short)0)); m_Sel.TypeText("上海市虹口區民主路315號");
// 另存新檔
_Document oActiveDoc = m_App.GetActiveDocument();
oActiveDoc.SaveAs(COleVariant("c:\\填寫後表格.doc"),
COleVariant((short)0), vFalse, COleVariant(""), vTrue,
COleVariant(""), vFalse, vFalse, vFalse, vFalse, vFalse);
m_Docs.ReleaseDispatch(); m_Sel.ReleaseDispatch();
m_App.Quit(vOpt, vOpt, vOpt); m_App.ReleaseDispatch();
EndWaitCursor();
MessageBox("Word 表格填寫完成!", "提示", MB_ICONEXCLAMATION);
}
#include "msword9.h" 必須置於 stdafx.h 之後,否則編譯錯誤。掌握型別程式庫匯入、巨集反推、Selection 物件操作,即可實現 Word 表格自動化填寫。同樣原理適用於 Word 所有自動化場景。