Re: C2E (_Copy2Excel) Otra función para copiar a Excel... jejeje

553 views
Skip to first unread message
Message has been deleted

Alejandro García Garay

unread,
Sep 15, 2023, 5:21:19 PM9/15/23
to Comunidad de Visual Foxpro en Español
Excelente aporte, lo probe y hasta ahora me a funcionado bien. Yo utilizaba otro y para facilitar el uso hice un procedimiento que adapte para este, acá se los dejo, pueden mejorarlo (deben darcargar C2E, es para utilizarlo de manera mas práctica:

*===========================================================================
*--------------------------------------------------------
*--- Procedimiento ToExcelNew
* Autor: Alejandro García 2023
* Usa el prg C2E (_Copy2Excel) de Walter Valle descargarlo en: https://github.com/wvalle/C2E
*
* Procedimieno para guardar una tabla de manera sencilla en un archivo de Excel en formato XLSX
* Por defecto lo guarda en la carpeta C:\Temp.
*
* Parámetros:
* tcNomArc: Nombre del archivo generado, si no se envia toma el mismo nombre de la tabla con la que se genera.
* tcRuta: Es la ruta a donde se va a guardar el archivo, si no existe por defecto lo guarda en "C:\Temp"
* tlTotales: Parámetro lógico. Si desea que el archivo en Excel totalice una o más columnas, recibe .F. (NO TOTALIZA) o .T. (TOTALIZA Y DEBE PASAR LAS COLUMNAS)
* tcListatotales: Si se desea totalizar algunas columnas, se debe pasar la lista con los nombres separados por coma de las columnas a totalizar. Algo a tener en cuenta:
* para que se pueda relizar la totalización, las columnas deben ser númericas.
* tlOW: Logico, si se desea reemplazar o no el el archivo si existe, pregunta para este efecto.
*
* Ej.: ToExcelNew([EjemploCT], [C:\Temp\], .T., [Precio,Stock], .F.)
* El ejmplo guarda el archivo con el nombre EjemploCT.xlsx en la carpeta C:\Temp\ y totaliza las columnas Preico y Stock
*
* SELECT Clientes
* ToExcelNew(, [C:\Temp\], .F., , .F.)
* Se guarda el arhcivo con el nombre de la tabla en este caso Clientes.xlsx en la carpeta C:\Temp\ y no totaliza ninguna columna
* Se recomienda no usar la extensión en el parametro del nombre del arhcivo.
*---------------------------------------------
PROCEDURE ToExcelNew
LPARAMETERS tcNomArc, tcRuta, tlTotales, tcListaTotales, tlOW

*--- Para saber si eliminamos primeramente el archivo si ya existe
IF TYPE("tlOW") # "L"
lcOW = .F.
ELSE
lcOW = tlOW
ENDIF

*--- Para determinar si el archivo de salida va a tener o no totales en las columnas númericas
IF TYPE("tlTotales") # "L"
llTotales = .F.
ELSE
llTotales = tlTotales
ENDIF

IF llTotales
IF EMPTY(ALLTRIM(tcListatotales))
MESSAGEBOX([Señor Usuario: debe dar la lista de columnas a totalizar], 0 + 16, [Error: faltan parámetros])
RETURN
ELSE
lcListaTotales = tcListaTotales
ENDIF
ENDIF

lcName = IIF(TYPE("tcNomArc") = "L", ALIAS(), ALLTRIM(tcNomArc))
lcRuta = IIF(VARTYPE(tcRuta) # "C" OR EMPTY(tcRuta), ;
"C:\Temp\", tcRuta)
lcNombre = lcRuta + ALLTRIM(lcName) + '.XLSX'

IF lcOW
DELETE FILE &lcNombre RECYCLE
ENDIF

WaitWindowCentrado("Generando achivo... espere un momento", 1,)
lnAlias = ALIAS()
SELECT &lnAlias
GO TOP

IF llTotales
IF _Copy2Excel(lnAlias, lcNombre, lcListaTotales)
  _OpenExcel(lcNombre)
ENDIF
ELSE
IF _Copy2Excel(lnAlias, lcNombre)
  _OpenExcel(lcNombre)
ENDIF
ENDIF

WaitWindowCentrado("Proceso terminado, se ha generado el archivo " + lcNombre, 1,)
ENDPROC
*===========================================================================

El viernes, 15 de septiembre de 2023 a las 11:38:51 UTC-5, Walter Valle escribió:
Hola amigos,

Les dejo el link de este "bicho" que hice y que en parte lo saque de un ejemplo que esta en la pagina de este foro, le metí algunos "condimentos" para mi uso y necesidad. Puedo exportar millones de registros sin problemas.

Si, puede ser mejorada y/o potenciada, la tendré en mi Github y cualquier mejora o error corregido me avisan para mantenerla actualizada. Ahí en el link hay un código simple de ejemplo porque unas lineas de código valen mas que 100 palabras jejeje.


Saludos,

Walter Valle
San Pedro Sula, Honduras.

integral

unread,
Sep 15, 2023, 10:24:54 PM9/15/23
to Comunidad de Visual Foxpro en Español
Estimados Amigos :

Me tome la molestia de probar los códigos expuestos y si funcionan. Tan solo faltaría hacerle unos pequeños ajustes.

Adjunto las imágenes de los resultados y también la mía.

Saludos,

Integral
EXCEL_RUTINA_ANTERIOR.jpg
EXCEL_ULTIMA_RUTINA.jpg
EXCEL_IMAGEN.jpg
Message has been deleted
Message has been deleted
Message has been deleted

Alejandro García Garay

unread,
Sep 16, 2023, 10:03:55 AM9/16/23
to Comunidad de Visual Foxpro en Español
Integral, ¿cómo armaste este ejemplo?
EXCEL_IMAGEN.jpg

Alejandro García Garay

unread,
Sep 16, 2023, 10:06:04 AM9/16/23
to Comunidad de Visual Foxpro en Español
Un detalle que encontre haciendo pruebas es que si uno desea totalizar una columna pero la tenemos como caracter, genera error, toca hacer la conversión para que pueda hacer la sumatoria, hago el comentario ya que lo hice con un archivo que por cuestiones el campo aunque alberga solo números estan como caracter.


El viernes, 15 de septiembre de 2023 a las 22:28:45 UTC-5, Walter Valle escribió:
Hola Alejandro,

Excelente, no se porque el grupo me borro una respuesta, no se que pasa.

Saludos,

Walter Valle

Eduardo Palacios

unread,
Dec 15, 2023, 4:25:02 PM12/15/23
to Comunidad de Visual Foxpro en Español
El programa hace una exportacion rápida, sin embargo, no esta copiando los campos memo. Usualmente, cuando hacemos consultas a BD como Oracle, VFP en el cursor generado incluye campos memo, los cuales no necesariamente contienen gran cantidad de texto. Ojalá puedas agregar esta funcionalidad en el futuro.

integral

unread,
Dec 15, 2023, 10:16:16 PM12/15/23
to Comunidad de Visual Foxpro en Español
Que tal Amigo Alejandro :

Me pidieron que publique el código que utilice para generar el archivo en Excel de la imagen que adjunte...

Es un código que lo elaboro hace algunos años el Jefe del área de programación donde yo trabajaba...

Yo lo adapte cambiando los campos y la tabulación de acuerdo a los campos que utilizo.

Como lo prometido es deuda.

Adjunto el código para que lo adapten a sus necesidades

Saludos,

Integral
CODI_EXCEL._rar

José Antonio Peña Martínez

unread,
Dec 16, 2023, 10:09:58 AM12/16/23
to publice...@googlegroups.com
Gracias integral... Saludos 

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/3038e855-5f9e-44a4-9a76-ef95e452a638n%40googlegroups.com.
Message has been deleted
Message has been deleted

olga lidia arias guzman

unread,
Dec 29, 2023, 12:30:41 PM12/29/23
to Comunidad de Visual Foxpro en Español
Por si a alguno le sirve, esta es una forma muy burda y rudimentaria de grabar en XLSX, primero copiando a una tabla en fox2x y luego convirtiéndola a XLSX usando automation.  Claro, la idea es mandar un cursor con los nombres de las columnas como se requiere que se "llamen" y pensando en la limitante de un millon y cacho de renglones que aguantan los archivos XLSX, pues en este caso, graba en una sola hoja, pero es suficiente para mis necesidades.

Los parámetros son precisamente el cursor y el nombre del archivo XLSX que se quiere grabar.  Es muy rudimentario, pero es rapidísimo el grabado de los XLSX.

Saludos y felices fiestas!


******************************************************************************************
* Nuevo procedimiento para grabar en fox2x y convertir a XLSX.  No pasan campos MEMO.
******************************************************************************************
PROCEDURE fox2x_xlsx
PARAMETERS m.ncursor, m.narchivo
PRIVATE nxlsarchivo, oExcel, oWorkbook, xlsfile
PRIVATE m.tcolumnas, m.anombre, m.renglon, m.columna, m.titulo, m.cnombre
PRIVATE m.qdtype, m.etxtran

   

   m.tcolumnas  = 0
   m.anombre    = ''
   m.renglon    = 1
   m.columna    = 0
   m.titulo     = ''
   m.cnombre    = ''

   set safe off

   if file(m.narchivo)
      delete file (m.narchivo)
   endif

   m.anombre = strtran(m.narchivo, '.XLSX', '.XLS', -1, -1, 1)
   
   select (m.ncursor)
   m.tcolumnas = afields(lascolumnas)

   copy to (m.anombre) type fox2x as 850

   nxlsarchivo = strtran(upper(m.narchivo),'.XLSX','')
   oExcel      = CREATEOBJECT("Excel.Application")
   oWorkbook   = oexcel.Application.Workbooks.Open(anombre)

   oexcel.displayalerts          = .f.
   oexcel.alertbeforeoverwriting = .f.
   oexcel.assistant.visible      = .f.
   oexcel.visible                = .f.
   xlsfile                       = oexcel.activesheet

   for m.columna = 1 to m.tcolumnas
      with xlsfile.cells(m.renglon,m.columna)
         m.cnombre = alltrim(strtran(lascolumnas(m.columna, 1), "_", " "))
         .value               = m.cnombre
         .NumberFormat        = "@"
         .HorizontalAlignment = -4108
         .VerticalAlignment   = -4108
         .WrapText            = "False"
         .Orientation         = 0
         .AddIndent           = "False"
         .IndentLevel         = 0
         .ShrinkToFit         = "False"
         .MergeCells          = "False"
      endwith

      with xlsfile.cells(m.renglon,m.columna).Font
         .Name          = "Tahoma"
         .FontStyle     = "Bold"
         .Size          = 10
         .Strikethrough = "False"
         .Superscript   = "False"
         .Subscript     = "False"
         .OutlineFont   = "False"
         .Shadow        = "False"
         .Underline     = -4142
         .ColorIndex    = 2
      endwith

      with xlsfile.cells(m.renglon,m.columna).Interior
         .Color               = 10180353
         .Pattern             = 1
         .PatternColorIndex   = -4105
      endwith

      xlsfile.cells(m.renglon,m.columna).Borders(5).LineStyle = -4142
      xlsfile.cells(m.renglon,m.columna).Borders(6).LineStyle = -4142

     with xlsfile.cells(m.renglon,m.columna).Borders(7)
         .LineStyle  = 1
         .Weight     = 2
         .ColorIndex = -4105
      endwith

      with xlsfile.cells(m.renglon,m.columna).Borders(8)
         .LineStyle  = 1
         .Weight     = 2
         .ColorIndex = -4105
      endwith

      with xlsfile.cells(m.renglon,m.columna).Borders(9)
         .LineStyle  = 1
         .Weight     = 2
         .ColorIndex = -4105
      endwith

      with xlsfile.cells(m.renglon,m.columna).Borders(10)
         .LineStyle  = 1
         .Weight     = 2
         .ColorIndex = -4105
      endwith
   endfor

   With oexcel.ActiveWindow
      .SplitColumn = 0
      .SplitRow    = 1
   EndWith
   oexcel.ActiveWindow.FreezePanes = "True"

   oexcel.Rows("1:1").RowHeight = 42

   oexcel.Cells.EntireColumn.AutoFit
   oexcel.Cells.EntireRow.AutoFit

   oWorkbook.SaveAs(narchivo)

   oexcel.Quit()

   if file(m.anombre)
      delete file (m.anombre)
   endif

   set safe on
RETURN

El lunes, 18 de diciembre de 2023 a las 12:33:42 UTC-6, Walter Valle escribió:
Excelente Integral!
Message has been deleted

Marcelo Barberis

unread,
Aug 15, 2026, 1:34:50 AM (yesterday) Aug 15
to publice...@googlegroups.com
gitub 404 error de pagina

El jue, 13 ago 2026 a las 16:37, Walter Valle (<wva...@gmail.com>) escribió:
Hola amigos,

Después de mucho tiempo puede para subir una versión nueva de la función. Si alguien tiene necesidad de mandar a XLSX échenle un ojo.

Algo nuevo es que exporta campos MEMO y crea filtros en las columnas.


Saludos,


Walter Valle
San Pedro Sula, Honduras.

El viernes, 15 de septiembre de 2023 a la(s) 10:38:51 a.m. UTC-6, Walter Valle escribió:
Hola amigos,

Les dejo el link de este "bicho" que hice y que en parte lo saque de un ejemplo que esta en la pagina de este foro, le metí algunos "condimentos" para mi uso y necesidad. Puedo exportar millones de registros sin problemas.

Si, puede ser mejorada y/o potenciada, la tendré en mi Github y cualquier mejora o error corregido me avisan para mantenerla actualizada. Ahí en el link hay un código simple de ejemplo porque unas lineas de código valen mas que 100 palabras jejeje.


Saludos,

Walter Valle
San Pedro Sula, Honduras.

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.


--
Marcelo Barberis Gutierrez
Sistemas Informaticos
Villa Montes - Bolivia
Telef.: +591-76830544

Reply all
Reply to author
Forward
0 new messages