Discussion:
Cambio de formato fecha a exportar a Excel.
(demasiado antiguo para responder)
José Luis
2005-12-21 16:32:03 UTC
Permalink
Hola a todos,

tengo un problema bastante raro que espero que alguien me pueda echar una
mano en resolver. El problema es el siguiente:

Desde un grid tengo que exportar su contenido a Excel, esto lo he conseguido
hacerlo con el siguiente código (el contenido del grid ya lo he metido en el
portapapeles).

LOCAL nCOL, sCELDA, nFILA, sCAMPO, aCAMPOS
objexcel=createobject("excel.application")
objexcel.workbooks.add
DIMENSION aCAMPOS(1)
=AFIELDS(aCAMPOS, "w_expo1")
objexcel.cells.select
objexcel.selection.font.size=8
objexcel.Cells.EntireColumn.AutoFit
objexcel.range("a1").select
nH=FCOUNT("w_expo1")
FOR nCOL=0 TO nH -1
sCELDA=CHR(65+nCOL)+"1"
objexcel.range(sCELDA).VALUE = aCAMPOS(nCOL+1, 1)
NEXT
nFILA=2
SELECT w_expo1
SCAN
FOR nCOL=0 TO nH - 1
sCELDA=CHR(65+nCOL)+ALLTRIM(TRANSFORM(nFILA,"####"))
sCAMPO="w_expo1." + FIELD(nCOL+1)
IF aCAMPOS(nCOL+1, 2)$"TD" then && Si es una fecha la
convertimos.
objexcel.range(sCELDA) = DTOC( &sCAMPO )
ELSE
objexcel.range(sCELDA) = &sCAMPO
ENDIF
NEXT
nFILA=nFILA+1
ENDSCAN
objexcel.visible=.t.
_CLIPTEXT="" && vaciamos el portapapeles


Esto funciona perfectamente, el único problema que tengo es que al exportar
un campo de tipo fecha me lo modifica y le cambio el formato, es decir me
cambia de DDMMYYYY a MMDDYYYY, incluso habiendo puesto SET DATE DMY.

¿Alguién me puede decir porque ocurre esto y como puede solucionarse?

Muchas gracias por anticipado.

Un saludo,
José Luis.
Juan Ramon Hueso
2005-12-21 16:48:20 UTC
Permalink
Me parece que el formato en Excel hay que ponerle el formato YMD.
--
-----------------------
Saludos.
Juan Ramón.
Cartagena-España
Post by José Luis
Hola a todos,
tengo un problema bastante raro que espero que alguien me pueda echar una
Desde un grid tengo que exportar su contenido a Excel, esto lo he conseguido
hacerlo con el siguiente código (el contenido del grid ya lo he metido en el
portapapeles).
LOCAL nCOL, sCELDA, nFILA, sCAMPO, aCAMPOS
objexcel=createobject("excel.application")
objexcel.workbooks.add
DIMENSION aCAMPOS(1)
=AFIELDS(aCAMPOS, "w_expo1")
objexcel.cells.select
objexcel.selection.font.size=8
objexcel.Cells.EntireColumn.AutoFit
objexcel.range("a1").select
nH=FCOUNT("w_expo1")
FOR nCOL=0 TO nH -1
sCELDA=CHR(65+nCOL)+"1"
objexcel.range(sCELDA).VALUE = aCAMPOS(nCOL+1, 1)
NEXT
nFILA=2
SELECT w_expo1
SCAN
FOR nCOL=0 TO nH - 1
sCELDA=CHR(65+nCOL)+ALLTRIM(TRANSFORM(nFILA,"####"))
sCAMPO="w_expo1." + FIELD(nCOL+1)
IF aCAMPOS(nCOL+1, 2)$"TD" then && Si es una fecha la
convertimos.
objexcel.range(sCELDA) = DTOC( &sCAMPO )
ELSE
objexcel.range(sCELDA) = &sCAMPO
ENDIF
NEXT
nFILA=nFILA+1
ENDSCAN
objexcel.visible=.t.
_CLIPTEXT="" && vaciamos el portapapeles
Esto funciona perfectamente, el único problema que tengo es que al exportar
un campo de tipo fecha me lo modifica y le cambio el formato, es decir me
cambia de DDMMYYYY a MMDDYYYY, incluso habiendo puesto SET DATE DMY.
¿Alguién me puede decir porque ocurre esto y como puede solucionarse?
Muchas gracias por anticipado.
Un saludo,
José Luis.
José Luis
2005-12-21 17:06:17 UTC
Permalink
Buenas Juan Ramón,

muchas gracias por responderme tan rápido, he probado lo que me has dicho y
en efecto me pasa la fecha en formato correcto. El problema es que durante
el proceso me cambia el formato de la fecha del grid a YMD.

Sabes como puedo hacer para que simplemente se pasen los campos con formato
correcto a Excel sin que esto afecte al formato del grid?

Y por curiosidad porque si yo quiero que en Excel se muestre con formato DMY
se tiene que exportar con formato YMD?

Muchas gracias de nuevo por tu ayuda.

Un saludo,
José Luis.
Post by Juan Ramon Hueso
Me parece que el formato en Excel hay que ponerle el formato YMD.
--
-----------------------
Saludos.
Juan Ramón.
Cartagena-España
Post by José Luis
Hola a todos,
tengo un problema bastante raro que espero que alguien me pueda echar una
Desde un grid tengo que exportar su contenido a Excel, esto lo he conseguido
hacerlo con el siguiente código (el contenido del grid ya lo he metido
en
Post by Juan Ramon Hueso
Post by José Luis
el
portapapeles).
LOCAL nCOL, sCELDA, nFILA, sCAMPO, aCAMPOS
objexcel=createobject("excel.application")
objexcel.workbooks.add
DIMENSION aCAMPOS(1)
=AFIELDS(aCAMPOS, "w_expo1")
objexcel.cells.select
objexcel.selection.font.size=8
objexcel.Cells.EntireColumn.AutoFit
objexcel.range("a1").select
nH=FCOUNT("w_expo1")
FOR nCOL=0 TO nH -1
sCELDA=CHR(65+nCOL)+"1"
objexcel.range(sCELDA).VALUE = aCAMPOS(nCOL+1, 1)
NEXT
nFILA=2
SELECT w_expo1
SCAN
FOR nCOL=0 TO nH - 1
sCELDA=CHR(65+nCOL)+ALLTRIM(TRANSFORM(nFILA,"####"))
sCAMPO="w_expo1." + FIELD(nCOL+1)
IF aCAMPOS(nCOL+1, 2)$"TD" then && Si es una fecha la
convertimos.
objexcel.range(sCELDA) = DTOC( &sCAMPO )
ELSE
objexcel.range(sCELDA) = &sCAMPO
ENDIF
NEXT
nFILA=nFILA+1
ENDSCAN
objexcel.visible=.t.
_CLIPTEXT="" && vaciamos el portapapeles
Esto funciona perfectamente, el único problema que tengo es que al exportar
un campo de tipo fecha me lo modifica y le cambio el formato, es decir me
cambia de DDMMYYYY a MMDDYYYY, incluso habiendo puesto SET DATE DMY.
¿Alguién me puede decir porque ocurre esto y como puede solucionarse?
Muchas gracias por anticipado.
Un saludo,
José Luis.
Luis María Guayán
2005-12-21 21:11:43 UTC
Permalink
Mas fácil que hagas esto:

GO TOP IN w_expo1
_VFP.DataToClip("w_expo1",,3)
objExcel=createobject("excel.application")
objExcel.workbooks.add
objExcel.Range("A1").Select
objExcel.ActiveSheet.Paste
objExcel.Cells.EntireColumn.AutoFit
objExcel.visible=.t.
_CLIPTEXT="" && vaciamos el portapapeles

Luego comentas
--
Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos
Post by José Luis
Hola a todos,
tengo un problema bastante raro que espero que alguien me pueda echar una
Desde un grid tengo que exportar su contenido a Excel, esto lo he conseguido
hacerlo con el siguiente código (el contenido del grid ya lo he metido en el
portapapeles).
LOCAL nCOL, sCELDA, nFILA, sCAMPO, aCAMPOS
objexcel=createobject("excel.application")
objexcel.workbooks.add
DIMENSION aCAMPOS(1)
=AFIELDS(aCAMPOS, "w_expo1")
objexcel.cells.select
objexcel.selection.font.size=8
objexcel.Cells.EntireColumn.AutoFit
objexcel.range("a1").select
nH=FCOUNT("w_expo1")
FOR nCOL=0 TO nH -1
sCELDA=CHR(65+nCOL)+"1"
objexcel.range(sCELDA).VALUE = aCAMPOS(nCOL+1, 1)
NEXT
nFILA=2
SELECT w_expo1
SCAN
FOR nCOL=0 TO nH - 1
sCELDA=CHR(65+nCOL)+ALLTRIM(TRANSFORM(nFILA,"####"))
sCAMPO="w_expo1." + FIELD(nCOL+1)
IF aCAMPOS(nCOL+1, 2)$"TD" then && Si es una fecha la
convertimos.
objexcel.range(sCELDA) = DTOC( &sCAMPO )
ELSE
objexcel.range(sCELDA) = &sCAMPO
ENDIF
NEXT
nFILA=nFILA+1
ENDSCAN
objexcel.visible=.t.
_CLIPTEXT="" && vaciamos el portapapeles
Esto funciona perfectamente, el único problema que tengo es que al exportar
un campo de tipo fecha me lo modifica y le cambio el formato, es decir me
cambia de DDMMYYYY a MMDDYYYY, incluso habiendo puesto SET DATE DMY.
¿Alguién me puede decir porque ocurre esto y como puede solucionarse?
Muchas gracias por anticipado.
Un saludo,
José Luis.
José Luis
2005-12-22 09:45:18 UTC
Permalink
Buenas Luis María,

muchas gracias por contestar. He probado el código que me has dado y me
sigue produciendo el mismo problema con el formato de la fecha. Sabes como
puedo darle yo formato a los campos que sean de fecha? o como hacer para que
no modifique el formato de la fecha a exportarlo a Excel?

Gracias.

Un saludo,
José Luis.
Post by José Luis
Hola a todos,
tengo un problema bastante raro que espero que alguien me pueda echar una
Desde un grid tengo que exportar su contenido a Excel, esto lo he conseguido
hacerlo con el siguiente código (el contenido del grid ya lo he metido en el
portapapeles).
LOCAL nCOL, sCELDA, nFILA, sCAMPO, aCAMPOS
objexcel=createobject("excel.application")
objexcel.workbooks.add
DIMENSION aCAMPOS(1)
=AFIELDS(aCAMPOS, "w_expo1")
objexcel.cells.select
objexcel.selection.font.size=8
objexcel.Cells.EntireColumn.AutoFit
objexcel.range("a1").select
nH=FCOUNT("w_expo1")
FOR nCOL=0 TO nH -1
sCELDA=CHR(65+nCOL)+"1"
objexcel.range(sCELDA).VALUE = aCAMPOS(nCOL+1, 1)
NEXT
nFILA=2
SELECT w_expo1
SCAN
FOR nCOL=0 TO nH - 1
sCELDA=CHR(65+nCOL)+ALLTRIM(TRANSFORM(nFILA,"####"))
sCAMPO="w_expo1." + FIELD(nCOL+1)
IF aCAMPOS(nCOL+1, 2)$"TD" then && Si es una fecha la
convertimos.
objexcel.range(sCELDA) = DTOC( &sCAMPO )
ELSE
objexcel.range(sCELDA) = &sCAMPO
ENDIF
NEXT
nFILA=nFILA+1
ENDSCAN
objexcel.visible=.t.
_CLIPTEXT="" && vaciamos el portapapeles
Esto funciona perfectamente, el único problema que tengo es que al exportar
un campo de tipo fecha me lo modifica y le cambio el formato, es decir me
cambia de DDMMYYYY a MMDDYYYY, incluso habiendo puesto SET DATE DMY.
¿Alguién me puede decir porque ocurre esto y como puede solucionarse?
Muchas gracias por anticipado.
Un saludo,
José Luis.
Luis María Guayán
2005-12-22 11:58:05 UTC
Permalink
Cuando pasas un campo Fecha a Excel (con el código quehe expuesto) la
visualización del formato de fechas en Excel es de acuerdo a la
configuración regional de Windows que tengas establecida o al formato de la
celda, y no al formato que hayas establecido en VFP al momento de la
automatización.

Si quieres darle un formato a tu fecha, lo puedes hacer con automatización.
Suponiendo que tu campo fecha sea el 3° campo (La columna C de la hoja
Excel) y quieres un formato dd/mm/aaaa:

GO TOP IN w_expo1
_VFP.DataToClip("w_expo1",,3)
objExcel=createobject("excel.application")
objExcel.workbooks.add
objExcel.Range("A1").Select
objExcel.ActiveSheet.Paste
*-- Aqui selecciono la 3° columna
objExcel.Columns("C:C").Select
objExcel.Selection.NumberFormat = "dd/mm/yyyy"
objExcel.Cells.EntireColumn.AutoFit
objExcel.visible=.t.
_CLIPTEXT="" && vaciamos el portapapeles
--
Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos
Post by José Luis
Buenas Luis María,
muchas gracias por contestar. He probado el código que me has dado y me
sigue produciendo el mismo problema con el formato de la fecha. Sabes como
puedo darle yo formato a los campos que sean de fecha? o como hacer para que
no modifique el formato de la fecha a exportarlo a Excel?
Gracias.
Un saludo,
José Luis.
Post by José Luis
Hola a todos,
tengo un problema bastante raro que espero que alguien me pueda echar una
Desde un grid tengo que exportar su contenido a Excel, esto lo he
conseguido
Post by José Luis
hacerlo con el siguiente código (el contenido del grid ya lo he metido
en
Post by José Luis
el
Post by José Luis
portapapeles).
LOCAL nCOL, sCELDA, nFILA, sCAMPO, aCAMPOS
objexcel=createobject("excel.application")
objexcel.workbooks.add
DIMENSION aCAMPOS(1)
=AFIELDS(aCAMPOS, "w_expo1")
objexcel.cells.select
objexcel.selection.font.size=8
objexcel.Cells.EntireColumn.AutoFit
objexcel.range("a1").select
nH=FCOUNT("w_expo1")
FOR nCOL=0 TO nH -1
sCELDA=CHR(65+nCOL)+"1"
objexcel.range(sCELDA).VALUE = aCAMPOS(nCOL+1, 1)
NEXT
nFILA=2
SELECT w_expo1
SCAN
FOR nCOL=0 TO nH - 1
sCELDA=CHR(65+nCOL)+ALLTRIM(TRANSFORM(nFILA,"####"))
sCAMPO="w_expo1." + FIELD(nCOL+1)
IF aCAMPOS(nCOL+1, 2)$"TD" then && Si es una fecha la
convertimos.
objexcel.range(sCELDA) = DTOC( &sCAMPO )
ELSE
objexcel.range(sCELDA) = &sCAMPO
ENDIF
NEXT
nFILA=nFILA+1
ENDSCAN
objexcel.visible=.t.
_CLIPTEXT="" && vaciamos el portapapeles
Esto funciona perfectamente, el único problema que tengo es que al
exportar
Post by José Luis
un campo de tipo fecha me lo modifica y le cambio el formato, es decir me
cambia de DDMMYYYY a MMDDYYYY, incluso habiendo puesto SET DATE DMY.
¿Alguién me puede decir porque ocurre esto y como puede solucionarse?
Muchas gracias por anticipado.
Un saludo,
José Luis.
José Luis
2005-12-22 15:31:35 UTC
Permalink
Gracias de nuevo por responderme Luis,

el código que me has mandado esta muy claro, pero no consigo ver como puedo
hacer para que en la automatización se conviertan las columnas que son
fechas automáticamente sin tener que poner el nombre de la columna por
código. Cómo puedo saber si una columna va a ser de tipo fecha para darle ya
formato automáticamente?

Muchas gracias de nuevo por tu ayuda.

Un saludo,
José Luis.
Post by Luis María Guayán
Cuando pasas un campo Fecha a Excel (con el código quehe expuesto) la
visualización del formato de fechas en Excel es de acuerdo a la
configuración regional de Windows que tengas establecida o al formato de la
celda, y no al formato que hayas establecido en VFP al momento de la
automatización.
Si quieres darle un formato a tu fecha, lo puedes hacer con
automatización.
Post by Luis María Guayán
Suponiendo que tu campo fecha sea el 3° campo (La columna C de la hoja
GO TOP IN w_expo1
_VFP.DataToClip("w_expo1",,3)
objExcel=createobject("excel.application")
objExcel.workbooks.add
objExcel.Range("A1").Select
objExcel.ActiveSheet.Paste
*-- Aqui selecciono la 3° columna
objExcel.Columns("C:C").Select
objExcel.Selection.NumberFormat = "dd/mm/yyyy"
objExcel.Cells.EntireColumn.AutoFit
objExcel.visible=.t.
_CLIPTEXT="" && vaciamos el portapapeles
--
Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos
Post by José Luis
Buenas Luis María,
muchas gracias por contestar. He probado el código que me has dado y me
sigue produciendo el mismo problema con el formato de la fecha. Sabes como
puedo darle yo formato a los campos que sean de fecha? o como hacer para
que
Post by José Luis
no modifique el formato de la fecha a exportarlo a Excel?
Gracias.
Un saludo,
José Luis.
Post by José Luis
Hola a todos,
tengo un problema bastante raro que espero que alguien me pueda echar
una
Post by José Luis
Post by José Luis
Desde un grid tengo que exportar su contenido a Excel, esto lo he
conseguido
Post by José Luis
hacerlo con el siguiente código (el contenido del grid ya lo he metido
en
Post by José Luis
el
Post by José Luis
portapapeles).
LOCAL nCOL, sCELDA, nFILA, sCAMPO, aCAMPOS
objexcel=createobject("excel.application")
objexcel.workbooks.add
DIMENSION aCAMPOS(1)
=AFIELDS(aCAMPOS, "w_expo1")
objexcel.cells.select
objexcel.selection.font.size=8
objexcel.Cells.EntireColumn.AutoFit
objexcel.range("a1").select
nH=FCOUNT("w_expo1")
FOR nCOL=0 TO nH -1
sCELDA=CHR(65+nCOL)+"1"
objexcel.range(sCELDA).VALUE = aCAMPOS(nCOL+1, 1)
NEXT
nFILA=2
SELECT w_expo1
SCAN
FOR nCOL=0 TO nH - 1
sCELDA=CHR(65+nCOL)+ALLTRIM(TRANSFORM(nFILA,"####"))
sCAMPO="w_expo1." + FIELD(nCOL+1)
IF aCAMPOS(nCOL+1, 2)$"TD" then && Si es una fecha la
convertimos.
objexcel.range(sCELDA) = DTOC( &sCAMPO )
ELSE
objexcel.range(sCELDA) = &sCAMPO
ENDIF
NEXT
nFILA=nFILA+1
ENDSCAN
objexcel.visible=.t.
_CLIPTEXT="" && vaciamos el portapapeles
Esto funciona perfectamente, el único problema que tengo es que al
exportar
Post by José Luis
un campo de tipo fecha me lo modifica y le cambio el formato, es decir
me
Post by José Luis
Post by José Luis
cambia de DDMMYYYY a MMDDYYYY, incluso habiendo puesto SET DATE DMY.
¿Alguién me puede decir porque ocurre esto y como puede solucionarse?
Muchas gracias por anticipado.
Un saludo,
José Luis.
Continúe leyendo en narkive:
Loading...