Principales respuestas
Comunicando Silverlight con Excel

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?.
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
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
-
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 ;-)
-
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 -
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
-
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/