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

C++ 程式透過 VB Script 自動化產生 Word 文件

     編輯:VC 教學

前言

直接使用 C++ 呼叫 Word COM 介面(Automation)參數繁多、程式碼冗長且難維護。本文採用「產生 VB Script 字串 → 執行 Script」的間接策略:利用 Word 內建巨集錄製功能取得 VBA 代碼,稍加修改轉為 VBScript,再由 C++ 組裝字串並呼叫 RunScript 執行。此法參數少、可讀性高、易於維護與擴充。

核心輔助函式介面

// 建立新文件
std::string create_new();
// 儲存文件
std::string close_save(const char* filename);
// 游標下移
std::string move_down();
// 插入段落斷
std::string put_Paragraph();
// 加入標題(可指定樣式、對齊)
std::string put_title(const char* title, const char* title_type="標題 1", int align=ALIGN_LEFT);
// 便利函式:標題 1/2/3
std::string put_title1(const char* title, int align=ALIGN_CENTER);
std::string put_title2(const char* title, int align=ALIGN_LEFT);
std::string put_title3(const char* title, int align=ALIGN_LEFT);
// 紅色警告訊息
std::string add_warning_msg(const char* msg="無資料");
// 表格處理
std::string add_grid_ln(const char* line);   // 單列(內部用)
std::string put_grid(const char* content);   // 整張表格
// 執行腳本
extern "C" void RunScript(const char* script_str);

完整範例:產生含標題、表格、警告的 Word 文件

int main(int argc, char* argv[])
{
    std::ostringstream ostr;

    // 1. 建立新文件
    ostr << create_new();

    // 2. 加入主標題(置中)
    ostr << put_title1("產品測試報告");

    // 3. 加入次標題
    ostr << put_title2("測試環境");

    // 4. 插入段落文字
    ostr << put_Paragraph();
    ostr << "作業系統: Windows 10 Pro\n";
    ostr << "編譯器: Visual Studio 2022\n";

    // 5. 從文字檔讀取表格資料並插入
    std::string str_buffer;
    read_file_as_grid_content("tab.txt", str_buffer); // 需自行實作
    ostr << put_grid(str_buffer.c_str());

    // 6. 加入警告訊息
    ostr << add_warning_msg("部分測試項目未通過,請複查。");

    // 7. 儲存並關閉
    ostr << close_save("c:\\test.doc");

    // 8. 執行腳本(需安裝 Word XP 以上)
    RunScript(ostr.str().c_str());

    return 0;
}

運作原理圖解

C++ 程式
   │
   ├─ 組裝 VBScript 字串(ostringstream)
   │       │
   │       ├─ create_new()          → "Set objWord = CreateObject(\"Word.Application\") ..."
   │       ├─ put_title1(...)       → "objWord.Selection.Style = \"標題 1\" ..."
   │       ├─ put_grid(...)         → "objWord.ActiveDocument.Tables.Add ..."
   │       └─ close_save("c:\\test.doc") → "objDoc.SaveAs \"c:\\test.doc\" ..."
   │
   └─ RunScript(script_str)  →  呼叫 Windows Script Host (wscript/cscript) 執行
           │
           ▼
      Word 自動化執行腳本內容
           │
           ▼
      產生 c:\test.doc

關鍵優勢分析

傳統 C++ AutomationVB Script 間接法
需處理 VARIANT、BSTR、IDispatch 等複雜型別純字串操作,型別簡單
參數順序、選擇性參數易出錯VBScript 可省略選擇性參數
除錯困難,錯誤訊息晦澀可先輸出 .vbs 檔雙擊測試
程式碼冗長,維護成本高模組化函式,邏輯清晰
難以利用 Word 巨集錄製結果直接參考/修改巨集代碼

實作細節提醒

  • RunScript 內部通常呼叫 WScript.Shell 的 Run 方法執行 cscript.exe //nologo //E:vbscript 或寫入暫存 .vbs 檔再執行。
  • Word 必須安裝於執行機器上(至少 Word XP),且需允許巨集執行(信任中心設定)。
  • 表格資料格式建議採用 CSV 或 Tab 分隔,read_file_as_grid_content 需自行解析組裝為 VBScript 的 Tables.Add 參數字串。
  • 中文內容需確保 VBScript 檔案編碼為 UTF-8 with BOM 或 ANSI (CP950/CP936),否則 Word 開啟時會亂碼。
  • 長時間運行的腳本建議加入 objWord.Visible = True 方便監控,正式部署再設為 False。

擴充應用建議

  • 封裝為 CWordReport 類別,提供 AddParagraph、AddTable、InsertImage 等高階介面。
  • 支援多文件併發:每個執行緒產生獨立腳本與暫存檔,避免衝突。
  • 結合資料庫查詢,動態產生報表內容。
  • 加入錯誤處理:腳本中使用 On Error Resume Next 並記錄錯誤至日誌檔。

此「腳本代理」模式不僅適用於 Word,同樣可套用於 Excel、PowerPoint、Outlook 等 Office 套件自動化,是 C++ 開發者快速整合 Office 功能的實用利器。

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