HOWTO: Visual C# .NET에서 편지 병합을 수행하기 위해 Microsoft Word 자동화

기술 자료 번역 기술 자료 번역
기술 자료: 301659 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR301659
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 Visual C# .NET을 사용하여 Word에서 편지 병합 문서를 만드는 작업을 자동화하는 방법을 보여줍니다.

추가 정보

자동화는 Visual C# .NET 같은 언어로 작성된 응용 프로그램이 다른 응용 프로그램을 프로그래밍 방식으로 제어할 수 있게 해주는 프로세스입니다. Word의 자동화를 통해 새 문서 만들기, 문서에 텍스트 추가 및 문서 서식화 같은 작업을 수행할 수 있습니다. Word와 기타 Microsoft Office 응용 프로그램에서는 사용자 인터페이스를 통해 수동으로 수행할 수 있는 작업은 모두 자동화를 사용하여 프로그래밍 방식으로 수행할 수 있습니다.

Word에서는 이러한 프로그래밍 방식 기능을 개체 모델을 통해 제공합니다. 개체 모델은 Word의 논리 구성 요소와 같은 역할을 하는 클래스와 메서드의 모음을 말합니다. 예를 들어 응용 프로그램 개체, 문서 개체 및 단락 개체가 있다면 이들은 각각 Word의 해당 요소가 가지는 기능을 포함하고 있습니다. Visual C# .NET에서 개체 모델에 액세스하려면 형식 라이브러리에 대한 프로젝트 참조를 설정하면 됩니다.

이 문서에서는 Word 형식 라이브러리에 대한 Visual C# .NET의 적절한 프로젝트 참조를 설정하는 방법을 보여주고 Word를 자동화하기 위한 예제 코드를 제공합니다.

