Pages

Monday, May 8, 2017

Dynamic C# para usar Excel sin los Assemblies de InterOp

Vamos a ver como podemos exportar a un archivo Excel desde C# usanto el Interop COM pero sin los assemblies de Interop de Excel. Puede que parezca imposible, pero C# lo hara por ;).

Para este ejemplo, primero creamos una aplicacion tipo Consola:



Ahora vamos a adicionar codigo para exportar datos a una hoja de Excel, pero tomen nota que no adicionamos ninguna referencia extra a algun dll Interop de office, ni adicionamos ningun using especial, Pero vamos a escribir el codigo como si lo hubieramos hecho.


Cuando tratamos de usar funciones especificas que sabemos estan en las librerias del Interop de excel, como el "Visible = true" vemos un error de compilacion, claramente vemos el subrayado rojo.  Esto es porque hemos declarado nuestro excel como un tipo Objeto, lo cual si es, pero no podemos indicar un 'objeto tipo excel' por que no tenemos referencia a las librerias Interop. 


Aqui es cuando haremos uso de ...  redobles por favor ... tipo Dynamic de C#.



Este nos permitira compilar sin problemas, el tipo dynamic aceptara cualquier tipo que le asignemos en tiempo de ejecucion. Solo tenemos que tener cuidado de no hacer llamadas que en tiempo de ejecucion fallarian, como por ejemplo un metodo que no existe en el tipo Excel que recibiremos en tiempo de ejecucion.

Pensemos en Dynamic (al menos en este ejemplo) como decirle al compilador 'Tu tranquilo, yo tengo todo bajo control, en tiempo de ejecucion lo veras'.
El unico costo de usar dynamic es que no tendremos 'intellisense' para ayudarnos a editar nuestro codigo ya que el visual studio no sabe el tipo especifico que recibiremos.

Ahora con el tipo dinamico podemos compilar sin problemas, sin lineas rojas. Solo recuerda, Excel deberia estar instalado en el equipo donde se use la aplicacion para que funcione.


En este caso nuestro objeto dinamico 'excel' sera de tipo 'Excel.Application' pero eso solo pasa en tiempo de ejecucion. Corramos el programa para comprobarlo.



Ahi lo tienen, el tipo Dynamic de C# type nos ayudo a simplificar nuestro codigo.

Y eso, amigos mios, es todo!

No comments:

Post a Comment