[VFP] Automatización Excel

3,388 views
Skip to first unread message

Hernandez Gabriel

unread,
Oct 8, 2012, 4:57:43 PM10/8/12
to publice...@googlegroups.com
Hola, buenas tardes a todos.

Estoy automatizando Excel, tratando de colocar una imagen, lo he logrado, pero, en Excel 2003 se ve correcto, pero en Excel 2007 no se ve correcto, las lineas que utilizo para insertar la imagen son:

XLApp.APPLICATION.activeworkbook.activesheet.cells(1,1).SELECT
XLSheet.APPLICATION.activeworkbook.activesheet.Pictures.Insert(sys(5)+curdir()+"temp\logo.png")

Adjunto dos imagenes para que vean las diferencia, no logro que queden ambas correctas.

Si, alguien tiene una sugerencia, se lo agradecería.

Atte.

Gabriel
excel2003.jpg
excel2007.jpg

Jairo Miranda

unread,
Oct 8, 2012, 5:34:14 PM10/8/12
to publice...@googlegroups.com

Orale que bueno, yo estoy tratando de hacer lo mismo pero para la lista de productos, es decir que cada imagen quede en la misma fila columna del código del producto.

 

Voy a probar tu código y hacer pruebas y te escriob ok

 

JM

--
 
 
 

gonzal...@hotmail.com

unread,
Oct 8, 2012, 5:43:57 PM10/8/12
to publice...@googlegroups.com
    hoja = CREATEOBJECT('Excel.Application')

    hoja.application.sheets(.ActiveSheet.name).Pictures.Insert(uni+"logo.JPG").select
    hoja.Selection.ShapeRange.LockAspectRatio = 0
    hoja.Selection.ShapeRange.Top =0
    hoja.Selection.ShapeRange.Left = 0

Esa es la forma de poner el grafico en la esquina superior izquierda


Hernandez Gabriel

unread,
Oct 8, 2012, 7:48:45 PM10/8/12
to publice...@googlegroups.com
Gracias, lo pude resolver.

Copia el código completo por si le sirve a alguien

if used("VerActividades")
try
SELECT VerActividades
GO top
EXPORT TO SYS(5)+CURDIR()+"informes\Actividades" TYPE XL5 FIELDS activo1, fecha, actividad, tipoactividad, centro 

**** COLOCAR ENCABEZADO DEL EXCEL
LOCAL i,j,TrendFunc,xlsheet,XLApp,tmpsheet

XLAPP = Createobject("Excel.Application")
IF TYPE("XlApp")="O"

a=SYS(5)+CURDIR()+"informes\Actividades.xls" 

XLApp.WorkBooks.add(a)
XLSheet = XLApp.ActiveSheet

XLApp.APPLICATION.activeworkbook.activesheet.cells(1,1).SELECT
XLApp.APPLICATION.activeworkbook.activesheet.cells(1,1).value="Activo"
XLApp.APPLICATION.activecell.FONT.SIZE = 14
XLApp.APPLICATION.activecell.FONT.Bold = .F.
XLApp.APPLICATION.activecell.FONT.Italic = .F.
XLApp.APPLICATION.activecell.Interior.ColorIndex = 15
XLApp.APPLICATION.activecell.Interior.PATTERN = 1

XLApp.APPLICATION.activeworkbook.activesheet.cells(1,2).SELECT
XLApp.APPLICATION.activeworkbook.activesheet.cells(1,2).value="Fecha"
XLApp.APPLICATION.activecell.FONT.SIZE = 14
XLApp.APPLICATION.activecell.FONT.Bold = .F.
XLApp.APPLICATION.activecell.FONT.Italic = .F.
XLApp.APPLICATION.activecell.Interior.ColorIndex = 15
XLApp.APPLICATION.activecell.Interior.PATTERN = 1

XLApp.APPLICATION.activeworkbook.activesheet.cells(1,3).SELECT
XLApp.APPLICATION.activeworkbook.activesheet.cells(1,3).value="Actividad"
XLApp.APPLICATION.activecell.FONT.SIZE = 14
XLApp.APPLICATION.activecell.FONT.Bold = .F.
XLApp.APPLICATION.activecell.FONT.Italic = .F.
XLApp.APPLICATION.activecell.Interior.ColorIndex = 15
XLApp.APPLICATION.activecell.Interior.PATTERN = 1

XLApp.APPLICATION.activeworkbook.activesheet.cells(1,4).SELECT
XLApp.APPLICATION.activeworkbook.activesheet.cells(1,4).value="Tipo de Actividad"
XLApp.APPLICATION.activecell.FONT.SIZE = 14
XLApp.APPLICATION.activecell.FONT.Bold = .F.
XLApp.APPLICATION.activecell.FONT.Italic = .F.
XLApp.APPLICATION.activecell.Interior.ColorIndex = 15
XLApp.APPLICATION.activecell.Interior.PATTERN = 1

XLApp.APPLICATION.activeworkbook.activesheet.cells(1,5).SELECT
XLApp.APPLICATION.activeworkbook.activesheet.cells(1,5).value="Centro"
XLApp.APPLICATION.activecell.FONT.SIZE = 14
XLApp.APPLICATION.activecell.FONT.Bold = .F.
XLApp.APPLICATION.activecell.FONT.Italic = .F.
XLApp.APPLICATION.activecell.Interior.ColorIndex = 15
XLApp.APPLICATION.activecell.Interior.PATTERN = 1

FOR i=1 TO 4
XLSheet.Rows("1:1").Insert
ENDFOR

***** combinar celdas para el logo
XLApp.APPLICATION.activeworkbook.activesheet.range("A1:B2").SELECT
XLApp.APPLICATION.activeworkbook.activesheet.range("A1:B2").Merge

***** combinar celdas para los datos de la empresa
XLApp.APPLICATION.activeworkbook.activesheet.range("C1:E2").SELECT
XLApp.APPLICATION.activeworkbook.activesheet.range("C1:E2").Merge

***** combinar celdas para el titulo del imforme
XLApp.APPLICATION.activeworkbook.activesheet.range("A3:E3").SELECT
XLApp.APPLICATION.activeworkbook.activesheet.range("A3:E3").Merge

***** cambiar tamaño de la celda para el logo
XLApp.APPLICATION.activeworkbook.activesheet.range("A1:E1").SELECT
XLSheet.Rows(1).RowHeight=50

***** cambiar tamaño de la celda para el titulo
XLApp.APPLICATION.activeworkbook.activesheet.range("C3:E3").SELECT
XLSheet.Rows(3).RowHeight=20

***** colocamos el titulo
XLApp.APPLICATION.activeworkbook.activesheet.cells(3,1).SELECT
XLApp.APPLICATION.activeworkbook.activesheet.cells(3,1).value="Actividades del Centro"
XLApp.APPLICATION.activecell.FONT.SIZE = 16
XLApp.APPLICATION.activecell.FONT.Bold = .T.
XLApp.APPLICATION.activecell.FONT.Italic = .T.
XLApp.APPLICATION.activecell.HorizontalAlignment=-4108

***** colocamos el logo
XLApp.APPLICATION.activeworkbook.activesheet.cells(1,1).SELECT
XLSheet.Pictures.Insert(sys(5)+curdir()+"temp\logo.png").name="Logo"
XLSheet.Shapes("Logo").Top =0
XLSheet.Shapes("Logo").Left =0

datosempresa="Escuela de Natha Yoga"+CHR(13)+"Avenida 59 Nº 2322"+CHR(13)+"(02262)-522201"

 TEXT TO datosempresax NOSHOW ADDITIVE TEXTMERGE PRETEXT 2
    <<datosempresa>>
 ENDTEXT

***** colocamos los datos de la empresa    
XLApp.APPLICATION.activeworkbook.activesheet.range("C1:C1").SELECT
XLApp.APPLICATION.activeworkbook.activesheet.range("C1:C1").VALUE=datosempresax
XLApp.APPLICATION.activecell.FONT.SIZE = 10
XLApp.APPLICATION.activecell.FONT.Bold = .F.
XLApp.APPLICATION.activecell.FONT.Italic = .F.
XLApp.APPLICATION.activecell.HorizontalAlignment=-4152
XLApp.APPLICATION.activecell.VerticalAlignment=-4107

**** nos situamos en la primera celda con formato
XLApp.APPLICATION.activeworkbook.activesheet.cells(5,1).SELECT

XLApp.COLUMNS.AUTOFIT

_SCREEN.oRibbon.MESSAGEBOX("SE HAN EXPORTADO LOS DATOS." ,"16" ,"ATENCIÓN" ,"Aceptar" ,"ABOUT32.PNG" ,0)

XLApp.Visible = .T. 
RELEASE XLApp

ELSE
_SCREEN.oRibbon.MESSAGEBOX("No tiene instalado Excel o no está registrado correctamente." ,"16" ,"FALTAN DATOS" ,"Aceptar" ,"ABOUT32.PNG" ,0)
 
ENDIF

catch

_SCREEN.oRibbon.MESSAGEBOX("NO HAY DATOS PARA EXPORTAR." ,"16" ,"ATENCIÓN" ,"Aceptar" ,"ABOUT32.PNG" ,0)
ENDTRY

else
_SCREEN.oRibbon.MESSAGEBOX("NO HAY DATOS PARA EXPORTAR." ,"16" ,"ATENCIÓN" ,"Aceptar" ,"ABOUT32.PNG" ,0)

ENDIF




--
 
 
 

Jairo Miranda

unread,
Oct 9, 2012, 2:05:54 PM10/9/12
to publice...@googlegroups.com

Buenas tardes

Estoy publicando el programa que hice para automatización Excel , si alguien lo puede mejorar, espero sirva ..

.Creo un cursor con los datos de la facturación , incluyendo un campo fotos donde llevo la trayectoria de la fotografía del producto . si no existe muevo la trayectoria de una imagen ya creada llamada nofoto.jpg

 

SELECT Ventas.cliente, Ventas.num_ped, Ventas.fecha, Ventas.num_fact,Ventas.pkgs, Ventas.Bultos as bultos1, Ventas.pieza as pesoneto,;

  Ventas.terminos, Ventas.termin, Ventas.manejo, Ventas.seguros, Ventas.ciudad, Ventas.Usu88 as telefono,;

  Ventas.flete, Ventas.direccion, Ventas.vendedor, nomvend AS Nvendedor ,Ventas.pais_dest,Ventas.gasto1,;

  Ventas.nomb_dest2, Ventas.marcas, " " as lugar,Ventas.pais,detallev.detalle2, detallev.cod_prod, detallev.detalle as detalle, detallev.unidad,Ventas.cubicaje,;

  SUM(detallev.cantidad) AS CANTIDAD, detallev.bultos,detallev.peso_b, detallev.precio,SUM( detallev.monto) as monto,;

  Ventas.b4 as Gasto2, Ventas.b4 AS Gastos2, Ventas.Gasto3, Ventas.Valor_p,Ventas.Composicio,;

  SPACE(80) as fotos;  

 FROM ;

     miranda!Ventas ;

    INNER JOIN miranda!detallev ;

   ON  Ventas.id = detallev.id ;

WHERE  Ventas.id = Thisform.Gframes1.Page1.ID1.Value AND Detallev.Cod_prod # " ";

GROUP BY detallev.cod_prod;

 INTO CURSOR Query2 READWRITE

 IF RECCOUNT()>0

    SELECT Query2

    GO top

    DO WHILE !EOF()

       STORE cod_prod TO m.cod_prod

       SELECT imagenes

       SET ORDER to tag cod_prod

       IF SEEK(UPPER(ALLTRIM(m.cod_prod)))

          STORE fotos TO m.fotos

          SELECT Query2

          replace Query2.fotos WITH ALLTRIM(FULLPATH(m.fotos))

       ELSE

          replace Query2.fotos WITH FULLPATH("Z:\IMAGES\NOFOTO.JPG")

       ENDIF

       SKIP

    ENDDO

    SELECT Query2

    GO TOP

                               oExcel = Createobject('Excel.Application') 

                               With oExcel      

                                 .WorkBooks.Add 

                                 .Visible = .T. 

                                 With .ActiveWorkBook.ActiveSheet 

                                   Local loRange  , WFila , WColum, WTrange, Cfila, Ccolum, Wcfila, WcColum, tfila, tColum

                                   STORE 0 TO Wcfila, WcColum , tfila, tColum, Cfila, Ccolum

                                   .Cells(1,1)=("Cia:") && A

                                               ***********************************

                                               .Cells(2,1)=("Cliente:") +ALLTRIM(cliente)+" "+ALLTRIM(pais_dest)&& A

                                               .Cells(3,1)=("Dirección:") && A

                                               .Cells(4,1)=("Telefonos:") && A

                                               .Cells(2,4)=("Fecha:")+DTOC(fecha) && A

                                               .Cells(3,4)=("No Pedido:")+ALLTRIM(num_ped) && A

                                               .Cells(4,4)=("No Factura:") +ALLTRIM(num_fact)&& A

                                               .Cells(5,1)=("Referencia") && A

                                               .Cells(5,2)=("Descripción") && B

                                               .Cells(5,3)=("Cantidad")  && C

                                               .Cells(5,4)=("Precio")   && D

                                               .Cells(5,5)=("Monto")    && F

                                   STORE 8 TO Cfila

                                   STORE 12 TO Ccolum

                                   fila=6

                                   DO while !EOF()

                                  

                                    tfila = Cfila

                                    tColum = Ccolum

 

                                                               *.Rows(fila).RowHeight=100

                                                               .Cells(Cfila,1)=(TRANSFORM(Query2.Cod_prod,"####################"))  && A

                                                               .Cells(Cfila,2)=(TRANSFORM(Query2.Detalle,"########################################")) && B

                                                               .Cells(Cfila,3)=(Query2.cantidad)  && C

                                                               .Cells(Cfila,4)=(Query2.precio)  && D

                                                               .Cells(Cfila,5)=(Query2.monto)  && E

             fila = fila + 6

                                    WFila='F'+ALLTRIM(STR(Cfila))

                                    WColum='F'+ALLTRIM(STR(Ccolum))

                                    WTrange=WFila+":"+WColum

                             loRange = .Range(WTrange) 

                            .Shapes.AddPicture(FULLPATH(Query2.fotos), .T., .T., loRange.Left, loRange.Top, loRange.Width, loRange.Height)    && F

                                     SKIP

                                     wCfila  =  tfila+ 6

                                     wCcolum =  tcolum + 6

                                     cfila = wCfila

                                     cColum = wCcolum

                                   ENDDO  

                                 Endwith 

                               Endwith 

                                                              

ELSE

     WAIT WINDOW NOWAIT "No existen registros, por favor verifique....."         

 ENDIF    

 

SELECT Ventas

thisform.Refresh

   IF RECCOUNT()>0

  

   ELSE

       =messagebox("Parece ser que alguno de los documentos seleccionados no tiene información en el detalle o no existe el mismo.....por favor verifique y vuelva a intentarlo",16,"!! Atención....")           

   ENDIF       

Thisform.refresh

RELEASE Cursor_a

 

JM

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Hernandez Gabriel
Enviado el: lunes, 8 de octubre de 2012 15:58
Para: publice...@googlegroups.com
Asunto: [vfp] [VFP] Automatización Excel

 

Hola, buenas tardes a todos.

--
 
 
 

Jairo Miranda

unread,
Jun 24, 2014, 8:21:12 AM6/24/14
to publice...@googlegroups.com

Buenos días foro.. encontre este hilo sobre automatización y se me ha pedido haga lo mismo, de la siguiente forma.

 

En la celda A1 tengo la referencia o código del producto  y en un una carpeta tengo las imágenes de cada producto, se me pide entonces insertar la foto o imagen de cada producto en la celda  B1, y asi sucesivamente. lo hice al desde un archivo de texto a Excel , el problema es hacerlo directamente en la hoja o sea importo la hoja de Excel a texto, de texto a DBF, y de Dbf a Excel insertando la imagen , pero ese proceso es muy largo , si alguien tiene una idea o un ejemplo podría ´por favor ayudarme?

 

Gracias

 

JM

 

 

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Hernandez Gabriel
Enviado el: lunes, 8 de octubre de 2012 3:58
Para: publice...@googlegroups.com
Asunto: [vfp] [VFP] Automatización Excel

 

Hola, buenas tardes a todos.

--
 
 
 

Alejandro P

unread,
Oct 9, 2012, 3:13:54 PM10/9/12
to publice...@googlegroups.com
Hola!

yo utilizo esto para poner una imagen en una fila y columna

      pic=ALLTRIM(directorioimagen)+"\imagenes\"+ALLTRIM(llaveprodu)+".jpg"
      IF file(pic)=.T.
         XLSheet.Cells(fila,9).Select
         XLSheet.Pictures.Insert(pic).Select
         XLApp.Selection.ShapeRange.LockAspectRatio = 0
         XLApp.Selection.ShapeRange.Height = 42
         XLApp.Selection.ShapeRange.Width = 34 
         XLSheet.Rows(fila).RowHeight=45
      ENDIF

Espero les sirva

saludos!
--
 
 
 

Reply all
Reply to author
Forward
0 new messages