Continuamos con nuestra serie de entradas destinadas a ver cómo interactuar con distintos programas a través de su API desde una aplicación en NET6 escrita en C#.
En la entrada anterior vimos como conectar Microsoft Word y realizar acciones con el mismo a través de una aplicación en NET6. Comentábamos que uno de los requisitos frecuentes del IoT es la integración de tecnologías. Entre ellas, las APIs de los programas ocupan un lugar especialmente importante.
Comenzamos con el API de las aplicaciones de Microsoft Office porque, como era de esperar al ser del propio Microsoft, están muy bien realizadas y documentadas. Hoy nos toca ver cómo conectar una aplicación de Excel.
Por ejemplo imaginemos que podríamos usar una hoja Excel para registrar los valores que tomamos una medición de un sensor conectado a un ESP32, realizar una serie de gráficas y finalmente guardar este informe en una carpeta de ficheros.
No obstante vuelvo a recordar que, aunque sea una opción interesante, no significa que sea la mejor opción. Por ejemplo, no sería demasiado correcto que empleéis una hoja Excel simplemente como base de datos. O, para evitaros hacer un dashboard con gráficas.
En cada proyecto se debe analizar cuál es la mejor opción, desde el punto de vista global del proyecto. En la mayoría de proyectos usar el API para conectar a una Excel no será la mejor opción. Pero, en ocasiones, puede ser un requisito del proyecto, y por tanto es interesante ser capaz de hacerlo.
Cómo conectar a Microsoft Excel con una aplicación de NET6
Conectarse con el API de Excel va a ser muy similar al ejemplo que vimos para Microsoft Word. 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 Excel. En la pestaña de referencias ‘COM’ buscamos “Microsoft Excel xx.0 Object Library”, donde xx será la versión de Microsoft Excel que tengas instalada en tu ordenador.
A continuación sustituimos el código por el siguiente,
using System.Reflection;
//Start Microsoft.Office.Interop.Excel and get Application object.
var applicationExcel = new Microsoft.Office.Interop.Excel.Application();
applicationExcel.Visible = true;
//Get a new workbook.
var workbook = (Microsoft.Office.Interop.Excel._Workbook)(applicationExcel.Workbooks.Add(Missing.Value));
var worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workbook.ActiveSheet;
//Add table headers going cell by cell.
worksheet.Cells[1, 1] = "A";
worksheet.Cells[2, 1] = "B";
worksheet.Cells[3, 1] = "C";
worksheet.Cells[4, 1] = "D";
//Fill B1:B4 with a formula(=RAND() * 100000) and apply format.
var range = worksheet.get_Range("B1", "B4");
range.Formula = "=RAND() * 100000";
range.NumberFormat = "$0.00";
applicationExcel.Visible = true;
applicationExcel.UserControl = true;
Console.ReadLine();
Qué es una versión resumida y corregida de los ejemplos del propio Microsoft disponibles en este enlace https://learn.microsoft.com/es-es/previous-versions/office/troubleshoot/office-developer/automate-excel-from-visual-c
Si ejecutamos el código, veremos que se inicia una nueva aplicación de Microsoft Excel, rellena las celdas de la prima fila con las letras A-D, y después inserta una fórmula en la segunda fila. Lógicamente en vuestro proyecto, pondríais la lógica oportuna.
Como vemos, no es nada difícil conectarnos con una Microsoft Excel desde una aplicación en NE6. Desde ahí podríamos realizar todas Todas las acciones que normalmente tenemos una hoja Excel, cómo añadir pestañas, fórmulas, gráficas…
Hasta aquí por hoy en la siguiente entrada veremos cómo hacer lo mismo con Microsoft Outlook. ¡Hasta la próxima!
Descarga el código
Todo el código de esta entrada está disponible para su descarga en Github.