Desde VFP y con Automation, insertamos una imagen en Excel y le configuramos su tamaño.
LOCAL lcImagen, lcPlanilla, lo *-- Selecciono imagen y nombre de planilla (xls) lcImagen = GETPICT() lcPlanilla = PUTFILE("Nombre","MiPlanilla","xls") *-- Creo objeto Excel lo = CREATEOBJECT("Excel.Application") *-- Añado un libro nuevo lo.Workbooks.Add *-- Selecciono la celda donde estará la posición de la imagen lo.Cells(3,3).Select lo.ActiveSheet.Pictures.Insert(lcImagen).Select lo.Selection.ShapeRange.LockAspectRatio = 0 lo.Selection.ShapeRange.Height = 320 && pixeles lo.Selection.ShapeRange.Width = 240 && pixeles *-- Guardo planilla lo.ActiveWorkbook.SaveAs(lcPlanilla) lo.Quit lo = .Null.
Luis María Guayán
Buenos días. Utilicé tu propuesta y funciona, pero cuando abro el excel en otro equipo, ya no muestra las imágenes, como que guardara solo el "link" y no la imagen en sí. ¿Alguna idea?
ResponderBorrarHola ami tambien me pasa lo mismo, encontraron cual es la solucion?
ResponderBorrarEl problema efectivamente es que solo se guarda un link, para guardar la imagen en sí deberás de utilizar la instrucción oAplicacion.ActiveSheet.Shapes.AddPicture().
ResponderBorrarPero ahora tenemos otro problema, ya que aquí no se marca la celda en la que se inserta, sino la posición en la que se quiere insertar de la hoja, y por tanto hay que calcularla antes.
En este caso, como además las imágenes tenían distintos tamaños, las reduzco para que todas encajen en la celda correspondiente.
IF FILE("&lcImagen")
* Carga imagen
_SCREEN.oImg.PICTURE = lcImagen
_SCREEN.oImg.STRETCH = 0
ancho2=_SCREEN.oImg.WIDTH
alto2=_SCREEN.oImg.HEIGHT
Ancho=INT(20*ancho2/alto2) &&calcula el ancho para 20 pixeles de alto
Alto=20
IF Ancho>140 && Si aún así sobrepasa los 140 pixeles de ancho, se reduce aún más
Alto=INT(140*Alto/Ancho)
Ancho=140
ENDIF
* Calcular la posición de la celda
Izquierda = 268
Arriba = -34 + tuFila * 21 && Mis celdas tienen una altura de 21 pixeles
oAplicacion.ActiveSheet.Shapes.AddPicture(lcImagen, .F., .T., Izquierda, Arriba, Ancho, Alto)
ENDIF
hola: he probado este codigo y no me funciona, olmg no me toma o es una variable?
BorrarLuis María Guayán.
ResponderBorrarCon el Objetivo de asegurar que la imágenes queden guardadas en el Libro de Excel y superar el inconveniente de que no se muestren en otra PC, les hago el siguiente ajuste:
If File(lcImagen)
*-- Selecciono la celda donde estará la posición de la imagen
lo.Cells(lnFila,1).Select
lo.Selection.RowHeight = 35
*-- Insertamos la imagen y luego se redimensiona
With lo.ActiveSheet.Shapes.AddPicture(lcImagen, .F., .T., 0, 0, -1, -1)
.LockAspectRatio = 0
.Top = lo.ActiveCell.Top
.Left = lo.ActiveCell.Left
.Width = lo.ActiveCell.Width
.Height = lo.ActiveCell.Height
Endwith
Endif
Con ésto se asegura que la imágenes queden ajustadas al ancho y alto de la celda.
Saludos desde Nicaragua.
Allan Raúl Acuña
-NicaFox-