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

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 316384 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Im folgenden Artikel wird dieses Thema für Microsoft Visual Basic .NET behandelt: 316383.
Eine Version dieses Artikels für Microsoft Visual Basic 6.0 finden Sie unter 313193.
Alles erweitern | Alles schließen

Zusammenfassung

Dieser Artikel beschreibt Schritt für Schritt, wie Sie mithilfe der Automatisierung von Microsoft Visual C# 2005 oder Microsoft Visual C# .NET ein neues Dokument in Microsoft Word erstellen können.

Beispielcode

Der Beispielcode in diesem Artikel demonstriert, wie Sie die folgenden Aktionen ausführen:
  • Einfügen von Absätzen mit Text und Formatierung.
  • Mehrere Bereiche in einem Dokument durchsuchen und ändern.
  • Tabellen einfügen, Tabellen formatieren und Tabellen mit Daten füllen.
  • Diagramm hinzufügen.
Gehen Sie folgendermaßen vor, um mithilfe der Automatisierung von Visual C# 2005 oder Visual C# .NET aus ein neues Word-Dokument 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 anschließend auf Projekt. Klicken Sie unter Projekttypen auf Visual C#-Projekte, und klicken Sie anschließend unter Vorlagen auf Windows-Anwendung. Form1 wird standardmäßig erstellt.

    Hinweis In Visual Studio 2005 klicken Sie auf Visual C# statt auf Visual C#-Projekte.
  3. Fügen Sie der Microsoft Word Object Library einen Verweis hinzu. Gehen Sie hierzu folgendermaßen vor:
    1. Klicken Sie im Menü Projekt auf Verweis hinzufügen.
    2. Gehen Sie zu dem Eintrag für die Microsoft Word Object Library auf der Registerkarte COM, und klicken Sie auf Auswählen.

      Hinweis In Visual Studio 2005 müssen Sie nicht auf Auswählen klicken.
      Hinweis Microsoft Office 2003 beinhaltet Primary Interop-Assemblys (PIAs). In Microsoft Office XP sind zwar keine PIAs enthalten, Sie können diese jedoch bei Bedarf herunterladen. Weitere Informationen zu Office XP-PIAs finden Sie im folgenden Artikel der Microsoft Knowledge Base:
      328912 INFO: Microsoft Office XP PIAs stehen zum Download zur Verfügung
    3. Klicken Sie im Dialogfeld Verweise hinzufügen auf OK, um Ihre Auswahl zu bestätigen. Klicken Sie auf Ja, wenn Sie gefragt werden, ob für die von Ihnen gewählten Bibliotheken Wrapper erstellt werden sollen.
  4. Wählen Sie im Menü Ansicht die Option Toolbox, um die Toolbox anzuzeigen, und fügen Sie dann Form1 eine Schaltfläche hinzu.
  5. Doppelklicken Sie auf Button1 (Schaltfläche 1). Das Codefenster für das Formular erscheint.
  6. Ersetzen Sie im Codefenster den folgenden Code
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    					
    durch:
    private void button1_Click(object sender, System.EventArgs e)
    {
    	object oMissing = System.Reflection.Missing.Value;
    	object oEndOfDoc = "\\endofdoc"; /* \endofdoc ist eine vordefinierte Textmarke */ 
    
    	//Word starten und ein neues Dokument erstellen.
    	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);
    
    	//Einen Absatz am Anfang des Dokuments einfügen.
    	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 Abstand nach dem Absatz.
    	oPara1.Range.InsertParagraphAfter();
    
    	//Einen Absatz am Ende des Dokuments einfügen.
    	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();
    
    	//Einen weiteren Absatz einfügen.
    	Word.Paragraph oPara3;
    	oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    	oPara3 = oDoc.Content.Paragraphs.Add(ref oRng);
    	oPara3.Range.Text = "Das ist ein Satz mit normalem Text. Hier ist jetzt eine Tabelle:";
    	oPara3.Range.Font.Bold = 0;
    	oPara3.Format.SpaceAfter = 24;
    	oPara3.Range.InsertParagraphAfter();
    
    	//Eine 3-x-5-Tabelle einfügen, mit Daten füllen und die erste Zeile
    	//fett und kursiv formatieren.
    	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;
    
    	//Nach der Tabelle etwas Text hinzufügen.
    	Word.Paragraph oPara4;
    	oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    	oPara4 = oDoc.Content.Paragraphs.Add(ref oRng);
    	oPara4.Range.InsertParagraphBefore();
    	oPara4.Range.Text = "Und hier ist noch eine Tabelle:";
    	oPara4.Format.SpaceAfter = 24;
    	oPara4.Range.InsertParagraphAfter();
    
    	//Eine 5-x-2-Tabelle einfügen, mit Daten füllen und Spaltenbreiten ändern.
    	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); //Breite der Spalten 1 & 2 ändern
    	oTable.Columns[2].Width = oWord.InchesToPoints(3);
    
    	//Weiteren Text einfügen. Im Abstand von 7 Zoll vom oberen Rand des
    	//Dokuments einen Seitenumbruch einfügen.
    	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("Eine Textzeile");
    		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("Wir sind auf Seite 2. Hier ist mein Diagramm:");
    	wrdRng.InsertParagraphAfter();
    
    	//Ein Diagramm einfügen.
    	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);
    
    	//Zeigen, wie die späte gebundenen oChart- und oChartApp-Objekte zum
    	//bearbeiten des Diagrammobjekts mit MSGraph verwendet werden.
    	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);
    
    	//Das Diagrammbild aktualisieren und MSGraph beenden.
    	oChartApp.GetType().InvokeMember("Update",
    		BindingFlags.InvokeMethod, null, oChartApp, null);
    	oChartApp.GetType().InvokeMember("Quit",
    		BindingFlags.InvokeMethod, null, oChartApp, null);
    	//... Falls gewünscht, können Sie hier mit dem Microsoft Graph- 
    	//Objektmodell für die oChart- und oChartApp-Objekte fortfahren, um zusätzliche Änderungen am
    	//Diagramm vorzunehmen.
    
    	//Die Breite des Diagramms festlegen.
    	oShape.Width = oWord.InchesToPoints(6.25f);
    	oShape.Height = oWord.InchesToPoints(3.57f);
    
    	//Nach dem Diagramm Text hinzufügen.
    	wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    	wrdRng.InsertParagraphAfter();
    	wrdRng.InsertAfter("ENDE.");
    
    	//Dieses Formular schließen.
    	this.Close();
    }
    					
  7. Gehen Sie im Codefenster per Bildlauf ganz nach oben. Fügen Sie am Ende der Liste der using-Direktiven die folgende Zeile hinzu:
    using Word = Microsoft.Office.Interop.Word;
    using System.Reflection;
    					
  8. Drücken Sie die Taste [F5], um das Programm erstellen und ausführen zu lassen.
  9. Klicken Sie auf Button1, um die Word-Automatisierung zu starten und das Dokument zu erstellen.
Nach abgeschlossener Ausführung des Codes überprüfen Sie das Dokument, das für Sie erstellt wurde. Das Dokument umfasst zwei Seiten mit formatierten Absätzen, Tabellen und einem Diagramm.

Verwenden einer Vorlage

Wenn Sie die Automatisierung verwenden, um Dokumente zu erstellen, die alle das gleiche Format aufweisen, ist es hilfreich, den Prozess mit einem neuen Dokument zu starten, das auf einer vorformatierten Vorlage basiert. Die Verwendung einer Vorlage in Verbindung mit Ihrem Word-Automatisierungsclient hat gegenüber der Dokumenterstellung ohne jegliche Vorgaben zwei entscheidende Vorteile:
  • Sie können die Formatierung und die Platzierung von Objekten innerhalb Ihres Dokuments besser steuern.
  • Für die Erstellung Ihrer Dokumente ist weniger Code erforderlich.
Durch die Verwendung einer Vorlage ist eine Feinabstimmung in Bezug auf die Positionierung und Formatierung von Tabellen, Absätzen und anderen Objekten in dem Dokument möglich. Mithilfe der Automatisierung können Sie mit einem Code wie dem folgenden ein neues Dokument erstellen, das auf Ihrer Vorlage basiert:
object oTemplate = "c:\\MyTemplate.dot";
oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing,
	ref oMissing, ref oMissing);
				
In Ihrer Vorlage können Sie Textmarken wie folgt definieren, damit Ihr Automatisierungsclient variablen Text an einer bestimmten Stelle in dem Dokument einfügen kann:
object oBookMark = "MyBookmark";
oDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Hier ist etwas Text";
				
Ein weiterer Vorteil der Verwendung einer Vorlage ist, dass Sie wie folgt Formatierungsvorlagen erstellen und speichern können, die zur Laufzeit angewendet werden sollen:
object oStyleName = "MyStyle";
oDoc.Bookmarks.Item(ref oBookMark).Range.set_Style(ref oStyleName);
				
ODER
object oStyleName = "MyStyle";
oWord.Selection.set_Style(ref oStyleName);
				

Informationsquellen

Weitere Informationen finden Sie in folgenden Artikeln der Microsoft Knowledge Base:
301659 SO WIRD'S GEMACHT: Automatisieren von Microsoft Word zum Durchführen eines Seriendrucks mit Visual C# .NET
302902 SO WIRD'S GEMACHT: Bindung von Office-Automatisierungsservern mit Visual C# .NET
Weitere Informationen finden Sie auf den folgenden MSDN-Websites:
Microsoft Office Development with Visual Studio (in Englisch)
http://msdn2.microsoft.com/de-de/library/aa188489(office.10).aspx

Word in the Office (MSDN Online Article)
http://msdn2.microsoft.com/de-de/library/aa201330(office.11).aspx

One More Word (MSDN Online Article)
http://msdn2.microsoft.com/de-de/library/aa201332(office.11).aspx
Hinweis Dies ist ein Artikel, der im Schnellverfahren direkt von der Microsoft-Supportorganisation erstellt wurde. Die hierin enthaltenen Informationen werden als Reaktion auf neue Probleme wie besehen bereitgestellt. Da dieser Artikel im Schnellverfahren erstellt wurde, kann er Tippfehler enthalten und zu einem späteren Zeitpunkt ohne vorherige Ankündigung überarbeitet werden. Weitere zu berücksichtigende Informationen finden Sie in den Nutzungsbedingungen.

Eigenschaften

Artikel-ID: 316384 - Geändert am: Freitag, 31. Januar 2014 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Word 2002 Standard Edition
Keywords: 
kbautomation kbhowtomaster KB316384
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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