8 de agosto de 2018

Copiar todo el contenido de un GRID a una hoja de cálculo de Excel

A veces puede ser cómodo utilizar VFP para calcular, extraer o preparar una vista, la cual puede ser visualizada utilizando un GRID. Pero no hay duda que una hoja de cálculo de Excel ofrece muchas mas posibilidades para elaborar, analizar y estudiar los datos preparados, o simplemente el usuario a veces sabe manejar bien Excel y prefiere usar esta herramienta.

VFP tiene una gran integración con estos sistemas y veremos lo fácil que es copiar el contenido de un GRID en una hoja de Excel.

Lo único que necesitamos es unas pocas líneas de código que podríamos poner, por ejemplo, en el evento click de un botón. Imaginando que el botón esté en el mismo formulario que el grid, el código será el siguiente:

LOCAL cErrores, lExcel

* BUSCO UNA SESION DE EXCEL YA ACTIVA:
cErrores = ON("ERROR")
ON ERROR lExcel = .F.
oExcel = GetObject(,"excel.application")
ON ERROR &cErrores

IF TYPE("oExcel")    * NO ESTABA ACTIVA. PREPARO UNA NUEVA SESION DE EXCEL:
   oExcel = CREATEOBJECT("Excel.Application")
ENDIF
oExcel.VISIBLE = .T.    && VISUALIZO EXCEL
oExcel.Workbooks.ADD    && PREPARO UN NUEVO TRABAJO DE EXCEL

SELE (THISFORM.GRID1.RECORDSOURCE)
GO TOP
nRows = 0
* EMPIEZO A CARGAR LA HOJA DE EXCEL LEYENDO LA ESTRUCTURA DEL GRID:
WITH THISFORM.GRID1
   SCAN
      nRows = nRows + 1
      FOR nColumn = 1 TO .COLUMNCOUNT
         oExcel.Cells(nRows,nColumn) = EVAL(.COLUMNS(nColumn).CONTROLSOURCE)
      NEXT nColumn
   ENDSCAN
ENDWITH

Pablo Roca

2 comentarios :

  1. Muy buena rutina.
    Hice una corrección que me daba error IF TYPE("oExcel") != "O"
    Gracias

    ResponderBorrar
  2. buen dia, muchas gracias. una consulta, como se haria para q copie los nombres de columnas, gracias

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.