您目前已離線,請等候您的網際網路重新連線

如何自動化 Microsoft Word 來執行合併列印使用 Visual C++ 和 MFC

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:220911
結論
本文將告訴您,如何建立和管理使用從 Microsoft Visual C++ 和 Microsoft 基礎類別 (MFC) 自動化的 Microsoft Word 文件。
其他相關資訊
這份文件與並行描述相同的處理程序使用 Microsoft Visual Basic 的微軟知識庫文件。如 Visual Basic 的 Word 自動化的更多有關,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
220607如何自動化 Microsoft Word 來從 Visual Basic 執行合併列印

建置自動化範例

  1. 請遵循步驟 1 到 12 下列 「 Microsoft 知識庫 」 文件中:
    178749如何建立使用 MFC 和型別程式庫的自動化專案
    附註在步驟 9,選擇正確的型別程式庫版本的 Word 會自動執行。正在尋找有關,請參閱參考一節下方,資訊將正確型別程式庫。
  2. 之後包含陳述式的 stdafx.h AutoProjectDlg.cpp 中加入 (msword8.h、 msword9.h 或 msword.h) 上面建立標頭檔 包含 陳述式。Word 97 的範例是:
       #include "stdafx.h"   #include "msword8.h"					
  3. 將自動化程式碼加入至 CAutoProjectDlg::OnRun 方法,使其出現如下所示:
    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. 將下列程式碼的上方插入給定的程式碼中在步驟 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. 編譯並執行您的程式。按一下 [執行] 按鈕,Microsoft Word 應該開始和顯示範例字母。請注意某些方法已經變更與 Word 2000 和 Word 2002。如需有關這些變更的詳細資訊,請參閱 < 參考 > 一節。
参考

自動化 Microsoft Word 2000 和 Microsoft Word 2002 的附註

某些方法和屬性已經變更 Microsoft Word 2000 和 Microsoft Word 2002 中。如需有關如何使用本文搭配 Word 型別程式庫中的範例程式碼的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
224925Office 的型別程式庫可能會因為新發行的版本變更
如需有關 Office 自動化的詳細資訊,請造訪 Microsoft Office 程式開發支援網站,在:
wd2003 wd2007

警告:本文為自動翻譯

內容

文章識別碼:220911 - 最後檢閱時間:05/14/2007 18:18:49 - 修訂: 3.2

Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 6.0 Enterprise Edition, Microsoft Visual C++ 5.0 Professional Edition, Microsoft Visual C++ 6.0 Professional Edition, Microsoft Visual C++, 32-bit Learning Edition 6.0, Microsoft Office Word 2007, Microsoft Office Word 2003, Microsoft Word 2002 Standard Edition, Microsoft Word 2000 Standard Edition, Microsoft Word 97 Standard Edition

  • kbmt kbautomation kbhowto KB220911 KbMtzh
意見反應