Come automatizzare Microsoft Word per eseguire la stampa unione da Visual C #

Per una versione di Microsoft Visual Basic .NET di questo articolo, vedere 301656.

Riepilogo

Questo articolo illustra come automatizzare Microsoft Word per creare un documento unito tramite posta elettronica usando Microsoft Visual C# 2005 o Microsoft Visual C# .NET.

Ulteriori informazioni

L'automazione è un processo che consente alle applicazioni scritte in linguaggi come Visual C# 2005 o Visual C# .NET di controllare a livello di codice altre applicazioni. L'automazione di Word consente di eseguire azioni quali la creazione di nuovi documenti, l'aggiunta di testo ai documenti e la formattazione dei documenti. Con Word e altre applicazioni di Microsoft Office, praticamente tutte le azioni che è possibile eseguire manualmente tramite l'interfaccia utente possono essere eseguite anche a livello di codice tramite Automazione.

Word espone questa funzionalità a livello di codice tramite un modello a oggetti. Il modello a oggetti è una raccolta di classi e metodi che fungono da controparti ai componenti logici di Word. Ad esempio, sono presenti un oggetto Application, un oggetto Document e un oggetto Paragraph, ognuno dei quali contiene la funzionalità di tali componenti in Word. Per accedere al modello a oggetti da Visual C# 2005 o Visual C# .NET, è possibile impostare un riferimento al progetto sulla libreria dei tipi.

Questo articolo illustra come impostare il riferimento di progetto appropriato alla libreria dei tipi di Word per Visual C# .NET e fornisce codice di esempio per automatizzare Word.

Compilazione dell'esempio di automazione

  1. Avviare Microsoft Visual Studio 2005 o Microsoft Visual Studio .NET.

  2. Scegliere Nuovo dal menu File e quindi fare clic su Progetto. Selezionare Applicazione Windows dai tipi di progetto Visual C#. Form1 viene creato per impostazione predefinita.

  3. Aggiungere un riferimento alla libreria di oggetti di Microsoft Word 11.0 in Visual Studio 2005 o alla libreria di oggetti di Microsoft Word in Visual Studio .NET. A tal fine, attenersi alla seguente procedura:

    1. Scegliere Aggiungi riferimento dal menu Progetto.

    2. Nella scheda COM individuare Raccolta oggetti di Microsoft Word e quindi fare clic su Seleziona.

      In Visual Studio 2005 individuare Libreria oggetti di Microsoft Word 11.0 nella scheda COM .

      Nota Microsoft Office 2003 include assembly di interoperabilità primari ( PIA). Microsoft Office XP non include FUNZIONALITÀ personali, ma può essere scaricato.

    3. Fare clic su OK nella finestra di dialogo Aggiungi riferimenti per accettare le selezioni.

  4. Nel menu Visualizza selezionare Casella degli strumenti per visualizzare la casella degli strumenti e quindi aggiungere un pulsante a Form1.

  5. Fare doppio clic su Button1. Viene visualizzata la finestra del codice per il modulo.

  6. Nella finestra del codice sostituire il codice seguente

      private void button1_Click(object sender, System.EventArgs e)
      {
      }
    
    

    Con:

    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[1].Cell(Row,1).Range.InsertAfter(Text1);
    oDoc.Tables[1].Cell(Row,2).Range.InsertAfter(Text2);
    oDoc.Tables[1].Cell(Row,3).Range.InsertAfter(Text3);
    oDoc.Tables[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.
    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/*, ref oMissing */);
    
    for (iCount=1; iCount<=2; iCount++)
    {
    oDataDoc.Tables[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[1].SetWidth(51, Word.WdRulerStyle.wdAdjustNone);
    wrdTable.Columns[2].SetWidth(170, Word.WdRulerStyle.wdAdjustNone);
    wrdTable.Columns[3].SetWidth(100, Word.WdRulerStyle.wdAdjustNone);
    wrdTable.Columns[4].SetWidth(111, Word.WdRulerStyle.wdAdjustNone);
    // Set the shading on the first row to light gray.
    wrdTable.Rows[1].Cells.Shading.BackgroundPatternColorIndex = 
    Word.WdColorIndex.wdGray25;
    // Bold the first row.
    wrdTable.Rows[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");
    } 
    
    

    Nota È necessario modificare il codice in Visual Studio 2005. Per impostazione predefinita, Visual C# aggiunge una maschera al progetto quando si crea un progetto Windows Forms. Il modulo è denominato Form1. I due file che rappresentano il modulo sono denominati Form1.cs e Form1.designer.cs. Il codice viene scritto in Form1.cs. Nel file Form1.designer.cs il Windows Forms Designer scrive il codice che implementa tutte le azioni eseguite trascinando ed eliminando i controlli dalla casella degli strumenti.

    Per altre informazioni su Progettazione Windows Forms in Visual C# 2005, visitare il seguente sito Web Microsoft Developer Network (MSDN): Creazione di un progetto (Visual C#)Nota Microsoft Office Word 2003 include un argomento aggiuntivo per il metodo Open del documento. Se si usa il pia di Word 2003, rimuovere la notazione di commento per il parametro aggiuntivo per il metodo Open.

  7. Aggiungere quanto segue all'inizio di Form1.cs:

    using Word = Microsoft.Office.Interop.Word;
    
    
  8. Premere F5 per compilare ed eseguire il programma.

  9. Fare clic su Button1 per avviare Automazione Word e per eseguire la stampa unione.

Riferimenti

Per altre informazioni, visitare il seguente sito Web Microsoft Developer Network (MSDN): Sviluppo di Microsoft Office con Visual Studio Microsoft Office Development con Visual Studio

Per altre informazioni, fare clic sul numero dell'articolo seguente per visualizzare l'articolo della Microsoft Knowledge Base:

285332 Come automatizzare Word 2002 con Visual Basic per creare una stampa unione