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

VC++ 自動化 Word 填寫表格完整教學:從巨集錄製到程式碼轉換

     編輯:關於VC++

前言

實務常需自動生成 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。

關鍵技巧:巨集錄製反推參數

  1. Word → 工具 → 巨集 → 錄製新巨集,執行欲自動化的操作 (如移動游標、輸入文字、跨儲存格)。
  2. 停止錄製,檢視 VBA 代碼,記錄物件、方法、參數值。
  3. 參數常數值 (如 wdParagraph) 用 VBA 立即視窗 ? wdParagraph 查得數值。
  4. 對應 VC++ VARIANT 型別:字串→VT_BSTR、布林→VT_BOOL、整數→VT_I4。

Word 表格填寫 VBA 巨集代碼

完整表格填寫程式碼

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);
}

注意事項

  • 需預先安裝 Microsoft Word 2000。
  • #include "msword9.h" 必須置於 stdafx.h 之後,否則編譯錯誤。
  • 巨集錄製是獲取正確參數的最快捷途徑,強烈建議採用。

結語

掌握型別程式庫匯入、巨集反推、Selection 物件操作,即可實現 Word 表格自動化填寫。同樣原理適用於 Word 所有自動化場景。

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