net6-word

Cómo conectar con el API de Microsoft Word desde NET6

Comenzamos una nueva serie de entradas destinadas a ver como interactuar con distintos programas a través de su API desde una aplicación en NET6 escrita en C#.

Dentro del campo del IoT suele ser frecuente en la necesidad de combinar o acceder a distintos programas dentro de un chisme que inicia la comunicación. Por ejemplo podríamos colocar un sensor conectado con a un ESP32 y, en cierto momento, generar un informe en un fichero Word, imprimirlo, guardarlo en una base de datos o mandarlo por email, por ejemplo.

Esta capacidad de integración es una de las características que tradicionalmente ha sido más fuerte en un sistema operativo Windows. Para ello se disponen de distintos mecanismos como el modelo de objetos COM o ActiveX o más recientemente el entorno de NET.

Poder interactuar con un programa a partir de su API no significa que sea la mejor opción posible. De hecho, en general, debería ser la última opción a elegir. En muchas ocasiones, es evitable planteando el proyecto de forma distinta. Sin embargo, en muchas ocasiones es un requisito del proyecto.

En cualquier caso vamos a ver en esta serie como actuar con distintos programas a través de su API, desde una aplicación de NET6 escrita en C#. Vamos a comenzar por Microsoft Word, de sobra conocidos por todos.

Lógicamente, al ser una aplicación de la propia Microsoft, como veremos la integración con .NET es muy buena. Además, la estructura y el API que ofrece Microsoft para sus aplicaciones, como Word, es excelente.

Cómo conectar a Microsoft Word con una aplicación de NET6

Para este ejemplo, en primer lugar crearemos una simple aplicación de console de NET6. A continuación, debemos añadir las referencias a los ensamblados propios de Microsoft Word.

Para ello, hacemos click en “Herramientas” y seleccionamos “Referencias” en el menú desplegable. Aquí elegimos “Agregar referencias” y seleccionamos “Bibliotecas de componentes COM”, en la pestaña “Componentes COM”

Añadimos “Microsoft Word xx.0 Object Library” en la lista de componentes, donde xx representa la versión de Microsoft Word que tengas instalada en tu ordenador.

A continuación, copiamos este código, que es una versión resumida y corregida de los propios ejemplos de Microsoft.

using Microsoft.Office.Interop;
using System.Reflection;

object missing = Missing.Value;
object endOfDoc = "\\endofdoc";

var applicationWord = new Microsoft.Office.Interop.Word.Application();
applicationWord.Visible = true;

var document = applicationWord.Documents.Add(ref missing, ref missing, ref missing, ref missing);

//Insert a paragraph at the end of the document.
object selectionRange = document.Bookmarks.get_Item(ref endOfDoc).Range;
var paragraph2 = document.Content.Paragraphs.Add(ref selectionRange);
paragraph2.Range.Text = "Heading 2";
paragraph2.Format.SpaceAfter = 6;
paragraph2.Range.InsertParagraphAfter();

//Insert another paragraph.
selectionRange = document.Bookmarks.get_Item(ref endOfDoc).Range;
var paragraph3 = document.Content.Paragraphs.Add(ref selectionRange);
paragraph3.Range.Text = "This is a sentence of normal text. Now here is a table:";
paragraph3.Range.Font.Bold = 0;
paragraph3.Format.SpaceAfter = 24;
paragraph3.Range.InsertParagraphAfter();

//Insert a 3 x 5 table, fill it with data, and make the first row bold and italic.
var wordRange = document.Bookmarks.get_Item(ref endOfDoc).Range;
var table = document.Tables.Add(wordRange, 3, 5, ref missing, ref missing);
table.Range.ParagraphFormat.SpaceAfter = 6;
int row, column;
string strText;
for (row = 1; row <= 3; row++)
    for (column = 1; column <= 5; column++)
    {
        strText = "r" + row + "c" + column;
        table.Cell(row, column).Range.Text = strText;
    }
table.Rows[1].Range.Font.Bold = 1;
table.Rows[1].Range.Font.Italic = 1;

Console.ReadLine();

Con este código, hemos generado un nuevo documento Word, añadido un par de párrafos y una tabla. Nada dificil. Tenéis más información sobre el API de Microsoft Word en NET en este enlace https://learn.microsoft.com/es-es/previous-versions/office/troubleshoot/office-developer/automate-word-create-file-using-visual-c

Así de sencillo. En la próxima entrada de la serie veremos cómo hacer algo parecido usando Microsoft Excel.

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full