Comment faire pour automatiser Microsoft Word pour créer un nouveau document à l'aide de Visual C#

Traductions disponibles Traductions disponibles
Numéro d'article: 316384 - Voir les produits auxquels s'applique cet article
Pour une version de Microsoft Visual Basic .NET de cet article, voir 316383.
Pour une version de Microsoft Visual Basic 6.0 de cet article, voir 313193.
Agrandir tout | Réduire tout

Résumé

Cette étape par étape explique comment créer un nouveau document dans Microsoft Word à l'aide de l'automation à partir de Visual C# 2005 ou Microsoft Visual C# .NET.

Exemple de code

L'exemple de code dans cet article montre comment effectuer les opérations suivantes :
  • Insérer des paragraphes de texte et la mise en forme.
  • Parcourir et modifier plusieurs plages dans un document.
  • Insérer des tableaux, formater des tables et remplir les tables avec des données.
  • Ajouter un graphique.
Pour créer un nouveau document Word à l'aide de l'automation à partir de Visual C# 2005 ou Visual C# .NET, procédez comme suit :
  1. Démarrez Microsoft Visual Studio 2005 ou Microsoft Visual Studio .NET.
  2. Dans le menu Fichier , cliquez sur Nouveau , puis cliquez sur le projet . Sous types de projets , cliquez sur projets Visual C# , puis cliquez sur application Windows sous modèles . Form1 est créé par défaut.

    note Dans Visual Studio 2005, cliquez sur Visual C# au lieu de projets Visual C# .
  3. Ajoutez une référence à la bibliothèque d'objets Microsoft Word . Pour ce faire, procédez comme suit :
    1. Dans le menu projet , cliquez sur Ajouter une référence .
    2. Sous l'onglet COM , trouver la bibliothèque objet Microsoft Word , puis cliquez sur Sélectionner .

      note Dans Visual Studio 2005, vous ne devez pas cliquer sur sélectionner .
      note Microsoft Office 2003 inclut les assemblys Primary Interop (Assemblies). Microsoft Office XP n'inclut pas assemblys PIA, mais ils peuvent être téléchargés. Pour plus d'informations sur les assemblys PIA Office XP, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
      328912 INFORMATIONS : les assemblys PIA Microsoft Office XP est disponibles pour téléchargement
    3. Cliquer sur OK dans la boîte de dialogue Ajouter une référence pour accepter les vos sélections. Si vous êtes invité à générer des wrappers pour les bibliothèques que vous avez sélectionné, cliquez sur Oui .
  4. Dans le menu Affichage , sélectionnez boîte à outils pour afficher la boîte à outils et puis ajouter un bouton à Form1.
  5. Double-cliquez sur Button1 . La fenêtre de code pour le formulaire s'affiche.
  6. Dans la fenêtre de code, remplacez le code suivant
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    					
    avec :
    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. Remontez vers le début de la fenêtre de code. Ajoutez la ligne suivante à la fin de la liste des directives à l'aide :
    using Word = Microsoft.Office.Interop.Word;
    using System.Reflection;
    					
  8. Appuyez sur F5 pour générer et exécuter le programme.
  9. Cliquez sur Button1 pour démarrer l'automation Word et créer le document.
Une fois le code terminée, examinez le document qui a été créé pour vous. Le document contient deux pages de paragraphes mis en forme, tables et un graphique.

Utiliser un modèle

Si vous utilisez Automation pour créer des documents qui sont tous les dans un format courant, vous pouvez bénéficier de démarrer le processus avec un nouveau document basé sur un modèle déjà mis en forme. L'utilisation d'un modèle avec votre client Automation Word de présente deux avantages significatifs sur la création d'un document à partir de rien :
  • Vous pouvez contrôlez supérieure la mise en forme et sélection élective d'objets dans vos documents.
  • Vous pouvez créer vos documents avec moins de code.
En utilisant un modèle, vous pouvez ajuster la sélection élective des tableaux, paragraphes et autres objets dans le document, ainsi que comprend de mise en forme sur ces objets. En utilisant Automation, vous pouvez créer un document nouveau basé sur votre modèle avec le code such as suivantes :
object oTemplate = "c:\\MyTemplate.dot";
oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing,
	ref oMissing, ref oMissing);
				
dans votre modèle, vous pouvez définir les signets afin que votre automatisation client pouvez renseigner texte variable dans un emplacement spécifique dans le document, comme suit :
object oBookMark = "MyBookmark";
oDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Some Text Here";
				
un autre avantage d'utiliser un modèle est que vous pouvez créer et stocker des styles de mise en forme pour lettrer lors de l'exécution, comme suit :
object oStyleName = "MyStyle";
oDoc.Bookmarks.Item(ref oBookMark).Range.set_Style(ref oStyleName);
				
- ou -
object oStyleName = "MyStyle";
oWord.Selection.set_Style(ref oStyleName);
				

Références

Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
301659 Comment faire pour automatiser Word Microsoft pour effectuer une fusion et publipostage à partir de Visual C# .NET
302902 Comment faire : liaison pour des serveurs Office Automation avec Visual C# .NET
Pour plus d'informations, reportez-vous aux sites Microsoft Developer réseau MSDN (Web adresses suivantes :
Développement de Microsoft Office avec Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx

Word dans Office (MSDN article en ligne)
http://msdn2.microsoft.com/en-us/library/aa201330(office.11).aspx

Word plus un (MSDN en ligne d'article)
http://msdn2.microsoft.com/en-us/library/aa201332(office.11).aspx

Propriétés

Numéro d'article: 316384 - Dernière mise à jour: jeudi 17 mai 2007 - Version: 7.7
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Initiation
  • Microsoft Visual C# .NET 2002 Initiation
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
Mots-clés : 
kbmt kbautomation kbhowtomaster KB316384 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 316384
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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