... 0170 leer:
0180 READ RECORD(cli,END=final)cli$
0190 LET lin=lin+1
0200 WRITE (xls,KEY="F"+STR(lin)+"C1")cli.codigo$
0210 WRITE (xls,KEY="F"+STR(lin)+"C2")cli.nombre$
0220 WRITE (xls,KEY="F"+STR(lin)+"C3")STR(cli.region)
0230 GOTO leer
0240 REM
0250 xls_no_abierto:
0260 INPUT (0,SIZ=1)"Favor de abrir Excel antes de continuar ",*;
GOTO 0030
0270 REM
0280 arch_no_abierto:
0290 RETRY
0300 REM
0310 final:
0320 END
Un poco similar al anterior, el
siguiente programa nos enseña como podemos leer los datos en las celdas de una
hoja electrónica que necesariamente primero debe ser abierta (cargada en memoria)
por Excel. Igualmente al programa anterior, hay que tomar la previsión para
los casos en Excel esté en inglés o en español.
0010 REM "Muestra como LEER un archivo de Excel
0020 REM "Se requiere que el archivo Excel exista y que Excel lo tenga
abierto
0030 BEGIN
0040 REM "La siguiente linea comprueba que Excel este abierto
0050 LET xls=UNT; OPEN (xls,MODE="DDECLIENT",ERR=xls_no_abierto)"EXCEL:SYSTEM"
0060 INPUT "Dar nombre del archivo de Excel (ENTER=Ninguno): ",arch$:(""=final
0060:,LEN=1,18); IF POS(".xls"=CVS(arch$,8))=0 THEN LET arch$=arch$+".xls"
0070 LET cmd$="[OPEN(""C:\My document1\"+arch$+""")]"+$00$
0080 REM "La siguiente linea carga el archivo indicado en memoria
0090 WRITE RECORD(xls,KEY="DDE_EXECUTE",ERR=arch_no_existe)cmd$
0100 CLOSE (1); REM "Despues de ponerlo en memoria hay que cerrar el canal
0110 REM "La siguiente linea abre el acceso hacia el Excel en memoria
0120 OPEN (1,MODE="DDECLIENT")"EXCEL:c:\My document1\"+arch$
0130 REM "Abajo, para Excel en Ingles debe usar RxCx y para Espanol FxCx
0140 REM
0150 leer:
0160 LET lin=lin+1
0170 READ RECORD(xls,KEY="F"+STR(lin)+"C1")a$
0180 READ RECORD(xls,KEY="F"+STR(lin)+"C2",ERR=final)b$
0190 READ RECORD(xls,KEY="F"+STR(lin)+"C3",ERR=final)c$
0200 PRINT a$,"-",b$,"-",c$
0210 INPUT ":",*
0220 GOTO leer
0230 REM
0240 xls_no_abierto:
0250 INPUT (0,SIZ=1)"Favor de abrir Excel antes de continuar ",*;
GOTO 0030
0260 REM
0270 arch_no_existe:
0280 RETRY
0290 REM
0300 final:
0310 END
Para pasar datos desde Pro/5 o Visual
Pro/5 hacia Excel también existen otras buenas formas de lograrlo:
1. Por medio de un archivo de texto
en el que se utiliza $09$ como separador de campos. Ese hexadecimal le es más
natural a Excel, ya que por 'default' ese es el separador que internamente utiliza.
2. Por medio de un archivo de texto
en el que se utilizan comas como separador de campos y luego 'pegarlo' por medio
de los verbos y funciones CLIP...... que ofrece el Visual PRO/5. Funciona muy
bien pero tiene el inconveniente de dar problema si existen comas dentro de
los datos a ser enviados (como a veces ocurre en las direcciones). Lo que hace
Visual Pro/5 con esos mnemónicos es colocarlo en el portapapeles de Windows,
y después en Excel se le da clic al botón pegar y listo. Como dije, con anticipación
se necesita crear un archivo de texto (String), y enviar el reporte a este archivo
con los campos separados por comas. Luego, al finalizar el reporte se cierra
el canal del archivo de texto y se le da las siguientes instrucciones, donde
Clip$ es igual al nombre del archivo de texto
csv=clipregformat("CSV")
cliplock
clipfromfile csv,clip$
clipunlock
|