Principales respuestas
Enviar MSChart a excel (Lenguaje vb)

Pregunta
-
Hola colegas abusando de su sabiduría nuevamente. Tengo una duda que no he podido resolver, espero ustedes me puedan ayudar.
Lo que deseo hacer y hasta ahora no he podido es mostrar un objeto chart de VS en un libro de excel. Es decir en la aplicación genero un gráfico y deseo poder mostrar este gráfico en Excel no importa que sea como imagen, solamente deseo mostrarlo.
¿Esto es posible? ¿Me pueden orientar?
¿Cómo podría indicar el tamaño y la ubicación?
Respuestas
-
Imports Excel Public Class Form1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim _excel As New Excel.Application Dim _workbook As Excel.Workbook = _excel.Workbooks.Add Dim _worksheet As Excel.Worksheet = CType(_workbook.Worksheets.Add, Excel.Worksheet) Dim _oleObj As Excel.OLEObjects = CType(_worksheet.OLEObjects, Excel.OLEObjects) '_excel.Visible = True Dim png As String = Environment.ExpandEnvironmentVariables("%TEMP%") & "\chart.png" Chart1.SaveImage(png, System.Drawing.Imaging.ImageFormat.Png) _oleObj.Add(Filename:=png, Left:=100, Top:=100) _workbook.SaveAs("c:\walter\libro_chart.xls") _excel.Quit() _worksheet = Nothing _workbook = Nothing _excel = Nothing End Sub End Class
[W]
- Marcado como respuesta Misael 2 viernes, 5 de septiembre de 2014 14:58
-
Eso es OLE. Su fortaleza y su debilidad.
Ni tu programa ni excel se hacen responsables de que el usuario pueda ver la imagen. Esa es responsabilidad del usuario. Él es quien debe instalar el handler que hará el render.
En esta pc evidentemente el handler ole para el png existe porque yo veo la imagen. Probá otro formato, gif/jpg/bmp imagino que alguno tendrás.
---
Si espío en el registro, los archivos png en esta pc tienen registrado un CLSID
[HKEY_CLASSES_ROOT\pngfile\CLSID]
@="{11943940-36DE-11CF-953E-00C0A84029E9}"Si me muevo hasta ese lugar, puedo leer
Fotografía de Microsoft Photo Editor 3.0
C:\PROGRA~1\COMMON~1\MICROS~1\PhotoEd\PHOTOED.EXEEse es el programa pinta la imagen en excel (ole significa que otro es quien se hace cargo). Si lo tienes, puedes ir al registro del pngfile y agregar ese CLSID.
O puedes ir al registro de otras clases de archivos de imagen, ver si tiene un CLSID registrado, buscar el nombre del progra y, si vos sabés que ese programa también trabaja con png, colgar ese mismo CLSID bajo la clave pngfile.
Creo que es todo lo que se precisa para registrar el handler.
[W]
Todas las respuestas
-
Imports Excel Public Class Form1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim _excel As New Excel.Application Dim _workbook As Excel.Workbook = _excel.Workbooks.Add Dim _worksheet As Excel.Worksheet = CType(_workbook.Worksheets.Add, Excel.Worksheet) Dim _oleObj As Excel.OLEObjects = CType(_worksheet.OLEObjects, Excel.OLEObjects) '_excel.Visible = True Dim png As String = Environment.ExpandEnvironmentVariables("%TEMP%") & "\chart.png" Chart1.SaveImage(png, System.Drawing.Imaging.ImageFormat.Png) _oleObj.Add(Filename:=png, Left:=100, Top:=100) _workbook.SaveAs("c:\walter\libro_chart.xls") _excel.Quit() _worksheet = Nothing _workbook = Nothing _excel = Nothing End Sub End Class
[W]
- Marcado como respuesta Misael 2 viernes, 5 de septiembre de 2014 14:58
-
Hola Walter, gracias por tu respuesta seguí tu ejemplo, pero sólo veo el objeto incrustado, como un icono. lo que yo deseo es ver la imagen como tal así como indicarle la posición y el tamaño ya que mostrare varias gráficas en una hoja de excel y deseo poder acomodarlas y darle formato. Además me gustaría que se mostrara en un archivo de excel ya existente para agregarle notas y títulos que ya estén predeterminados.
Espero puedan iluminarme! Gracias por su ayuda.
-
Eso es OLE. Su fortaleza y su debilidad.
Ni tu programa ni excel se hacen responsables de que el usuario pueda ver la imagen. Esa es responsabilidad del usuario. Él es quien debe instalar el handler que hará el render.
En esta pc evidentemente el handler ole para el png existe porque yo veo la imagen. Probá otro formato, gif/jpg/bmp imagino que alguno tendrás.
---
Si espío en el registro, los archivos png en esta pc tienen registrado un CLSID
[HKEY_CLASSES_ROOT\pngfile\CLSID]
@="{11943940-36DE-11CF-953E-00C0A84029E9}"Si me muevo hasta ese lugar, puedo leer
Fotografía de Microsoft Photo Editor 3.0
C:\PROGRA~1\COMMON~1\MICROS~1\PhotoEd\PHOTOED.EXEEse es el programa pinta la imagen en excel (ole significa que otro es quien se hace cargo). Si lo tienes, puedes ir al registro del pngfile y agregar ese CLSID.
O puedes ir al registro de otras clases de archivos de imagen, ver si tiene un CLSID registrado, buscar el nombre del progra y, si vos sabés que ese programa también trabaja con png, colgar ese mismo CLSID bajo la clave pngfile.
Creo que es todo lo que se precisa para registrar el handler.
[W]
-