首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

Visual C++ 實現自動化客戶端操控 Word 完整教學

     編輯:VC 教學

自動化技術概述

自動化建立在 COM/DCOM 之上,允許一個應用程式(客戶端)操控另一個應用程式(伺服器端)公開的物件、方法與屬性。Microsoft Office 套件皆為典型自動化伺服器。依部署位置分為:

  • 本地自動化: 客戶端與伺服器端在同一台電腦
  • 遠端自動化: 跨網路不同電腦,基於 DCOM

核心介面為 IDispatch,提供晚期繫結能力,支援多種語言(含無指標語言如 VB)。ActiveX 控制項本質上是進程內的小型自動化伺服器(.OCX),除屬性/方法外還支援事件。

關鍵資料類型:VARIANT 與 MFC 封裝

自動化跨語言傳遞資料需統一格式,VARIANT 結構包含「型別標籤」與「資料值」兩部分。MFC 提供封裝類別:

  • COleVariant:封裝 VARIANT,通用於所有變體參數
  • COleDateTime、COleCurrency:專門處理日期/貨幣

實戰:操控 Word 2000 開啟文件並複製內容

準備工作

  1. 建立單文件 MFC 應用程式,視圖基類選 CEditView
  2. 在 Word 中錄製巨集了解 VBA 物件模型(Documents、Selection 等)
  3. 使用類嚮導匯入 Word 類型庫:msword9.olb(通常在 Office 安裝目錄),選擇 _Application、_Documents、Selection 產生對應 C++ 類別
  4. StdAfx.h 加入 #include <afxdisp.h>
  5. InitInstance 初始化 COM:CoInitialize(NULL)

核心程式碼實作

void CMyView::OnAutoDisplayWord() {
    // 1. 選擇 Word 文件
    CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
        _T("Word Files (*.doc)|*.doc||"));
    if (dlg.DoModal() != IDOK) return;
    CString strPath = dlg.GetPathName();

    // 2. 建立 Word Application 物件
    _Application app;
    if (!app.CreateDispatch(_T("Word.Application"))) {
        AfxMessageBox(_T("無法啟動 Word"));
        return;
    }
    app.put_Visible(TRUE);  // 可見模式方便除錯

    // 3. 取得 Documents 集合並開啟文件
    Documents docs;
    docs.AttachDispatch(app.GetDocuments());

    COleVariant varFile(strPath), varFalse((short)0), varTrue((short)1), varNull;
    docs.Open(varFile, varFalse, varFalse, varFalse, varNull, varNull,
              varFalse, varNull, varNull, varTrue, varTrue, varTrue);

    // 4. 取得 Selection 物件,全選並複製
    Selection sel;
    sel.AttachDispatch(app.GetSelection());
    sel.WholeStory();
    sel.Copy();

    // 5. 貼上至 CEditView
    GetEditCtrl().Paste();

    // 6. 清理
    docs.ReleaseDispatch();
    sel.ReleaseDispatch();
    app.Quit();  // 或視需求保持開啟
}

關鍵點解析

  • COleDispatchDriver::CreateDispatch:建立伺服器物件並取得 IDispatch
  • AttachDispatch:將 MFC 包裝類別與介面指標關聯
  • ReleaseDispatch:釋放關聯,避免資源洩漏
  • 參數皆用 COleVariant 包裝,對應 VBA 的 Variant

擴充應用建議

掌握此模式後,可輕鬆擴充至 Excel(Workbook、Worksheet、Range)、PowerPoint(Presentation、Slide)等 Office 組件,實現報表自動產生、圖表匯出、簡報建立等企業級自動化需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved