摘要
這篇文章講述了如何在Visual C++5.0或6.0中自動打開並打印Microsoft Word文檔。
更多信息
你可以將文章中的代碼拷貝到自己的MFC .cpp文件中的 事件定義消息處理函數中去。然而,這些代碼主要是為了闡述如何處理在Msword8類型庫中定 義的IDispatch接口與成員函數。讀懂並理解了這些代碼你就可以修改這些例子,或寫些打開 並打印Microsoft Word文檔的程序。
因為Word2000中的一些方法與屬性有些改變,更 多信息請閱讀:Office類型庫中新的改變
創建工程步驟
1. 在Microsoft Word 中,創建新文檔,添加一些文字並保存為Test.doc。關閉文檔並退出Word。
2. 根據 下面知識庫中文章的1-12步提供的方法, 我們使用MSWord8.olb類型庫中定義的IDispatch接 口及其成員函數來創建示例項目。
如何使用MFC和類型庫創建自動化項目
3. 在AutoProjectDlg.cpp的頂部添加如下行:
#include "msword8.h" // msword9.h for Word 2000, msword.h for Word 2002
4. 在AutoProjectDlg.cpp 文件的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); //顯示程序窗口.
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 wdDocumentDirection LeftToRight
covOptional // 無編碼對話框
) // Close Open parameters
); // Close AttachDispatch(…)
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.
covOptional, // Pages.
covOptional, // PageType.
covOptional, // PrintToFile.
covOptional, // Collate.
covOptional, // ActivePrinterMacGX.
covOptional // ManualDuplexPrint.
covOptional, // PrintZoomColumn New with Word 2002
covOptional, // PrintZoomRow ditto
covOptional, // PrintZoomPaperWidth ditto
covOptional); // PrintZoomPaperHeight ditto
// 如果你希望打印前預覽文檔,你可以使用PrintPreview代替PrintOut// testDoc[i].PrintPreview.
objWord.Quit(covFalse, // SaveChanges.
covTrue, // OriginalFormat.
covFalse // RouteDocument.
);
5. 你可能需要修改 CAutoProjectDlg::OnRun中的代碼指明Test.doc文檔的所在路徑。參考如下代碼:
testDoc.AttachDispatch(docs.Open(
COleVariant("C:\\My Docs\\Test.doc",VT_BSTR)...
參考
關 於自動化Office的更多信息,可以參考如下文章:
1) 如何找到並使用Office對象模 型文檔
2) 微軟關於Office自動化的Web站點