none
Comunicando Silverlight con Excel RRS feed

  • Pregunta

  • Hace unos días leí un articulo en C# que explicaba cómo hacerlo. La mejor de las explicaciones la encontré en el siguiente enlace (el empleo de range hace que el código sea más claro):

    http://www.vectorlight.net/tutorials/silverlight_4/excel.aspx

    El código en VB.Net es el siguiente:

     

    Option Strict Off
    Imports System.Runtime.InteropServices.Automation
    
    
    Partial Public Class MainPage
      Inherits UserControl
    
      Public Sub New()
        InitializeComponent()
      End Sub
    
      Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
    
        Dim excel = AutomationFactory.CreateObject("Excel.Application")
        excel.Visible = True
    
        Dim workbook As Object = excel.workbooks
        workbook.Add()
    
        Dim sheet As Object = excel.ActiveSheet
        Dim range As Object
    
        range = sheet.Range("A1")
        range.Value = "Hello from Silverlight"
        range = sheet.Range("A2")
        range.Value = "100"
        range = sheet.Range("A3")
        range.Value = "50"
        range = sheet.Range("A4")
        range.Formula = "=@Sum(A2..A3)"
        range.Calculate()
    
      End Sub
    End Class

    Como podeís ver debemos emplear object porque no existe el tipo dynamic en VB.Net (¡Que razón tiene David! ;-)). Según he leído por ahí el tipo dynamic se ha creado para hacer el entorno compatible con otros lenguajes de más alto nivel.

    En VB.Net obliga a declarar Option Strict Off y a inferir tipos. ¿Qué tipo es excel?. Además el intelligence no nos puede ayudar. Como no conozcas las propiedades, objectos, métodos, que quieres emplear vas muy apañado. En fin,...

    La pregunta es la siguiente. En el ejemplo abrimos el excel y activamos un Sheet y lo cargamos, pero si quisieramos cargar tambien otro Sheet, ¿como lo haríamos?.

     

     

    miércoles, 9 de junio de 2010 8:51

Respuestas

  • Hola Corsario.

    Como veo que ya conoces el uso de la interoperabilidad con Excel, te voy a dar otra solucion, esta es la solucion actual y es un standar abierto para otros tipos de documentos no solo de microsoft, se llama OpenXml, es el standard en el que se basan los documentos de la suite office a partir de la version 2007 y mediante este standard ya no es necesario recurrir a la interoperabilidad con los problemas que ello conlleva (lo que has comentado ademas de tener instalado office, permisos elevados, configuracion DCOM, etc.).

    de modo que para comenzar puedes echarle un vistazo a este post que escribi hace tiempo y evaluar otras opciones:

    http://social.msdn.microsoft.com/Forums/es-ES/wpfes/thread/ce043831-d1a8-4ae1-bfe3-4fe13377a797

     


    Saludos
    David González
    • Marcado como respuesta CorsarioVasco miércoles, 9 de junio de 2010 12:40
    miércoles, 9 de junio de 2010 10:38

Todas las respuestas

  • Hola Corsario.

    Como veo que ya conoces el uso de la interoperabilidad con Excel, te voy a dar otra solucion, esta es la solucion actual y es un standar abierto para otros tipos de documentos no solo de microsoft, se llama OpenXml, es el standard en el que se basan los documentos de la suite office a partir de la version 2007 y mediante este standard ya no es necesario recurrir a la interoperabilidad con los problemas que ello conlleva (lo que has comentado ademas de tener instalado office, permisos elevados, configuracion DCOM, etc.).

    de modo que para comenzar puedes echarle un vistazo a este post que escribi hace tiempo y evaluar otras opciones:

    http://social.msdn.microsoft.com/Forums/es-ES/wpfes/thread/ce043831-d1a8-4ae1-bfe3-4fe13377a797

     


    Saludos
    David González
    • Marcado como respuesta CorsarioVasco miércoles, 9 de junio de 2010 12:40
    miércoles, 9 de junio de 2010 10:38
  • No te acostarás sin saber una cosa más. Que grande eres !!!! ;-)

    Lo había resuelto tal y como lo indica el siguiente blog http://www.rshelby.com/post/creating-excel-worksheet-from-silverlight.aspx Eso si, retocando algo de código ;-).

    Es una solución muy parecida a la que me planteas (la tuya la desconocía). Voy a analizarla con tiempo porque me da que esta más evolucionada que ir poniendo manualmente las instrucciones ;-).

    Además, quería probar a hacer un documento word como plantilla donde esten marcados ciertos campos y desde el programa ir pasándole los valores para generar un informe.

    Gracias y que tengas un buen día ;-)

    miércoles, 9 de junio de 2010 12:40
  • Hola Corsario.

    gracias, pero aun soy muy pequeño en este mundo <:).

    Te comento algo de experiencia que he tenido:

    para hacer cosas sencillas y en una aplicacion de escritorio, lo mas probable es que la interoperabilidad como en el link que has puesto sea la mejor forma (o al menos la mas facil).

    No obstante en el mundo web yo he usado interop casi toda la vida y he perdido muchas horas solucionando errores de tipo en un servidor funciona y en otro no, y todos ellos debido a permisos y librerias de office.

    Cuando hace 1 año conoci OpenXml, comence a usarlo y me cambio la vida, cuando aprendes a usarlo es relativamente sencillo y si no sabes como se programa algo tan solo tienes que abrir excel (word, powerpoint, etc) y hacerlo, luego depuras en VS y copias la etiqueta xml que ha generado ese elemento, tras lo cual ya esta todo echo, solo tienes que insertar ese xml donde quieras (respetando algunas normas) y ya esta. Esto lo hice yo para crear firmas en documentos Ofiicce, al final me cree una funcion que te hace firmas, incluso te modifica la imagen de la firma.

    Bueno, todabia no es muy conocido y poca gente habla de el, yo siempre doy esta alternativa por que la experiencia que he tenido a la larga es muy superior al uso de interop (y encima un formato libre, para que luego hablen de microsoft).


    Saludos
    David González
    miércoles, 9 de junio de 2010 14:29
  • Buenos dias, buscando y buscando he dado con este hilo, y por no abrir otro... pues expongo aqui mis duda. He visto la libreria OpenXML y la he intentado probar con Silverlight, el tema es que no puedo agregar la DLL. ¿Esta libreria solo trabaja con WPF?

    Edito: Lo que quiero conseguir es leer un archivo EXCEL para importarlo a un DataGrid de Silverlight. Todo lo que he visto es para escribir o exportar.....

    • Editado osmagarci miércoles, 5 de diciembre de 2012 11:52
    miércoles, 5 de diciembre de 2012 10:36
  • Hola osmagarci.

    OpenXml no esta disponible para silverlight, silverlight deberia de ser lo mas ligero posible ya que se envia al cliente desde el servidor, aunque portaras la libreria no tendria mucha eficacia enviarla al cliente.

    A fin de cuentas como silverlight trabaja conjuntamente con un servidor, lo ideal es trabajar del mismo modo que con bases de datos, la idea es exponer un servicio que realice las operaciones que quieras en el serividor y este retorne los datos necesarios a silverlight para su presentacion (que a fin de cuentas es lo unico que debe hacer silverlight, presentar datos en un cliente).

    No obstante si aun asi quieres trabajar con documentos de office, silverlight desde la version 4 tiene la capacidad de acceder a los objetos COM del sistema, de modo que puedes hacer uso de los componentes COM de office (obviamente tienen que estar instalados en el cliente, de modo que vamos a lo mismo, lo ideal es hacerlo todo en el servidor).

    Te paso un link con esto ultimo:

    http://www.codeproject.com/Articles/83996/Silverlight-4-Interoperability-with-Excel-using-th

    Pero te recomiendo que uses OpenXml en el servidor para realizar las tareas que quieras.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    miércoles, 5 de diciembre de 2012 22:08