Sunteți pe pagina 1din 11

Automatizando Word para que realice una combinacin de correspondencia desde C#

RESUMEN En este artculo se explica cmo automatizar Word para crear un documento de combinacin de correspondencia mediante Microsoft Visual C# .NET. M S INFORMACIN Automatizacin es un proceso que permite que las aplicaciones escritas en lenguajes como Visual C# .NET controlen otras aplicaciones mediante programacin. La Automatizacin de Word permite realizar acciones como crear documentos nuevos, agregar texto a documentos y dar formato a documentos. Con Word y otras aplicaciones de Microsoft Office, casi todas las acciones que puede realizar manualmente mediante la interfaz de usuario pueden realizarse tambin mediante programacin gracias a Automatizacin. Word expone esta funcionalidad de programacin mediante un modelo de objetos. El modelo de objetos es una coleccin de clases y mtodos que actan como contrapartida de los componentes lgicos de Word. Por ejemplo, hay objetos Application, Document y Paragraph, cada uno de los cuales contiene la funcionalidad de dichos componentes en Word. Para tener acceso al modelo de objetos desde Visual C# .NET, puede configurar una referencia de proyecto a la biblioteca de tipos. En este artculo se explica cmo configurar la referencia de proyecto adecuada a la biblioteca de tipos de Word para Visual C# .NET y se incluye cdigo de ejemplo para automatizar Word. Generar el ejemplo de Automatizacin Inicie Microsoft Visual Studio .NET. En el men Archivo, haga clic en Nuevo y, despus, en Proyecto. Seleccione Aplicacin para Windows en los tipos de proyectos de Visual C#. Se crear Form1 de manera predeterminada. Agregue una referencia a la Biblioteca de objetos de Microsoft Word. Para ello, siga estos pasos: En el men Proyecto, haga clic en Agregar referencia. En la ficha COM, busque Biblioteca de objetos de Microsoft Word y haga clic en Seleccionar. NOTA: la Biblioteca de objetos de Word contiene un nmero de versin; la versin para Word 2000 es 9.0 y la de Word 2002 es 10.0.

Haga clic en Aceptar en el cuadro de dilogo Agregar referencias para aceptar sus selecciones. Si se le pregunta si desea generar contenedores para las bibliotecas seleccionadas, haga clic en S. En el men Ver, seleccione Cuadro de herramientas para mostrar el cuadro de herramientas y agregue un botn a Form1. Haga doble clic en Button1. Aparecer la ventana de cdigo del formulario. En la ventana de cdigo, reemplace el cdigo siguiente private void button1_Click(object sender, System.EventArgs e) { } por: Word.Application wrdApp; Word._Document wrdDoc; Object oMissing = System.Reflection.Missing.Value; Object oFalse = false;

