Excel + VFP

Hola, tengo una consulta sql con un campo importe y otro fecha, deseo hacer la misma consulta ordenada por fecha e importe y dirigirlas a sendos archivos excel. Hasta acá me sale todo bien sin problemas pero abriendo dos archivos xls distintos (si las consultas las hago separadas) o dos programas excel (si las consultas las hago juntas) en un solo .prg-
Pregunta: es posible dirigir las dos consultas de un solo programa.prg hacia un solo archivo xls con dos hojas activas una para cada sql.
¿Otra cómo copio dos hojas excel desde vfpro como es el código?
Va código...
*LISTADO DE RESOLUCIONES DENTRO DE UN
*RANGO DE FECHAS ordenado por monto descendente y por fecha de ingreso
*!* son dos consultas sql distintas
*!* AL FINAL DEL CODIGO ESTA MI COMENTARIO Y LAS PREGUNTAS
set scor off
set talk off
set stat off
set date french
SET CENTU ON
clea
OPEN DATABASE "c:\bakimpug\impugnaciones.dbc" EXCLUSIVE
SELECT Impugnaciones.expediente, Impugnaciones.fecha_ingreso,;
Impugnaciones.denominacion, Impugnaciones.abogado,;
Impugnaciones.regimen, Impugnaciones.cuit, Impugnaciones.fecha_salida,;
Impugnaciones.resolucion_original, Impugnaciones.providencia_parte1,;
Impugnaciones.providencia_parte2, Impugnaciones.resolucion1_parte1,;
Impugnaciones.resolucion1_parte2, Tabogados.apellido_nombre,;
Tregiones.descripcion, Impugnaciones.resolucion1_fecha;
FROM impugnaciones!tabogados FULL JOIN impugnaciones!impugnaciones;
FULL JOIN impugnaciones!tregiones ;
ON Impugnaciones.sucursal = Tregiones.codigo ;
ON Tabogados.legajo = Impugnaciones.abogado;
WHERE EMPTY(Impugnaciones.fecha_salida) = .T.;
AND Impugnaciones.denominacion IN ("*");
AND EMPTY(Impugnaciones.resolucion1_fecha) = .T.;
GROUP BY Impugnaciones.expediente;
ORDER BY Impugnaciones.expediente DESC;
INTO TABLE ..\..\..\windows\escritorio\oficina\activo1.dbf
SELECT Activo1.expediente, Activo1.fecha_ingr, Activo1.denominaci,;
Activo1.regimen, Activo1.cuit, Activo1.resolucion, Activo1.providenci,;
Activo1.providenc2, Activo1.apellido_n, Activo1.descripcio,;
SUM(Actas.monto);
FROM impugnaciones!actas FULL JOIN activo1 ;
ON Actas.expediente = Activo1.expediente;
GROUP BY Activo1.expediente;
ORDER BY 11 DESC;
INTO TABLE ..\..\..\windows\escritorio\oficina\activo2.dbf &&&&
COPY TO "c:\bakimpug\activoosocsinresol.xls" TYPE XL5 &&&&&&& primer file xls
oExcel=CREATEOBJECT('Excel.Application') &&& PRIMERA APLICACION EXCEL
oExcel.Application.Visible=.T.
oExcel.Application.StandardFontSize=8
oExcel.Application.WorkBooks.Open('c:\bakimpug\activoosocsinresol.xls')
oExcel.Application.Range('A1').Value ='EXPEDIENTE'
oExcel.Application.Range('b1').Value ='FECHA INGRESO'
oExcel.Application.Range('c1').Value ='DENOMINACION'
oExcel.Application.Range('d1').Value ='REGIMEN'
oExcel.Application.Range('e1').Value ='CUIT'
oExcel.Application.Range('f1').Value ='RES ORIG'
oExcel.Application.Range('g1').Value ='PROV Nº'
oExcel.Application.Range('h1').Value ='AÑO'
oExcel.Application.Range('i1').Value ='ABOG'
oExcel.Application.Range('j1').Value ='REGION'
oExcel.Application.Range('k1').Value ='MONTO'
oExcel.Application.Range('l1').Value =''
&&oExcel.Application.Range('m1').Value ='DICT Nº'
oExcel.Application.Columns('K:K').NumberFormat = '$ #,##0.00'
oExcel.Application.columns(1).insert
oExcel.Application.Rows(1).Font.Bold=.T.
&&&&&&&&&&& ahora realizo la otra consulta igual pero ordenada por otro campo, fecha ingreso
SELECT Impugnaciones.expediente, Impugnaciones.fecha_ingreso,;
Impugnaciones.denominacion, Impugnaciones.abogado,;
Impugnaciones.regimen, Impugnaciones.cuit, Impugnaciones.fecha_salida,;
Impugnaciones.resolucion_original, Impugnaciones.providencia_parte1,;
Impugnaciones.providencia_parte2, Impugnaciones.resolucion1_parte1,;
Impugnaciones.resolucion1_parte2, Tabogados.apellido_nombre,;
Tregiones.descripcion, Impugnaciones.resolucion1_fecha;
FROM impugnaciones!tabogados FULL JOIN impugnaciones!impugnaciones;
FULL JOIN impugnaciones!tregiones ;
ON Impugnaciones.sucursal = Tregiones.codigo ;
ON Tabogados.legajo = Impugnaciones.abogado;
WHERE EMPTY(Impugnaciones.fecha_salida) = .T.;
AND Impugnaciones.denominacion IN ("*");
AND EMPTY(Impugnaciones.resolucion1_fecha) = .T.;
GROUP BY Impugnaciones.expediente;
ORDER BY Impugnaciones.expediente DESC;
INTO TABLE ..\..\..\windows\escritorio\oficina\activo1.dbf
SELECT Activo1.expediente, Activo1.fecha_ingr, Activo1.denominaci,;
Activo1.regimen, Activo1.cuit, Activo1.resolucion, Activo1.providenci,;
Activo1.providenc2, Activo1.apellido_n, Activo1.descripcio,;
SUM(Actas.monto);
FROM impugnaciones!actas FULL JOIN activo1 ;
ON Actas.expediente = Activo1.expediente;
GROUP BY Activo1.expediente;
ORDER BY 2 ASC;
INTO TABLE ..\..\..\windows\escritorio\oficina\activo2.dbf
COPY TO "c:\bakimpug\activoosocsinresol2.xls" TYPE XL5
loExcel=CREATEOBJECT('Excel.Application') &&&&&&&& CREA SEGUNDA APLICACION EXCEL
loExcel.Application.Visible=.T.
loExcel.Application.StandardFontSize=8
loExcel.Application.WorkBooks.Open('c:\bakimpug\activoosocsinresol2.xls') &&&&&&& segundo file xls
loExcel.Application.Range('A1').Value ='EXPEDIENTE'
loExcel.Application.Range('b1').Value ='FECHA INGRESO'
loExcel.Application.Range('c1').Value ='DENOMINACION'
loExcel.Application.Range('d1').Value ='REGIMEN'
loExcel.Application.Range('e1').Value ='CUIT'
loExcel.Application.Range('f1').Value ='RES ORIG'
loExcel.Application.Range('g1').Value ='PROV Nº'
loExcel.Application.Range('h1').Value ='AÑO'
loExcel.Application.Range('i1').Value ='ABOG'
loExcel.Application.Range('j1').Value ='REGION'
loExcel.Application.Range('k1').Value ='MONTO'
loExcel.Application.Range('l1').Value =''
&&oExcel.Application.Range('m1').Value ='DICT Nº'
loExcel.Application.Columns('K:K').NumberFormat = '$ #,##0.00'
loExcel.Application.columns(1).insert
loExcel.Application.Rows(1).Font.Bold=.T.
&&&oExcel.APPLICATION.QUIT
RELEASE oExcel
Comentario y pregunta
Esto anda bien, pero me abre dos (2) programas excel
En dos (2)archivos/file xls distintos
EL activoosocsinresol.xls Y EL activoosocsinresol2.xls
por que origine dos (2)oExcel=CREATEOBJECT('Excel.Application')
Pregunta: se puede hacer esto mismo y que las consultas vayan
En un solo archivo/file "xls" excel
Con dos (2) hojas abiertas una para cada consulta sql.
Otra cosa que probé es hacer la segunda consulta
Hacia el mismo archivo/file xls de la primera
sql, pero "me pisa" o se superpone borrando
El archivo excel de la primer consulta. ¿Obvio no?
*!*
&&&&&&&&&& A Y U D A &&&&&&&&&&&&&
Desde ya muchas gracias

1 Respuesta

Respuesta
1
El código ya modificado (y probado) queda:
********************************
set scor off
set talk off
set stat off
set date french
SET CENTU ON
clea
OPEN DATABASE "c:\bakimpug\impugnaciones.dbc" EXCLUSIVE
SELECT Impugnaciones.expediente, Impugnaciones.fecha_ingreso,;
Impugnaciones.denominacion, Impugnaciones.abogado,;
Impugnaciones.regimen, Impugnaciones.cuit, Impugnaciones.fecha_salida,;
Impugnaciones.resolucion_original, Impugnaciones.providencia_parte1,;
Impugnaciones.providencia_parte2, Impugnaciones.resolucion1_parte1,;
Impugnaciones.resolucion1_parte2, Tabogados.apellido_nombre,;
Tregiones.descripcion, Impugnaciones.resolucion1_fecha;
FROM impugnaciones!tabogados FULL JOIN impugnaciones!impugnaciones;
FULL JOIN impugnaciones!tregiones ;
ON Impugnaciones.sucursal = Tregiones.codigo ;
ON Tabogados.legajo = Impugnaciones.abogado;
WHERE EMPTY(Impugnaciones.fecha_salida) = .T.;
AND Impugnaciones.denominacion IN ("*");
AND EMPTY(Impugnaciones.resolucion1_fecha) = .T.;
GROUP BY Impugnaciones.expediente;
ORDER BY Impugnaciones.expediente DESC;
INTO TABLE ..\..\..\windows\escritorio\oficina\activo1.dbf
SELECT Activo1.expediente, Activo1.fecha_ingr, Activo1.denominaci,;
Activo1.regimen, Activo1.cuit, Activo1.resolucion, Activo1.providenci,;
Activo1.providenc2, Activo1.apellido_n, Activo1.descripcio,;
SUM(Actas.monto);
FROM impugnaciones!actas FULL JOIN activo1 ;
ON Actas.expediente = Activo1.expediente;
GROUP BY Activo1.expediente;
ORDER BY 11 DESC;
INTO TABLE ..\..\..\windows\escritorio\oficina\activo2.dbf &&&&
&&Modificación
&&Original: COPY TO "c:\bakimpug\activoosocsinresol.xls" TYPE XL5 &&&&&&& primer file xls
COPY TO "c:\bakimpug\activoosocsinresol.xls" TYPE FOX2X as 850
&&&&&&&&&&& ahora realizo la otra consulta igual pero ordenada por otro campo, fecha ingreso
SELECT Impugnaciones.expediente, Impugnaciones.fecha_ingreso,;
Impugnaciones.denominacion, Impugnaciones.abogado,;
Impugnaciones.regimen, Impugnaciones.cuit, Impugnaciones.fecha_salida,;
Impugnaciones.resolucion_original, Impugnaciones.providencia_parte1,;
Impugnaciones.providencia_parte2, Impugnaciones.resolucion1_parte1,;
Impugnaciones.resolucion1_parte2, Tabogados.apellido_nombre,;
Tregiones.descripcion, Impugnaciones.resolucion1_fecha;
FROM impugnaciones!tabogados FULL JOIN impugnaciones!impugnaciones;
FULL JOIN impugnaciones!tregiones ;
ON Impugnaciones.sucursal = Tregiones.codigo ;
ON Tabogados.legajo = Impugnaciones.abogado;
WHERE EMPTY(Impugnaciones.fecha_salida) = .T.;
AND Impugnaciones.denominacion IN ("*");
AND EMPTY(Impugnaciones.resolucion1_fecha) = .T.;
GROUP BY Impugnaciones.expediente;
ORDER BY Impugnaciones.expediente DESC;
INTO TABLE ..\..\..\windows\escritorio\oficina\activo1.dbf
SELECT Activo1.expediente, Activo1.fecha_ingr, Activo1.denominaci,;
Activo1.regimen, Activo1.cuit, Activo1.resolucion, Activo1.providenci,;
Activo1.providenc2, Activo1.apellido_n, Activo1.descripcio,;
SUM(Actas.monto);
FROM impugnaciones!actas FULL JOIN activo1 ;
ON Actas.expediente = Activo1.expediente;
GROUP BY Activo1.expediente;
ORDER BY 2 ASC;
INTO TABLE ..\..\..\windows\escritorio\oficina\activo2.dbf
&&Modificación
&&Original: COPY TO "c:\bakimpug\activoosocsinresol2.xls" TYPE XL5
COPY TO "c:\bakimpug\activoosocsinresol2.xls" TYPE FOX2X as 850
&&Abrimos una sola instancia de Excel
m.oExcel = CREATEOBJECT('Excel.Application')
WITH oExcel
.VISIBLE=.T.
.StandardFontSize = 8
.WorkBooks.OPEN('c:\bakimpug\activoosocsinresol.dbf')
.RANGE('A1').VALUE ='EXPEDIENTE'
.RANGE('B1').VALUE ='FECHA INGRESO'
.RANGE('C1').VALUE ='DENOMINACION'
.RANGE('D1').VALUE ='REGIMEN'
.RANGE('E1').VALUE ='CUIT'
.RANGE('F1').VALUE ='RES ORIG'
.RANGE('G1').VALUE ='PROV Nº'
.RANGE('H1').VALUE ='AÑO'
.RANGE('I1').VALUE ='ABOG'
.RANGE('J1').VALUE ='REGION'
.RANGE('K1').VALUE ='MONTO'
.RANGE('L1').VALUE =''
&&.RANGE('M1').Value ='DICT Nº'
.COLUMNS('K:K').NumberFormat = '$ #,##0.00'
.COLUMNS(1).INSERT
.ROWS(1).FONT.Bold=.T.
.Sheets.Add
.Sheets('Hoja1').Name = 'activoosocsinresol2'
.WorkBooks.OPEN('c:\bakimpug\activoosocsinresol2.dbf') && Abrimos el segundo archivo
.RANGE('A1').VALUE ='EXPEDIENTE'
.RANGE('B1').VALUE ='FECHA INGRESO'
.RANGE('C1').VALUE ='DENOMINACION'
.RANGE('D1').VALUE ='REGIMEN'
.RANGE('E1').VALUE ='CUIT'
.RANGE('F1').VALUE ='RES ORIG'
.RANGE('G1').VALUE ='PROV Nº'
.RANGE('H1').VALUE ='AÑO'
.RANGE('I1').VALUE ='ABOG'
.RANGE('J1').VALUE ='REGION'
.RANGE('K1').VALUE ='MONTO'
.RANGE('L1').VALUE =''
&&.RANGE('M1').Value ='DICT Nº'
.COLUMNS('K:K').NumberFormat = '$ #,##0.00'
.COLUMNS(1).INSERT
.ROWS(1).FONT.Bold=.T.
.RANGE('A1:N65536').SELECT
.SELECTION.COPY
.ActiveWindow.ActivateNext
.ActiveSheet.Paste
.RANGE("A1:A1").SELECT
.APPLICATION.CutCopyMode = .F.
. ActiveWindow. ActivateNext
. ActiveWorkbook. SABE()
. ActiveWindow. CLOSE
&&&.QUIT
Endwith
RELEASE m.oExcel
********************************
Los cambios se encuentran comentados dentro del código.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas