Automatisieren von Microsoft Word zum Erstellen eines neuen Dokuments mithilfe von Visual C #

Eine Microsoft Visual Basic .NET-Version dieses Artikels finden Sie unter

Zusammenfassung

In diesem Schritt-für-Schritt-Artikel wird beschrieben, wie Sie ein neues Dokument in Microsoft Word mithilfe der Automatisierung von Microsoft Visual C# 2005 oder Microsoft Visual C# .NET erstellen.

Beispielcode

Der Beispielcode in diesem Artikel veranschaulicht die folgenden Schritte:

  • Einfügen von Absätzen mit Text und Formatierung.
  • Durchsuchen und Ändern verschiedener Bereiche in einem Dokument.
  • Fügen Sie Tabellen ein, formatieren Sie Tabellen, und füllen Sie die Tabellen mit Daten.
  • Fügen Sie ein Diagramm hinzu.

Führen Sie die folgenden Schritte aus, um ein neues Word-Dokument mithilfe der Automatisierung aus Visual C# 2005 oder Visual C# .NET zu erstellen:

  1. Starten Sie Microsoft Visual Studio 2005 oder Microsoft Visual Studio .NET.

  2. Klicken Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt. Klicken Sie unter "Projekttypen" auf "Visual C#-Projekte" und dann unter "Vorlagen" auf "Windows-Anwendung". Form1 wird standardmäßig erstellt.

    Hinweis Klicken Sie in Visual Studio 2005 auf Visual C# anstelle von Visual C#-Projekten.

  3. Fügen Sie einen Verweis auf die Microsoft Word-Objektbibliothek hinzu. Gehen Sie dazu wie folgt vor:

    1. On the Project menu, click Add Reference.
    2. Suchen Sie auf der Registerkarte COM nach der Microsoft Word-Objektbibliothek, und klicken Sie dann auf "Auswählen".

    Hinweis In Visual Studio 2005 müssen Sie nicht auf "Auswählen" klicken.

    Hinweis Microsoft Office 2003 enthält primäre Interopassemblys (PRIMARY Interop Assemblies, PIAs). Microsoft Office XP enthält keine PIAs, sie können jedoch heruntergeladen werden.

    1. Klicken Sie im Dialogfeld "Verweise hinzufügen" auf "OK", um Ihre Auswahl zu übernehmen. Wenn Sie aufgefordert werden, Wrapper für die ausgewählten Bibliotheken zu generieren, klicken Sie auf "Ja".
  4. Wählen Sie im Menü "Ansicht" die Toolbox aus, um die Toolbox anzuzeigen, und fügen Sie formular1 eine Schaltfläche hinzu.

  5. Doppelklicken Sie auf Schaltfläche1. Das Codefenster für das Formular wird angezeigt.

  6. Ersetzen Sie im Codefenster den folgenden Code:

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

    mit:

    private void button1_Click(object sender, System.EventArgs e)
    {
    object oMissing = System.Reflection.Missing.Value;
    object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ 
    
    //Start Word and create a new document.
    Word._Application oWord;
    Word._Document oDoc;
    oWord = new Word.Application();
    oWord.Visible = true;
    oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
    ref oMissing, ref oMissing);
    
    //Insert a paragraph at the beginning of the document.
    Word.Paragraph oPara1;
    oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing);
    oPara1.Range.Text = "Heading 1";
    oPara1.Range.Font.Bold = 1;
    oPara1.Format.SpaceAfter = 24;    //24 pt spacing after paragraph.
    oPara1.Range.InsertParagraphAfter();
    
    //Insert a paragraph at the end of the document.
    Word.Paragraph oPara2;
    object oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    oPara2 = oDoc.Content.Paragraphs.Add(ref oRng);
    oPara2.Range.Text = "Heading 2";
    oPara2.Format.SpaceAfter = 6;
    oPara2.Range.InsertParagraphAfter();
    
    //Insert another paragraph.
    Word.Paragraph oPara3;
    oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    oPara3 = oDoc.Content.Paragraphs.Add(ref oRng);
    oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:";
    oPara3.Range.Font.Bold = 0;
    oPara3.Format.SpaceAfter = 24;
    oPara3.Range.InsertParagraphAfter();
    
    //Insert a 3 x 5 table, fill it with data, and make the first row
    //bold and italic.
    Word.Table oTable;
    Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    oTable = oDoc.Tables.Add(wrdRng, 3, 5, ref oMissing, ref oMissing);
    oTable.Range.ParagraphFormat.SpaceAfter = 6;
    int r, c;
    string strText;
    for(r = 1; r <= 3; r++)
    for(c = 1; c <= 5; c++)
    {
    strText = "r" + r + "c" + c;
    oTable.Cell(r, c).Range.Text = strText;
    }
    oTable.Rows[1].Range.Font.Bold = 1;
    oTable.Rows[1].Range.Font.Italic = 1;
    
    //Add some text after the table.
    Word.Paragraph oPara4;
    oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    oPara4 = oDoc.Content.Paragraphs.Add(ref oRng);
    oPara4.Range.InsertParagraphBefore();
    oPara4.Range.Text = "And here's another table:";
    oPara4.Format.SpaceAfter = 24;
    oPara4.Range.InsertParagraphAfter();
    
    //Insert a 5 x 2 table, fill it with data, and change the column widths.
    wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    oTable = oDoc.Tables.Add(wrdRng, 5, 2, ref oMissing, ref oMissing);
    oTable.Range.ParagraphFormat.SpaceAfter = 6;
    for(r = 1; r <= 5; r++)
    for(c = 1; c <= 2; c++)
    {
    strText = "r" + r + "c" + c;
    oTable.Cell(r, c).Range.Text = strText;
    }
    oTable.Columns[1].Width = oWord.InchesToPoints(2); //Change width of columns 1 & 2
    oTable.Columns[2].Width = oWord.InchesToPoints(3);
    
    //Keep inserting text. When you get to 7 inches from top of the
    //document, insert a hard page break.
    object oPos;
    double dPos = oWord.InchesToPoints(7);
    oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertParagraphAfter();
    do
    {
    wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    wrdRng.ParagraphFormat.SpaceAfter = 6;
    wrdRng.InsertAfter("A line of text");
    wrdRng.InsertParagraphAfter();
    oPos = wrdRng.get_Information
                           (Word.WdInformation.wdVerticalPositionRelativeToPage);
    }
    while(dPos >= Convert.ToDouble(oPos));
    object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
    object oPageBreak = Word.WdBreakType.wdPageBreak;
    wrdRng.Collapse(ref oCollapseEnd);
    wrdRng.InsertBreak(ref oPageBreak);
    wrdRng.Collapse(ref oCollapseEnd);
    wrdRng.InsertAfter("We're now on page 2. Here's my chart:");
    wrdRng.InsertParagraphAfter();
    
    //Insert a chart.
    Word.InlineShape oShape;
    object oClassType = "MSGraph.Chart.8";
    wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    oShape = wrdRng.InlineShapes.AddOLEObject(ref oClassType, ref oMissing, 
    ref oMissing, ref oMissing, ref oMissing,
    ref oMissing, ref oMissing, ref oMissing);
    
    //Demonstrate use of late bound oChart and oChartApp objects to
    //manipulate the chart object with MSGraph.
    object oChart;
    object oChartApp;
    oChart = oShape.OLEFormat.Object;
    oChartApp = oChart.GetType().InvokeMember("Application",
    BindingFlags.GetProperty, null, oChart, null);
    
    //Change the chart type to Line.
    object[] Parameters = new Object[1];
    Parameters[0] = 4; //xlLine = 4
    oChart.GetType().InvokeMember("ChartType", BindingFlags.SetProperty,
    null, oChart, Parameters);
    
    //Update the chart image and quit MSGraph.
    oChartApp.GetType().InvokeMember("Update",
    BindingFlags.InvokeMethod, null, oChartApp, null);
    oChartApp.GetType().InvokeMember("Quit",
    BindingFlags.InvokeMethod, null, oChartApp, null);
    //... If desired, you can proceed from here using the Microsoft Graph 
    //Object model on the oChart and oChartApp objects to make additional
    //changes to the chart.
    
    //Set the width of the chart.
    oShape.Width = oWord.InchesToPoints(6.25f);
    oShape.Height = oWord.InchesToPoints(3.57f);
    
    //Add text after the chart.
    wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    wrdRng.InsertParagraphAfter();
    wrdRng.InsertAfter("THE END.");
    
    //Close this form.
    this.Close();
    }
    
  7. Scrollen Sie zum oberen Rand des Codefensters. Fügen Sie die folgende Zeile am Ende der Liste der verwendenden Direktiven hinzu:

    using Word = Microsoft.Office.Interop.Word;
    using System.Reflection;
    
  8. Drücken Sie F5, um das Programm zu erstellen und auszuführen.

  9. Klicken Sie auf "Schaltfläche1", um die Word-Automatisierung zu starten und das Dokument zu erstellen.