자동화 예제 빌드

  1. Microsoft Visual Studio .NET을 시작합니다. 파일 메뉴에서 새로 만들기를 누른 다음 프로젝트를 누릅니다. Visual C# 프로젝트 형식에서 Windows 응용 프로그램을 선택합니다. 기본적으로 Form1이 생성됩니다.
  2. Microsoft Word 개체 라이브러리에 대한 참조를 추가합니다. 이렇게 하려면 다음 단계를 수행합니다.
    1. 프로젝트 메뉴에서 참조 추가를 누릅니다.
    2. COM 탭에서 Microsoft Word 개체 라이브러리를 찾아 선택을 누릅니다.

      참고: Word 개체 라이브러리에는 버전 번호가 포함되어 있는데, Word 2000의 버전은 9.0이고 Word 2002의 버전은 10.0입니다.
    3. 참조 추가 대화 상자에서 확인을 눌러 선택 내용을 수락합니다. 선택한 라이브러리에 대해 래퍼를 만들 것인지 묻는 메시지가 나타나면 를 누릅니다.
  3. 보기 메뉴에서 도구 상자를 선택하여 도구 상자를 표시하고 Form1에 단추를 추가합니다.
  4. Button1을 두 번 누릅니다. 해당 폼에 대한 코드 창이 나타납니다.
  5. 코드 창에서
      private void button1_Click(object sender, System.EventArgs e)
      {
      }
    위의 코드를 아래와 같이 바꿉니다.
       Word.Application wrdApp;
       Word._Document wrdDoc;
       Object oMissing = System.Reflection.Missing.Value;
       Object oFalse = false;
    
       private void InsertLines(int LineNum)
       {
       	int iCount;
    
    	// Insert "LineNum" blank lines.	
    	for(iCount = 1; iCount<=LineNum; iCount++) 
    	{
    		wrdApp.Selection.TypeParagraph();
    	}
       }
    
       private void FillRow(Word._Document oDoc, int Row, string Text1,
                            string Text2, string Text3, string Text4)
       {
    	// Insert the data into the specific cell.
    	oDoc.Tables.Item(1).Cell(Row,1).Range.InsertAfter(Text1);
    	oDoc.Tables.Item(1).Cell(Row,2).Range.InsertAfter(Text2);
    	oDoc.Tables.Item(1).Cell(Row,3).Range.InsertAfter(Text3);
    	oDoc.Tables.Item(1).Cell(Row,4).Range.InsertAfter(Text4);
       }
    
       private void CreateMailMergeDataFile()
       {
    	Word._Document oDataDoc;
    	int iCount;
    
    	Object oName = "C:\\DataDoc.doc";
    	Object oHeader = "FirstName, LastName, Address, CityStateZip";
    	wrdDoc.MailMerge.CreateDataSource(ref oName,ref oMissing, 
                 ref oMissing,ref oHeader, ref oMissing, ref oMissing, 
                 ref oMissing, ref oMissing, ref oMissing);
    
    	// Open the file to insert data.
    	//WORD9 Use:
    	oDataDoc = wrdApp.Documents.Open(ref oName,ref oMissing,
                 ref oMissing, ref oMissing,ref oMissing,ref oMissing,
                 ref oMissing,ref oMissing,ref oMissing,ref oMissing,
                 ref oMissing,ref oMissing);
    	//WORD10 Use:
    	//oDataDoc = wrdApp.Documents.Open(ref oName,ref oMissing,
    	//     ref oMissing, ref oMissing,ref oMissing,ref oMissing,
    	//     ref oMissing,ref oMissing,ref oMissing,ref oMissing,
    	//     ref oMissing,ref oMissing,ref oMissing,ref oMissing,
    	//     ref oMissing);
    
    	for (iCount=1; iCount<=2; iCount++)
    	{
    		oDataDoc.Tables.Item(1).Rows.Add(ref oMissing);
    	}
    	// Fill in the data.
    	FillRow(oDataDoc, 2, "Steve", "DeBroux", 
                  "4567 Main Street", "Buffalo, NY  98052");
    	FillRow(oDataDoc, 3, "Jan", "Miksovsky", 
    			  "1234 5th Street", "Charlotte, NC  98765");
    	FillRow(oDataDoc, 4, "Brian", "Valentine", 
    			  "12348 78th Street  Apt. 214", 
                              "Lubbock, TX  25874");
    	// Save and close the file.
    	oDataDoc.Save();
    	oDataDoc.Close(ref oFalse, ref oMissing, ref oMissing);
      }
    
      private void button1_Click(object sender, System.EventArgs e)
      {
    	Word.Selection wrdSelection;
    	Word.MailMerge wrdMailMerge;
    	Word.MailMergeFields wrdMergeFields;
    	Word.Table wrdTable;
    	string StrToAdd;
    	 
    	// Create an instance of Word  and make it visible.
    	wrdApp = new Word.Application();
    	wrdApp.Visible = true;
         
            // Add a new document.
    	wrdDoc = wrdApp.Documents.Add(ref oMissing,ref oMissing,
                     ref oMissing,ref oMissing);
    	wrdDoc.Select();
         
    	wrdSelection = wrdApp.Selection;
            wrdMailMerge = wrdDoc.MailMerge;
         
    	// Create a MailMerge Data file.
    	CreateMailMergeDataFile();
         
    	// Create a string and insert it into the document.
    	StrToAdd = "State University\r\nElectrical Engineering Department";
    	wrdSelection.ParagraphFormat.Alignment  = 
               Word.WdParagraphAlignment.wdAlignParagraphCenter;
    	wrdSelection.TypeText(StrToAdd);
          
    	InsertLines(4);
    	
    	// Insert merge data.
    	wrdSelection.ParagraphFormat.Alignment = 
               Word.WdParagraphAlignment.wdAlignParagraphLeft;
    	wrdMergeFields = wrdMailMerge.Fields;
    	wrdMergeFields.Add(wrdSelection.Range, "FirstName");
    	wrdSelection.TypeText(" ");
    	wrdMergeFields.Add(wrdSelection.Range, "LastName");
    	wrdSelection.TypeParagraph();
    
    	wrdMergeFields.Add(wrdSelection.Range, "Address");
    	wrdSelection.TypeParagraph();
    	wrdMergeFields.Add(wrdSelection.Range, "CityStateZip");
           
    	InsertLines(2);
         
    	// Right justify the line and insert a date field
    	// with the current date.
    	wrdSelection.ParagraphFormat.Alignment = 
               Word.WdParagraphAlignment.wdAlignParagraphRight;
    	
    	Object objDate = "dddd, MMMM dd, yyyy";
    	wrdSelection.InsertDateTime(ref objDate,ref oFalse,ref oMissing, 
    		   ref oMissing, ref oMissing);
               
    	InsertLines(2);
         
    	// Justify the rest of the document.
    	wrdSelection.ParagraphFormat.Alignment = 
               Word.WdParagraphAlignment.wdAlignParagraphJustify;    
    
    	wrdSelection.TypeText("Dear ");
    	wrdMergeFields.Add(wrdSelection.Range, "FirstName");
    	wrdSelection.TypeText(",");
    	InsertLines(2);
         
    	// Create a string and insert it into the document.
    	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.";
    	wrdSelection.TypeText(StrToAdd);
         
    	InsertLines(2);
         
    	// Insert a new table with 9 rows and 4 columns.
    	wrdTable = wrdDoc.Tables.Add(wrdSelection.Range,9,4, 
                                         ref oMissing, ref oMissing);
    	// Set the column widths.
    	wrdTable.Columns.Item(1).SetWidth(51, Word.WdRulerStyle.wdAdjustNone);
    	wrdTable.Columns.Item(2).SetWidth(170, Word.WdRulerStyle.wdAdjustNone);
    	wrdTable.Columns.Item(3).SetWidth(100, Word.WdRulerStyle.wdAdjustNone);
    	wrdTable.Columns.Item(4).SetWidth(111, Word.WdRulerStyle.wdAdjustNone);
    	// Set the shading on the first row to light gray.
    	wrdTable.Rows.Item(1).Cells.Shading.BackgroundPatternColorIndex = 
               Word.WdColorIndex.wdGray25;
    	// Bold the first row.
    	wrdTable.Rows.Item(1).Range.Bold = 1;
    	// Center the text in Cell (1,1).
    	wrdTable.Cell(1, 1).Range.Paragraphs.Alignment = 
               Word.WdParagraphAlignment.wdAlignParagraphCenter;
           
    	// Fill each row of the table with data.
    	FillRow(wrdDoc, 1, "Class Number", "Class Name", 
    		"Class Time", "Instructor");
    	FillRow(wrdDoc, 2, "EE220", "Introduction to Electronics II", 
    		"1:00-2:00 M,W,F", "Dr. Jensen");
    	FillRow(wrdDoc, 3, "EE230", "Electromagnetic Field Theory I", 
    		"10:00-11:30 T,T", "Dr. Crump");
    	FillRow( wrdDoc, 4, "EE300", "Feedback Control Systems", 
    		"9:00-10:00 M,W,F", "Dr. Murdy");
    	FillRow(wrdDoc, 5, "EE325", "Advanced Digital Design", 
    		"9:00-10:30 T,T", "Dr. Alley");
    	FillRow(wrdDoc, 6, "EE350", "Advanced Communication Systems", 
    		"9:00-10:30 T,T", "Dr. Taylor");
    	FillRow(wrdDoc, 7, "EE400", "Advanced Microwave Theory", 
    		"1:00-2:30 T,T", "Dr. Lee");
    	FillRow(wrdDoc, 8, "EE450", "Plasma Theory",
    		"1:00-2:00 M,W,F", "Dr. Davis");
    	FillRow(wrdDoc, 9, "EE500", "Principles of VLSI Design", 
    		"3:00-4:00 M,W,F", "Dr. Ellison");
         
    	// Go to the end of the document.
    	Object oConst1 = Word.WdGoToItem.wdGoToLine;
    	Object oConst2 = Word.WdGoToDirection.wdGoToLast;
    	wrdApp.Selection.GoTo(ref oConst1,ref oConst2,ref oMissing,ref oMissing);
    	InsertLines(2);
         
    	// Create a string and insert it into the document.
    	StrToAdd = "For additional information regarding the " +
                    "Department of Electrical Engineering, " +
                    "you can visit our Web site at ";
    	wrdSelection.TypeText(StrToAdd);
    	// Insert a hyperlink to the Web page.
    	Object oAddress = "http://www.ee.stateu.tld";
    	Object oRange = wrdSelection.Range;
    	wrdSelection.Hyperlinks.Add(oRange, ref oAddress,ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing);
    	// Create a string and insert it into the document
    	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 " +
                    "555-1212.\r\n\r\n"  +
                    "Sincerely,\r\n\r\n" +
                    "Kathryn M. Hinsch\r\n" +
                    "Department of Electrical Engineering \r\n";
    	wrdSelection.TypeText(StrToAdd);
          
    	// Perform mail merge.
    	wrdMailMerge.Destination = Word.WdMailMergeDestination.wdSendToNewDocument;
    	wrdMailMerge.Execute(ref oFalse);
         
    	// Close the original form document.
    	wrdDoc.Saved = true;
    	wrdDoc.Close(ref oFalse,ref oMissing,ref oMissing);
         
         
    	// Release References.
    	wrdSelection = null;
    	wrdMailMerge = null;
    	wrdMergeFields = null;
    	wrdDoc = null;
    	wrdApp = null;
         
    	// Clean up temp file.
            System.IO.File.Delete("C:\\DataDoc.doc");
      }
    참고: 예제에 나와 있는 것처럼 이 코드는 Word 9.0 개체 라이브러리를 사용합니다. 프로젝트에 참조를 추가한 경우 Word 9.0 개체 라이브러리 대신 Word 10.0 개체 라이브러리를 선택했다면 코드에서 "//WORD10"이 포함되어 있는 주석을 찾아 해당 주석이 참조하는 코드의 행에서 주석 표시를 제거합니다. 마찬가지로, Word 9.0 개체 라이브러리를 선택했다면 코드에서 "//WORD9"가 포함되어 있는 주석을 찾아 해당 주석이 참조하는 코드의 행에서 주석 표시를 제거합니다.

  6. 위의 코드를 아래와 같이 바꿉니다. F5 키를 눌러 프로그램을 빌드하고 실행합니다.
  7. 위의 코드를 아래와 같이 바꿉니다. Button1을 눌러 Word 자동화를 시작하여 편지 병합을 수행합니다.

참조

자세한 내용은 다음 Microsoft Developer Network(MSDN) 웹 사이트를 참조하십시오.
Visual Studio를 사용한 Microsoft Office 개발
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Microsoft Visual Basic을 사용하여 Word를 자동화하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
285332 HOWTO: Automate Word 2002 with Visual Basic to Create a Mail Merge
220607 HOWTO: Automate Microsoft Word to Perform Mail Merge from Visual Basic
301656 HOWTO: Automate Microsoft Word to Perform a Mail Merge from Visual Basic .NET

속성

기술 자료: 301659 - 마지막 검토: 2007년 1월 17일 수요일 - 수정: 2.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
키워드:?
kbhowto kbautomation kbword kbgrpdso KB301659

피드백 보내기

 

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