Cómo automatizar Microsoft Word para crear un nuevo documento mediante el uso de Visual C#

Seleccione idioma Seleccione idioma
Id. de artículo: 316384 - Ver los productos a los que se aplica este artículo
Para obtener una versión de Microsoft Visual Basic .NET de este el artículo, consulte 316383.
Para obtener una versión de Microsoft Visual Basic 6.0 de este el artículo, consulte 313193.
Expandir todo | Contraer todo

Resumen

En este artículo paso a paso se describe cómo crear un nuevo documento de Microsoft Word utilizando automatización desde Microsoft Visual C# 2005 o Microsoft Visual C#. NET.

Código de ejemplo

El código de ejemplo en este artículo muestra cómo hacer la Después de:
  • Insertar párrafos con texto y el formato.
  • Examinar y modificar varios intervalos dentro de un documento.
  • Insertar tablas, dar formato a tablas y llenar las tablas con datos.
  • Agregar un gráfico.
Para crear un nuevo documento de Word utilizando automatización desde Visual C# de 2005 o Visual C#. NET, siga estos pasos:
  1. Inicie Microsoft Visual Studio 2005 o Microsoft Visual Studio. NET.
  2. En el Archivo menú, haga clic en Nuevoy, a continuación, haga clic en Proyecto. Bajo Tipos de proyecto, haga clic en Proyectos de Visual C#y, a continuación, haga clic en Aplicación para Windows bajo Plantillas. De forma predeterminada, se crea Form1.

    Nota En Visual Studio 2005, haga clic en Visual C# en su lugar de Proyectos de Visual C#.
  3. Agregue una referencia a Biblioteca de objetos de Microsoft Word. Para ello, siga estos pasos:
    1. En el Proyecto menú, haga clic en Agregar referencia.
    2. En el COM ficha, localizar Biblioteca de objetos de Microsoft Wordy, a continuación, haga clic en SELECT.

      Nota En Visual Studio 2005, es necesario hacer clic en SELECT.
      Nota Microsoft Office 2003 incluye a ensamblados de interoperabilidad primarios (PIA). Microsoft Office XP no incluye PIA, pero se pueden descargar. Para obtener más información acerca de los PIA de Office XP, haga clic en el siguiente número de artículo Para ver el artículo en Microsoft Knowledge Base:
      328912INFO: Los ensamblados de interoperabilidad primarios de Microsoft Office XP están disponibles para descarga
    3. Haga clic en ACEPTAR en el Agregar referencias cuadro de diálogo para aceptar sus selecciones. Si se le pedirá que generar contenedores para las bibliotecas seleccionadas, haga clic en .
  4. En el Vista menú, seleccione Cuadro de herramientas para mostrar el cuadro de herramientas y, a continuación, agregue un botón a Form1.
  5. Haga doble clic en Button1. Aparecerá la ventana de código para el formulario.
  6. En la ventana de código, reemplace el código siguiente
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    					
    con:
    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. Desplácese hasta la parte superior de la ventana de código. Agregue lo siguiente línea hasta el final de la lista de usando directivas:
    using Word = Microsoft.Office.Interop.Word;
    using System.Reflection;
    					
  8. Presione F5 para generar y ejecutar el programa.
  9. Haga clic en Button1 Para iniciar automatización de Word y para crear el documento.
Después de que finalice el código, examinar el documento que se ha creado para usted. El documento contiene dos páginas de los párrafos con formato, tablas y un gráfico.

Utilizar una plantilla

Si se usa la automatización para crear documentos que estén en un formato común, puede beneficiarse de iniciar el proceso con un nuevo documento que se basa en una plantilla con formato previo. Mediante una plantilla con la palabra Cliente de automatización tiene dos ventajas importantes sobre la creación de un documento de No hay nada:
  • Puede tener mayor control sobre el formato y ubicación de los objetos a lo largo de los documentos.
  • Puede crear sus documentos con menos código.
Mediante el uso de una plantilla, puede ajustar la colocación de tablas, los párrafos y otros objetos dentro del documento, así como incluir el formato en esos objetos. Mediante la automatización, puede crear un nuevo documento basado en la plantilla con código como el siguiente:
object oTemplate = "c:\\MyTemplate.dot";
oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing,
	ref oMissing, ref oMissing);
				
En la plantilla, puede definir marcadores para que la automatización cliente puede rellenar texto variable en una ubicación específica en el documento, como a continuación:
object oBookMark = "MyBookmark";
oDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Some Text Here";
				
Otra ventaja de utilizar una plantilla es que puede crear y almacenar estilos de formato que desea aplicar en tiempo de ejecución, como sigue:
object oStyleName = "MyStyle";
oDoc.Bookmarks.Item(ref oBookMark).Range.set_Style(ref oStyleName);
				
- o -
object oStyleName = "MyStyle";
oWord.Selection.set_Style(ref oStyleName);
				

Referencias

Para obtener más información, haga clic en los números de artículo siguientes para ver los artículos en Microsoft Knowledge Base:
301659Cómo: Automatizar Microsoft Word para realizar la combinación de correspondencia desde Visual C#.
302902 HOWTO: Enlace para servidores de automatización de Office con Visual C# .NET
Para obtener más información, visite el siguiente Sitios Web de Developer Network (MSDN):
Desarrollo de Microsoft Office con Visual Studio
http://msdn2.Microsoft.com/en-us/library/aa188489 (office.10) .aspx

Palabra en la oficina (artículo de MSDN en línea)
http://msdn2.Microsoft.com/en-us/library/aa201330 (office.11) .aspx

Una palabra más (artículo de MSDN en línea)
http://msdn2.Microsoft.com/en-us/library/aa201332 (office.11) .aspx

Propiedades

Id. de artículo: 316384 - Última revisión: lunes, 13 de mayo de 2013 - Versión: 10.0
La información de este artículo se refiere a:
  • 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
Palabras clave: 
kbautomation kbhowtomaster kbmt KB316384 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 316384

Enviar comentarios

 

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