本文詳細說明如何在 Visual C++ 5.0 或 6.0 中,透過自動化技術開啟並列印 Microsoft Word 文件。文中提供的程式碼可直接複製至 MFC 專案的事件處理函數中,核心在於闡述如何操作 MSWord 8 型別程式庫中定義的 IDispatch 介面與成員函數。理解這些代碼後,您即可修改範例或自行撰寫開啟、列印 Word 文件的程式。
注意:Word 2000 部分方法與屬性有所變更,詳細資訊請參閱「Office 型別程式庫的新變更」。
Test.doc。關閉文件並退出 Word。MSWord8.olb 型別程式庫中定義的 IDispatch 介面及其成員函數建立範例專案。AutoProjectDlg.cpp 頂部加入標頭檔:#include "msword8.h" // Word 2000 用 msword9.h,Word 2002 用 msword.h
CAutoProjectDlg::OnRun() 中加入以下自動化代碼:_Application objWord;
// 使用 COleVariant 定義變數較方便
COleVariant covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
// 取得 IDispatch 指標並附加到 objWord 物件
if (!objWord.CreateDispatch("Word.Application")) {
AfxMessageBox("Couldn't get Word object.");
return;
}
objWord.SetVisible(TRUE); // 顯示 Word 視窗
Documents docs(objWord.GetDocuments());
_Document testDoc;
testDoc.AttachDispatch(docs.Open(
COleVariant("C:\\Test.doc", VT_BSTR), // 檔案路徑
covFalse, // 確認轉換
covFalse, // 唯讀
covFalse, // 加入最近使用清單
covOptional, // 文件密碼
covOptional, // 模板密碼
covFalse, // 還原原狀
covOptional, // 寫入密碼
covOptional, // 寫入模板密碼
covOptional, // 格式 (Word 97 以前)
covOptional, // 編碼 (Word 2000/2002)
covTrue, // 可見
covOptional, // OpenConflictDocument
covOptional, // 開啟並修復
(long)0, // DocumentDirection wdDocumentDirectionLeftToRight
covOptional // 無編碼對話框
));
AfxMessageBox("Now printing 2 copies on the active printer");
testDoc.PrintOut(
covFalse, // Background
covOptional, // Append
covOptional, // Range
covOptional, // OutputFileName
covOptional, // From
covOptional, // To
covOptional, // Item
COleVariant((long)2), // Copies: 列印 2 份
covOptional, // Pages
covOptional, // PageType
covOptional, // PrintToFile
covOptional, // Collate
covOptional, // ActivePrinterMacGX
covOptional, // ManualDuplexPrint
covOptional, // PrintZoomColumn (Word 2002 新增)
covOptional, // PrintZoomRow
covOptional, // PrintZoomPaperWidth
covOptional // PrintZoomPaperHeight
);
// 若需列印預覽,可改用 PrintPreview
// testDoc.PrintPreview();
objWord.Quit(
covFalse, // SaveChanges
covTrue, // OriginalFormat
covFalse // RouteDocument
);
CAutoProjectDlg::OnRun 中的路徑指向實際 Test.doc 位置,例如:testDoc.AttachDispatch(docs.Open(
COleVariant("C:\\My Docs\\Test.doc", VT_BSTR), ...