Microsoft KB Archive/178784

= How to use automation to open and to print a Word document =

Article ID: 178784

Article Last Modified on 1/22/2007

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 5.0 Standard Edition

 Microsoft Visual C++ 6.0 Service Pack 5  Microsoft Office XP Developer Edition Microsoft Office 2000 Developer Edition Microsoft Word 2002 Standard Edition</li> Microsoft Word 2000 Standard Edition</li> Microsoft Word 97 Standard Edition</li></ul>

-

<div class="notice_section">

This article was previously published under Q178784

<div class="summary_section">

SUMMARY
This article discusses how to use version 4.2 of the Microsoft Foundation Class (MFC) library installed with Microsoft Visual C++ versions 5.0 and 6.0 to automate opening and printing a Microsoft Word Document.

<div class="moreinformation_section">

MORE INFORMATION
You can copy the code in this article to the message handler function of an event defined in an MFC .cpp file. However, the purpose of the code is to illustrate the process of using the IDispatch interfaces and member functions defined in the Msword8 type library. The primary benefit comes from reading and understanding the code so that you can modify the example, or write code from scratch to automate opening and printing a Microsoft Word 97 document.

Notes for Automating Microsoft Word 2000 and later:

Some methods and properties have changed for Microsoft Word 2000 and later. For additional information about using the sample code described in this article with the Microsoft Word 2000 and later type library, please see the following article in the Microsoft Knowledge Base:

224925 INFO: Type Libraries for Office May Change with New Release

Steps to Create the Project
<ol> In Microsoft Word, create a new document, add some text to the document, and save it as Test.doc. Close the document and exit Word.</li> Follow steps 1 through 12 in the following Microsoft Knowledge Base article to create a sample project that uses the IDispatch interfaces and member functions defined in the MSWord8.olb type library:

178749 How To Create an Automation Project Using MFC and a Type Library

</li>  At the top of the AutoProjectDlg.cpp, add the following line: #include "msword8.h" // msword9.h for Word 2000, msword.h for Word 2002 </li>  Add the following code to CAutoProjectDlg::OnRun in the AutoProjectDLG.cpp file.

Sample Code
_Application objWord;

// Convenient values declared as ColeVariants. COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

// Get the IDispatch pointer and attach it to the objWord object. if (!objWord.CreateDispatch("Word.Application")) {        AfxMessageBox("Couldn't get Word object."); return; }

objWord.SetVisible(TRUE); //This shows the application.

Documents docs(objWord.GetDocuments); _Document testDoc;

testDoc.AttachDispatch(docs.Open( COleVariant("C:\\Test.doc",VT_BSTR), covFalse,   // Confirm Conversion. covFalse,   // ReadOnly. covFalse,   // AddToRecentFiles. covOptional, // PasswordDocument. covOptional, // PasswordTemplate. covFalse,   // Revert. covOptional, // WritePasswordDocument. covOptional, // WritePasswordTemplate. covOptional) // Format. // Last argument for Word 97                               covOptional, // Encoding // New for Word 2000/2002                                covTrue,     // Visible                                covOptional, // OpenConflictDocument                                covOptional, // OpenAndRepair                                (long)0,     // DocumentDirection wdDocumentDirection LeftToRight                                covOptional  // NoEncodingDialog                                )  // 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

// If you wish to Print Preview the document rather than print it, // you can use the PrintPreview member function instead of the // PrintOut member function: //   testDoc[i].PrintPreview.

objWord.Quit(covFalse, // SaveChanges.                   covTrue,   // OriginalFormat.                   covFalse   // RouteDocument.                   ); </li>  You may need to modify the code in CAutoProjectDlg::OnRun to indicate the correct path for your document Test.doc. The document is referenced in the following line: testDoc.AttachDispatch(docs.Open( COleVariant("C:\\My Docs\\Test.doc",VT_BSTR)... </li></ol>

<div class="references_section">