現在オフラインです。再接続するためにインターネットの接続を待っています

Visual C++ および MFC を使用して Microsoft Word の差し込み印刷をオートメーションで実行する方法

Office 2003 のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Office 2003 のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

概要
この資料では、オートメーションを使用して Microsoft Visual C++ および MFC (Microsoft Foundation Class) から Microsoft Word 文書の作成および操作を行う方法について説明します。
詳細
この資料と平行して、同様の処理を Microsoft Visual Basic を使用して説明している「サポート技術情報」 (Microsoft Knowledge Base) があります。Visual Basic を使用した Word のオートメーションの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
220607 Visual Basic から Microsoft Word の差し込み印刷をオートメーションで実行する方法

オートメーション サンプル コードのビルド

  1. 次に示す「サポート技術情報」 (Microsoft Knowledge Base) の手順 1. ~ 12. を実行します。
    178749 MFC およびタイプ ライブラリを使用してオートメーション プロジェクトを作成する方法
    : 手順 9. では、自動化する Word のバージョンに対応する適切なタイプ ライブラリを選択します。適切なタイプ ライブラリの特定方法については、「関連情報」を参照してください。
  2. 上記で作成した、AutoProjectDlg.cpp のヘッダー ファイルの include ステートメント (msword8.h、msword9.h または msword.h) を stdafx.h の include ステートメントの後に追加します。たとえば、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. プログラムをコンパイルし、実行します。[Run] ボタンをクリックすると Microsoft Word が起動し、サンプルの文字が表示されます。Word 2000 および Word 2002 では一部のメソッドが変更されています。これらの変更については「関連情報」を参照してください。
関連情報

Microsoft Word 2000 および Microsoft Word 2002 の自動化に関する注意事項

Microsoft Word 2000 および Microsoft Word 2002 では、一部のメソッドおよびプロパティが変更されています。この資料に記載されているサンプル コードの使用方法および Word タイプ ライブラリの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
224925 新しいリリースで変更される可能性のある Office のタイプ ライブラリ
Office オートメーションの詳細については、以下の Microsoft Office Development サポート サイトを参照してください。
WD2003 WD2007
プロパティ

文書番号:220911 - 最終更新日: 01/23/2008 07:38:00 - リビジョン: 3.1

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, Microsoft Word 2000, Microsoft Word 97 Standard Edition

  • kbhowto kbautomation KB220911
フィードバック
r="var m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">