Het automatiseren van Microsoft Word Afdruk samenvoegen met Visual C++ en MFC

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 220911 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

In dit artikel wordt beschreven hoe maken en manipuleren een Microsoft Word-document met behulp van automatisering in Microsoft Visual C++ en Microsoft Foundation Classes (MFC).

Meer informatie

De breedte van dit artikel een Microsoft Knowledge Base-artikel met Beschrijving van het proces met behulp van Microsoft Visual Basic.Voor meer informatie over het automatiseren van Word vanuit Visual Basic, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
220607Het automatiseren van Microsoft Word voor de samen voeg bewerking uitvoeren vanuit Visual Basic

Automatiserings voorbeeld

  1. Volg de stappen 1 tot en met 12 in het volgende Microsoft Knowledge Base-artikel:
    178749Hoe een automatiserings project maken met MFC en een typebibliotheek
    OpmerkingKies het juiste typebibliotheek voor de versie van de in stap 9 Het woord dat u wilt automatiseren. Zie de sectie verwijzingen hieronder voor informatie over zoeken naar het juiste type bibliotheek.
  2. Voeg toe deopnemeninstructie voor het header-bestand dat is gemaakt boven ( msword8.h, msword9.h of msword.h) in AutoProjectDlg. cpp na het opnemen instructie voor stdafx.h. Een voorbeeld voor Word 97 is:
       #include "stdafx.h"
       #include "msword8.h"
    					
  3. Automatisering nummer toevoegen aan deCAutoProjectDlg::OnRunmethode zodat zoals hieronder wordt weer gegeven:
    void CAutoProjectDlg::OnRun()
    {
    	_Application oWord;
    	Documents oDocs;
    	_Document oDoc;
    	Selection oSelection;
    	Paragraphs oParagraphs;
    	Tables oTables;
    	Table oTable;
    	Range oRange;
    	Columns oColumns;
    	Column oColumn;
    	Rows oRows;
    	Row oRow;
    
    	Cells oCells;
    	Cell oCell; 
    	Shading oShading;
    	Hyperlinks oHyperlinks;
    	MailMerge oMailMerge;
    	MailMergeFields oMailMergeFields;
    	COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
    		        vtTrue((short)TRUE),
    				vtFalse((short)FALSE);
    	CString StrToAdd;
    
    	// Create an instance of Word
    	if (!oWord.CreateDispatch("Word.Application")) {
    		AfxMessageBox("Word failed to start!");
    	} else {
    	// Set the visible property
    	oWord.SetVisible(TRUE);
    	// Add a new document
    	oDocs = oWord.GetDocuments();
    	oDoc = oDocs.Add(vtOptional,vtOptional);
    
    	CreateMailMergeDataFile(&oWord,&oDoc);
    	// Add the address header
    
    	StrToAdd = "State University\r\nElectrical Engineering " \ 
    		       "Department";
    	oSelection = oWord.GetSelection();
    
    	oParagraphs = oSelection.GetParagraphs();
    	oParagraphs.SetAlignment(1);  // 1 = wdAlignParagraphCenter  
    	oSelection.TypeText(StrToAdd);
    
    	InsertLines(&oSelection,4);
    
    	oParagraphs.SetAlignment(0);  // 0 = wdAlignParagraphLeft
    	oMailMerge = oDoc.GetMailMerge();
    	oMailMergeFields = oMailMerge.GetFields();
    	oMailMergeFields.Add(oSelection.GetRange(),"FirstName");
    	oSelection.TypeText(" ");
    	oMailMergeFields.Add(oSelection.GetRange(),"LastName");
    	oSelection.TypeParagraph();
    	oMailMergeFields.Add(oSelection.GetRange(),"Address");
    	oSelection.TypeParagraph();
    	oMailMergeFields.Add(oSelection.GetRange(),"CityStateZip");
    
    	InsertLines(&oSelection,4);
    	// Set the paragraph alignment to Right justified
    	oParagraphs = oSelection.GetParagraphs();
    
    	oParagraphs.SetAlignment(2);  // 2 = wdAlignParagraphRight
    	// Insert the current date
    	oSelection.InsertDateTime(COleVariant("dddd, MMMM dd, yyyy"),\ 
    		 vtFalse,vtOptional);
    
    	InsertLines(&oSelection,2);
    
    	// Reset the justification to Justify
    
    	oParagraphs = oSelection.GetParagraphs();
    	oParagraphs.SetAlignment(3);  // 3 = wdAlignParagraphJustify
    
    	oSelection.TypeText("Dear ");
    	oMailMergeFields.Add(oSelection.GetRange(),"FirstName");
    	oSelection.TypeText(",");
    
    	InsertLines(&oSelection,2);
    
    	// Add the body of the message
    	StrToAdd = "Thank you for your recent request for next " \ 
    	       "semester's class schedule for the Electrical " \ 
    	       "Engineering Department.  Enclosed with this letter " \ 
    	       "is a booklet containing all the classes offered " \ 
    	       "next semester at State University.  Several new " \ 
    	       "classes will be offered in the Electrical " \ 
       	       "Engineering Department next semester.  These " \ 
    	       "classes are listed below.";
    	oSelection.TypeText(StrToAdd);
    
    	InsertLines(&oSelection,2);
    	
    	// Add a new table with 9 rows and 4 columns
    	oRange = oSelection.GetRange();
    	oTables = oDoc.GetTables();
    	oTable = oTables.Add(oRange,9,4);
    
    	// Set the width of each column
    	oColumns = oTable.GetColumns();
    	oColumn = oColumns.Item(1);
    	oColumn.SetWidth(51.0,0);  // 0 = wdAdjustNone
    	oColumn = oColumns.Item(2);
    	oColumn.SetWidth(198.0,0);  // 0 = wdAdjustNone
    	oColumn = oColumns.Item(3);
    	oColumn.SetWidth(100.0,0);  // 0 = wdAdjustNone
    	oColumn = oColumns.Item(4);
    	oColumn.SetWidth(111.0,0);  // 0 = wdAdjustNone
    
    	// Set the shading for row 1 to wdGray25
    	oRows = oTable.GetRows();
    	oRow = oRows.Item(1);
    	oCells = oRow.GetCells();
    	oShading = oCells.GetShading();
    	oShading.SetBackgroundPatternColorIndex(16); // 16 = wdGray25
    
    	// Turn on BOLD for the first row
    	oRange = oRow.GetRange();
    	oRange.SetBold(TRUE);
    
    	// Set the alignment for cell (1,1) to center
    	oCell = oTable.Cell(1,1);
    	oRange = oCell.GetRange();
    	oParagraphs = oRange.GetParagraphs();
    	oParagraphs.SetAlignment(1);  // 1 = wdAlignParagraphCenter
    
    	// Fill in the class schedule data
    	FillRow(&oTable,1,"Class Number","Class Name",\ 
    		"Class Time","Instructor");	
    	FillRow(&oTable,2, "EE220", "Introduction to Electronics II", \ 
    		"1:00-2:00 M,W,F", "Dr. Jensen");
    	FillRow(&oTable,3, "EE230", "Electromagnetic Field Theory I", \ 
    		"10:00-11:30 T,T", "Dr. Crump");
    	FillRow(&oTable,4, "EE300", "Feedback Control Systems", \ 
    		"9:00-10:00 M,W,F", "Dr. Murdy");
    	FillRow(&oTable,5, "EE325", "Advanced Digital Design", \ 
    		"9:00-10:30 T,T", "Dr. Alley");
    	FillRow(&oTable,6, "EE350", "Advanced Communication Systems", \ 
    		"9:00-10:30 T,T", "Dr. Taylor");
    	FillRow(&oTable,7, "EE400", "Advanced Microwave Theory", \ 
    		"1:00-2:30 T,T", "Dr. Lee");
    	FillRow(&oTable,8, "EE450", "Plasma Theory", \ 
    		"1:00-2:00 M,W,F", "Dr. Davis");
    	FillRow(&oTable,9, "EE500", "Principles of VLSI Design", \ 
    		"3:00-4:00 M,W,F", "Dr. Ellison");
    
    	// Go to the end of the document
    	oSelection.GoTo(COleVariant((short)3), // 3 = wdGoToLine
    	COleVariant((short)-1),vtOptional,vtOptional);  // -1 = wdGoToLast
    
    	InsertLines(&oSelection,2);
    
    	// Add closing text
    	StrToAdd = "For additional information regarding the " \ 
                 "Department of Electrical Engineering, " \ 
                 "you can visit our website at ";
    	oSelection.TypeText(StrToAdd);
    
    	// Add a hyperlink to the homepage
    	oHyperlinks = oSelection.GetHyperlinks();
    	oHyperlinks.Add(oSelection.GetRange(),\ 
    		COleVariant("http://www.ee.stateu.tld"),vtOptional);
    
    	// Finish adding closing text
    	StrToAdd = ".  Thank you for your interest in the classes " \ 
                 "offered in the Department of Electrical " \ 
                 "Engineering.  If you have any other questions, " \ 
                 "please feel free to give us a call at (999) " \ 
                 "555-1212.\r\n\r\n" \ 
                 "Sincerely,\r\n\r\n" \ 
                 "Kathryn M. Hinsch\r\n" \ 
                 "Department of Electrical Engineering\r\n";
    	oSelection.TypeText(StrToAdd);
    
    	// Perform mail merge
    	oMailMerge.SetDestination(0); // 0 = wdSendToNewDocument
    	oMailMerge.Execute(vtFalse);
    
    	// Close the original form document
    	oDoc.SetSaved(TRUE);
    	oDoc.Close(vtFalse,vtOptional,vtOptional);
      
    	}
    }
    					
  4. Voeg de volgende code boven in de code die is opgegeven in stap 3:
    void InsertLines(Selection *pSelection, int NumLines)
    {
    	int iCount;
    
    	// Insert NumLines blank lines
    	for (iCount = 1; iCount <= NumLines; iCount++)
    		pSelection->TypeParagraph();
    }
    
    void FillRow(Table *pTable,int Row, CString Text1, 
    			 CString Text2, CString Text3, CString Text4)
    {
    	Cell oCell;
    	Range oRange;
    
    	// Insert data into the specific cell
    	oCell = pTable->Cell(Row,1);
    	oRange = oCell.GetRange();
    	oRange.InsertAfter(Text1);
    	oCell = pTable->Cell(Row,2);
    	oRange = oCell.GetRange();
    	oRange.InsertAfter(Text2);
    	oCell = pTable->Cell(Row,3);
    	oRange = oCell.GetRange();
    	oRange.InsertAfter(Text3);
    	oCell = pTable->Cell(Row,4);
    	oRange = oCell.GetRange();
    	oRange.InsertAfter(Text4);
    
    }
    
    void CreateMailMergeDataFile(_Application *pApp,_Document *pDoc)
    {
      _Document oDataDoc;
      MailMerge oMailMerge;
      Documents oDocs;
      Tables oTables;
      Table oTable;
      Rows oRows;
      int iCount;
      COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
    				vtFalse((short)FALSE);
      
      // Create a data source at C:\DataDoc.doc containing the field data
      oMailMerge = pDoc->GetMailMerge();
      oMailMerge.CreateDataSource(COleVariant("C:\\DataDoc.doc"), \ 
            vtOptional,vtOptional, \ 
            COleVariant("FirstName, LastName, Address,CityStateZip"),\ 
            vtOptional, vtOptional,vtOptional,vtOptional,vtOptional);
      // Open the file to insert data
      oDocs = pApp->GetDocuments();
      oDataDoc = oDocs.Open(COleVariant("C:\\DataDoc.doc"), \ 
           vtOptional,vtOptional,vtOptional,vtOptional,\ 
           vtOptional,vtOptional,vtOptional,vtOptional,\ 
           vtOptional);
      oTables = oDataDoc.GetTables();
      oTable = oTables.Item(1);
      oRows = oTable.GetRows();
      for (iCount=1; iCount<=2; iCount++)  
        oRows.Add(vtOptional);
    
      // Fill in the data
      FillRow(&oTable, 2, "Steve", "DeBroux", \ 
            "4567 Main Street", "Buffalo, NY  98052");
      FillRow(&oTable, 3, "Jan", "Miksovsky", \ 
            "1234 5th Street", "Charlotte, NC  98765");
      FillRow(&oTable, 4, "Brian", "Valentine", \ 
            "12348 78th Street  Apt. 214", "Lubbock, TX  25874");
      // Save and close the file
      oDataDoc.Save();
      oDataDoc.Close(vtFalse,vtOptional,vtOptional);
    }
    					
  5. Compileren en uitvoeren van het programma. Klik op deUitvoerenknop, en Microsoft Word moet beginnen en een voorbeeld brief worden weer gegeven. Houd er rekening mee dat sommige methoden met Word 2000 en Word 2002 hebt gewijzigd. Zie de sectie "Referenties" voor meer informatie over deze wijzigingen.

Referenties

Notities voor het automatiseren van Microsoft Word 2000 en Microsoft Word 2002

Sommige methoden en eigenschappen hebt voor Microsoft Word 2000 gewijzigd en Microsoft Word 2002.Voor meer informatie over het gebruik van de voorbeeldcode in dit artikel in combinatie met de typebibliotheek van Word, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
224925Type bibliotheken voor Office kunnen wijzigen met de nieuwe release
Voor meer informatie over Office Auto mat ion, gaat u naar de Site Office Development van Microsoft op:
http://support.Microsoft.com/ofd

Eigenschappen

Artikel ID: 220911 - Laatste beoordeling: maandag 28 februari 2011 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Office Word 2007
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
Trefwoorden: 
kbautomation kbhowto kbmt KB220911 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:220911

Geef ons feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com