Microsoft Office 全系列提供 OLE Automation 介面,讓 VC++ 可呼叫 Word 列印、資料填入、郵件發送、表格生成、圖表繪製、報表輸出、文件格式轉換、簡繁轉換、拼音/筆畫排序等所有 Word 功能。本文循序漸進引導您掌握核心技術。
Word 物件模型呈樹狀結構,理解層次才能正確操作:
Application
├─ Documents (所有文件集合)
│ └─ Document (單一文件)
├─ Templates (範本集合)
│ └─ Template
├─ Windows (視窗集合)
│ └─ Window
│ ├─ Selection (選取範圍)
│ └─ View
└─ Selection (編輯焦點)
├─ Font
├─ Style
└─ Range
例如 VBA Application.ActiveDocument.SaveAs "c:\abc.doc" 對應操作鏈:Application → ActiveDocument → SaveAs。
Ctrl+W 開啟 ClassWizard → Add Class → From a type library。C:\Program Files\Microsoft Office\Office\MSWORD9.OLBMSWORD.OLB (依版本不同)_Application, _Document, Documents, Selection 等),或全選。msword9.h/.cpp 等包裝類別。AfxOleInit() 於 InitInstance,或局部 CoInitialize(NULL)/CoUninitialize()。#include <atlbase.h> (方便 CComVariant) 並 #include "msword9.h"。Word 巨集錄製產生的 VBA 代碼可直接對應 VC++ 參數:
// VBA 巨集
ActiveDocument.SaveAs FileName:="Hello.doc", FileFormat:=wdFormatDocument, _
LockComments:=False, Password:="", AddToRecentFiles:=True, ...
// VC++ 對應原型
void _Document::SaveAs(VARIANT* FileName, VARIANT* FileFormat, VARIANT* LockComments,
VARIANT* Password, VARIANT* AddToRecentFiles, VARIANT* WritePassword,
VARIANT* ReadOnlyRecommended, VARIANT* EmbedTrueTypeFonts,
VARIANT* SaveNativePictureFormat, VARIANT* SaveFormsData, VARIANT* SaveAsAOCELetter)
FileName → VT_BSTRLockComments → VT_BOOLFileFormat := wdFormatDocument → 常數值,用 MsgBox wdFormatDocument 查得為 VT_I4。VARIANT 基礎用法。CComVariant 簡化變數處理。每個步驟皆有詳細註解,原始碼請下載附件。
HRESULT 判斷與例外處理。Microsoft Office Development with Visual Studio
掌握物件模型、型別程式庫匯入、VARIANT 參數對應、巨集反推技巧,即可自由自動化控制 Word 及全 Office 套件。