private void InsertLines(int LineNum) { int iCount;

// Insertar "LineNum" lneas en blanco. 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)

{ // Insertar los datos en la celda especificada. oDoc.Tables.Item(1).Cell(Row,1).Range.InsertAfter(Text1); oDoc.Tables.Item(1).Cell(Row,2).Range.InsertAfter(Text2); oDoc.Tables.Item(1).Cell(Row,3).Range.InsertAfter(Text3); oDoc.Tables.Item(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);

// Abrir el archivo para insertar datos. //Uso de WORD9: 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); //Uso de WORD10: //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);

for (iCount=1; iCount<=2; iCount++) { oDataDoc.Tables.Item(1).Rows.Add(ref oMissing); } // Llenar los datos. 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"); // Guardar y cerrar el archivo. 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;

// Crear una instancia de Word y hacerla visible. wrdApp = new Word.Application(); wrdApp.Visible = true;

// Agregar un documento nuevo. wrdDoc = wrdApp.Documents.Add(ref oMissing,ref oMissing, ref oMissing,ref oMissing); wrdDoc.Select();

wrdSelection = wrdApp.Selection; wrdMailMerge = wrdDoc.MailMerge;

// Crear un archivo de datos para la combinacin de correspondencia. CreateMailMergeDataFile();

// Crear una cadena e insertarla en el documento. StrToAdd = "State University\r\nElectrical Engineering Department"; wrdSelection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter; wrdSelection.TypeText(StrToAdd);

InsertLines(4);

// Insertar datos de combinacin. 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);

// Justificar a la derecha la lnea e insertar un campo de fecha // con la fecha actual. 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);

// Justificar el resto del documento. wrdSelection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;

wrdSelection.TypeText("Dear ");

wrdMergeFields.Add(wrdSelection.Range, "FirstName"); wrdSelection.TypeText(","); InsertLines(2);

// Crear una cadena e insertarla en el documento. 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);

// Insertar una nueva tabla con 9 filas y 4 columnas. wrdTable = wrdDoc.Tables.Add(wrdSelection.Range,9,4, ref oMissing, ref oMissing); // Configurar los anchos de columna. wrdTable.Columns.Item(1).SetWidth(51, Word.WdRulerStyle.wdAdjustNone); wrdTable.Columns.Item(2).SetWidth(170, Word.WdRulerStyle.wdAdjustNone); wrdTable.Columns.Item(3).SetWidth(100, Word.WdRulerStyle.wdAdjustNone); wrdTable.Columns.Item(4).SetWidth(111, Word.WdRulerStyle.wdAdjustNone); // Configurar el sombreado de la primera fila como gris claro.

wrdTable.Rows.Item(1).Cells.Shading.BackgroundPatternColorIndex = Word.WdColorIndex.wdGray25; // Poner en negrita la primera fila. wrdTable.Rows.Item(1).Range.Bold = 1; // Centrar el texto de la celda (1,1). wrdTable.Cell(1, 1).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

// Llenar con datos todas las filas de la tabla. 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");

// Ir al final del documento. Object oConst1 = Word.WdGoToItem.wdGoToLine; Object oConst2 = Word.WdGoToDirection.wdGoToLast; wrdApp.Selection.GoTo(ref oConst1,ref oConst2,ref oMissing,ref oMissing); InsertLines(2);

// Crear una cadena e insertarla en el documento. StrToAdd = "For additional information regarding the " + "Department of Electrical Engineering, " + "you can visit our Web site at "; wrdSelection.TypeText(StrToAdd); // Insertar un hipervnculo a la pgina Web. 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); // Crear una cadena e insertarla en el documento 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);

// Realizar la combinacin de correspondencia. wrdMailMerge.Destination = Word.WdMailMergeDestination.wdSendToNewDocument; wrdMailMerge.Execute(ref oFalse);

// Cerrar el documento del formulario original. wrdDoc.Saved = true; wrdDoc.Close(ref oFalse,ref oMissing,ref oMissing);

// Liberar las referencias. wrdSelection = null; wrdMailMerge = null; wrdMergeFields = null; wrdDoc = null; wrdApp = null;

// Limpiar el archivo temporal. System.IO.File.Delete("C:\\DataDoc.doc"); } NOTA: tal y como est escrito, este cdigo utiliza la biblioteca de objetos de Word 9.0. Cuando agreg referencias al proyecto, si seleccion la biblioteca de objetos de Word 10.0 en lugar de la de Word 9.0, busque en el cdigo el comentario que contiene "//WORD10" y quite el comentario de la lnea o las lneas de cdigo a las que se refiere dicho comentario. Del mismo modo, si seleccion la biblioteca de objetos de Word 9.0, busque en el cdigo el comentario que contiene "//WORD9" y ponga como comentario la lnea o las lneas de cdigo a las que se refiere el comentario.

por: Presione F5 para generar y ejecutar el programa. por: Haga clic en Button1 para iniciar Automatizacin de Word y realizar la combinacin de correspondencia.

REFERENCIAS Para obtener ms informacin, consulte el sitio Web Microsoft Developer Network (MSDN) siguiente Microsoft Office Development con Visual Studio http://msdn.microsoft.com/library/en-us/dnoffdev/html/vsofficedev.asp

S-ar putea să vă placă și