首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++Builder 將 Memo 文本寫入 Word 文檔:OLE 自動化完整實現

     編輯:程式設計綜合問答

核心代碼(按鈕點擊事件)

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Variant vWordApp;
    try {
        // 1. 創建/連接 Word 應用程序
        vWordApp = Variant::CreateObject("Word.Application");
    } catch (...) {
        MessageBox(0, L"啟動 Word 失敗,請確認已安裝 Microsoft Word。", L"提示", MB_OK | MB_ICONERROR);
        return;
    }

    // 2. 顯示 Word 窗口(調試時可見,生產可設 false 後台生成)
    vWordApp.OlePropertySet("Visible", true);

    // 3. 新建文檔
    Variant vDoc = vWordApp.OlePropertyGet("Documents").OleFunction("Add");

    // 4. 獲取 Selection 對象(插入點)
    Variant vSel = vWordApp.OlePropertyGet("Selection");

    // 5. 寫入 Memo 內容
    String str = Memo1->Text;
    vSel.OleProcedure("TypeText", WideString(str));
    vSel.OleProcedure("TypeParagraph");  // 換段

    // 6. 可選:移動到文末繼續寫入
    vWordApp.OlePropertyGet("Selection").OleProcedure("EndKey", 6);  // wdStory = 6
}

關鍵點解析

步驟COM 接口說明
創建實例CreateObject("Word.Application")啟動新 Word 進程,或連接現有實例(GetActiveObject)
顯示/隱藏Visible 屬性true 可見,false 後台生成較快
新建文檔Documents.Add()返回 _Document 對象
插入文本Selection.TypeText()需 WideString 避免中文亂碼
換行/換段TypeParagraph()比 TypeText("\r\n") 語義更準確

進階:插入表格、設置格式、保存路徑


// 插入 4行5列 表格
int nRow = 4, nCol = 5;
vDoc.OlePropertyGet("Tables").OleProcedure("Add", 
    vSel.OlePropertyGet("Range"), nRow, nCol, 1, 0);

// 設置字體
vSel.OlePropertyGet("Font").OlePropertySet("Name", "微軟雅黑");
vSel.OlePropertyGet("Font").OlePropertySet("Size", 12);
vSel.OlePropertyGet("Font").OlePropertySet("Bold", true);

// 另存為指定路徑
vDoc.OleProcedure("SaveAs", WideString("D:\\Export.docx"));
vDoc.OleProcedure("Close", false);
vWordApp.OleProcedure("Quit");

常見問題排查

  1. 「類未註冊」/「無法創建對象」:未安裝 Word 或版本不匹配(需 2007+ 支持 .docx)
  2. 中文亂碼:所有字符串傳遞均用 WideString,確保 Unicode 編碼
  3. 殘留 Word 進程:異常分支中調用 vWordApp.OleProcedure("Quit"),並在 finally 釋放 Variant
  4. 權限問題:目標保存目錄需當前用戶寫入權限

替代方案對比

方案優點缺點適用場景
OLE 自動化 (本文)完美兼容 Word 排版、支持複雜格式需安裝 Word、啟動慢、佔用高桌面端、格式要求高
LibreOffice UNO API免費、跨平台、無需 Office需安裝 LibreOffice、格式兼容稍弱服務端、Linux 環境
DocX / OpenXML SDK無依賴、純代碼生成、高性能複雜排版開發難度大批量報表、服務端
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved