De Excel a archivo tipo Texto con separador ( | ) y separador decimal ( , ) desde VFP

1,306 views
Skip to first unread message

José Luis

unread,
Sep 21, 2011, 2:47:00 PM9/21/11
to Comunidad de Visual Foxpro en Español
Se me presenta la siguiente situación. Tengo un archivo en Excel 2003
con 7 columnas las cuales son:

Numero___Fecha____Nombres________Codigo___Monto__Pago_Aporte
10134956  31011996  García H. Ángel Y. 12345678 2000,00 60,00 60,00

Pero me estan solicitando que esa información la tengo que entregar en
archivo tipo TEXTO (Formato ASCII) que contenga como separador de
campo la barra vertical ( | ) y separador decimal para los montos la
coma ( , ). Por ejemplo:

Resultado Completo del Registro:
10134956|31011996|Perez P. Manual J.|12345678|2000,00|60,00|60,00


Como logro hacer esto ?

Se puede hacer esto con un programa desde VFP ?

Marco Plaza

unread,
Sep 21, 2011, 2:52:54 PM9/21/11
to Comunidad de Visual Foxpro en Español
tal vez en excel puedas hacerlo directamente no se, pero puedes
guardarlo delimitado por tabuladores y luego simplemente en vfp haces

strfofile(;
strtran(;
filetostr('atextoDelimTabs.txt'),;
chr(9),chr(179)),;
'atextomodificado.txt')


Saludos

Gorka

unread,
Sep 27, 2011, 1:16:23 AM9/27/11
to Comunidad de Visual Foxpro en Español
Si en todos los equipos donde vayas a correr el programa tienen Excel
instalado puedes usar automatización.
Mira este código:

LOCAL loExcel as Object, lnFila as Integer, lnColumna as Integer,
xlsfilas as Integer, lnHdl as Integer
LOCAL lcFile as Character, lcValor as Character, lcVuelca as
Character, lcLinea as Character

lcFile=PUTFILE("Archivo Delimitado","Prueba_Volcado.txt","TXT")
loExcel=CREATEOBJECT("Excel.application") && Creo el objeto de Excell
loExcel.workbooks.OPEN("C:\TuArchivoExcel.xls") && Abro el libro
loExcel.Sheets("Sheet1").Select && Selecciono la pestaña
xlsfilas = loExcel.activesheet.Columns(1).Find("").Row && Cuento las
filas
IF FILE(lcFile)
ERASE (lcFile)
ENDIF
lnHdl=FCREATE(lcFile)
IF lnHdl>0
FOR lnFila=1 TO xlsfilas-1 && Recorro las filas
lcLinea=''
FOR lnColumna= 65 TO 71 && Recorro las columnas. Empiezo por A
CHR(65) y acabo por G CHR(71)
loexcel.Range(CHR(lnColumna)+ALLTRIM(STR(lnFila))).Select
lcValor=loexcel.ActiveCell.Value
* Comprueba el tipo de datos y convierte
DO CASE
CASE TYPE("lcValor")="C"
lcVuelca=ALLTRIM(lcValor)
CASE TYPE("lcValor")="N"
lcVuelca=STRTRAN(ALLTRIM(STR(lcValor,8,2)),'.',',')
CASE TYPE("lcValor")="Y"
lcVuelca=STRTRAN(ALLTRIM(STR(lcValor,8,2)),'.',',')
CASE TYPE("lcValor")="D"
lcVuelca=DTOC(lcValor)
CASE TYPE("lcValor")="T"
lcVuelca=TTOC(lcValor)
OTHERWISE
lcVuelca=''
ENDCASE
lcLinea=lcLinea+lcVuelca+"|" && Voy montando la linea
ENDFOR
=FPUTS(lnHdl,lcLinea) && Grabo la linea en el archivo de Texto
ENDFOR
ENDIF
FCLOSE(lnHdl) && Cierro el fichero de texto
loExcel.quit && Cierro la hoja Excel
RELEASE loExcel

Yo creo que te puede servir
Saludos
Gorka
Reply all
Reply to author
Forward
0 new messages