Überprüfen Sie nach Abschluss des Codes das Dokument, das für Sie erstellt wurde. Das Dokument enthält zwei Seiten mit formatierten Absätzen, Tabellen und einem Diagramm.

Verwenden einer Vorlage

Wenn Sie Automatisierung zum Erstellen von Dokumenten verwenden, die alle in einem gemeinsamen Format vorliegen, können Sie davon profitieren, den Prozess mit einem neuen Dokument zu starten, das auf einer vorformatierten Vorlage basiert. Die Verwendung einer Vorlage mit Ihrem Word Automation-Client hat zwei wesentliche Vorteile gegenüber dem Erstellen eines Dokuments aus dem Nichts:

  • Sie können die Formatierung und Platzierung von Objekten in allen Dokumenten besser steuern.
  • Sie können Ihre Dokumente mit weniger Code erstellen.

Mithilfe einer Vorlage können Sie die Platzierung von Tabellen, Absätzen und anderen Objekten innerhalb des Dokuments optimieren und formatieren. Mithilfe der Automatisierung können Sie ein neues Dokument basierend auf Ihrer Vorlage mit Folgendem Code erstellen:

object oTemplate = "c:\\MyTemplate.dot";
oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing,
ref oMissing, ref oMissing);

In Ihrer Vorlage können Sie Lesezeichen definieren, sodass ihr Automatisierungsclient variablen Text an einer bestimmten Stelle im Dokument wie folgt ausfüllen kann:

object oBookMark = "MyBookmark";
oDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Some Text Here";

Ein weiterer Vorteil der Verwendung einer Vorlage besteht darin, dass Sie Formatvorlagen erstellen und speichern können, die Sie zur Laufzeit wie folgt anwenden möchten:

object oStyleName = "MyStyle";
oDoc.Bookmarks.Item(ref oBookMark).Range.set_Style(ref oStyleName);

oder

object oStyleName = "MyStyle";
oWord.Selection.set_Style(ref oStyleName);

References

Weitere Informationen erhalten Sie in den Artikeln der Microsoft Knowledge Base: