Home » Developer & Programmer » Forms » Deleting an Excel sheet using OLE2 (Oracle Forms 6i, Windows 10)
Deleting an Excel sheet using OLE2 [message #687605] |
Thu, 13 April 2023 00:42  |
 |
AmadeoGS
Messages: 2 Registered: April 2023 Location: Murcia, Spain
|
Junior Member |
|
|
Hi everyone.
I need to delete remaining sheets from an excel file but i'm unable to do that.
For example, with 12 sheets, I want to delete 11 and 12.
FOR I IN 1 .. 12 LOOP
args := ole2.create_arglist;
ole2.add_arg(args, I);
worksheet := ole2.get_obj_property(worksheets, 'Item', args);
if i in (11, 12) then
ole2.invoke(worksheet, 'Delete');
end if;
ole2.destroy_arglist(args);
ole2.release_obj(worksheet);
END LOOP;
nothing happens.
But after many tries I've noticed the following with this code
FOR I IN 1 .. 12 LOOP
args := ole2.create_arglist;
ole2.add_arg(args, I);
worksheet := ole2.get_obj_property(worksheets, 'Item', args);
if i in (11, 12) then
ole2.set_property(worksheet, 'Name', 'b');
ole2.set_property(worksheet, 'Name', 'c');
ole2.set_property(worksheet, 'Name', 'd');
ole2.set_property(worksheet, 'Name', 'e');
end if;
ole2.destroy_arglist(args);
ole2.release_obj(worksheet);
END LOOP;
Sheet 11 gets "e" name, but 12 gets "d". If I leave only the "b" naming, sheet 12 remains unnamed, after applying "b" and "c" it gets the name "b"...
Why is happening this??? I don't know if its related to the fact that I'm not able to delete the sheets.
But, the reason for this post is that I need to delete the sheets.
Thank you in advance.
Amadeo.
|
|
|
Re: Deleting an Excel sheet using OLE2 [message #687606 is a reply to message #687605] |
Thu, 13 April 2023 00:43  |
 |
AmadeoGS
Messages: 2 Registered: April 2023 Location: Murcia, Spain
|
Junior Member |
|
|
Full code
PROCEDURE GENERAR_MODELOSB_MRR_CI_2 IS
FECHA_DESDE DATE;
FECHA_HASTA DATE;
CREDITO_TOTAL NUMBER(14, 2);
GASTO_AUTORIZADO_CORRIENTE NUMBER(14, 2);
GASTO_AUTORIZADO_POSTERIOR NUMBER(14, 2);
GASTO_COMPROMETIDO_CORRIENTE NUMBER(14, 2);
GASTO_COMPROMETIDO_POSTERIOR NUMBER(14, 2);
OBLIGACIONES_RECONOCIDAS NUMBER(14, 2);
TOTAL_PAGOS NUMBER(14, 2);
TCREDITO_TOTAL NUMBER(14, 2);
TGASTO_AUTORIZADO_CORRIENTE NUMBER(14, 2);
TGASTO_AUTORIZADO_POSTERIOR NUMBER(14, 2);
TGASTO_COMPROMETIDO_CORRIENTE NUMBER(14, 2);
TGASTO_COMPROMETIDO_POSTERIOR NUMBER(14, 2);
TOBLIGACIONES_RECONOCIDAS NUMBER(14, 2);
TTOTAL_PAGOS NUMBER(14, 2);
-- Fichero destino
ruta_ VARCHAR2(250) := 'c:\temp\';
fichero_ VARCHAR2(250) := 'MODELOSB_MRR_CI.xlsx';
-- Declare the OLE objects
application ole2.obj_type;
workbooks ole2.obj_type;
workbook ole2.obj_type;
worksheets ole2.obj_type;
worksheet ole2.obj_type;
cell ole2.obj_type;
rango ole2.obj_type;
nombrehoja_ varchar2(5);
args ole2.list_type;
check_file text_io.file_type;
no_file exception;
FILA_ NUMBER;
NUMERO_HOJA NUMBER := 0;
NUMERO_HOJAS NUMBER;
NUMERO_DUPLAS NUMBER;
PRAGMA EXCEPTION_INIT (no_file, -302000);
CURSOR HOJAS IS
SELECT DISTINCT COMPONENTE, INVERSION
FROM DATOSPROYECTOS
ORDER BY TO_NUMBER(SUBSTR(COMPONENTE, 2, LENGTH(COMPONENTE) - 1)), TO_NUMBER(SUBSTR(INVERSION, 2, LENGTH(INVERSION) - 1));
CURSOR CAPITULOS IS
SELECT ECO CAPITULO, NOM
FROM TIPIFICADA
WHERE EJE = 2023
AND TIPECO = 'G'
AND LENGTH(ECO) = 1
AND ECO NOT IN ('5', '9')
ORDER BY ECO;
CURSOR IMPORTES (COMPONENTE_ DATOSPROYECTOS.COMPONENTE%TYPE,
INVERSION_ DATOSPROYECTOS.INVERSION%TYPE,
ECO_ TIPIFICADA.ECO%TYPE,
FECHA_DESDE_ DATE,
FECHA_HASTA_ DATE) IS
SELECT DECODE(P.CTA, '0030', P.CTA, SUBSTR(P.CTA, 1, 3)) CTA, P.DEBHAB, ROUND(NVL(SUM(P.IMP), 0) / 1000, 2) IMP
FROM PASI P, ASIENTOS A, DATOSPROYECTOS D
WHERE D.COMPONENTE = COMPONENTE_
AND D.INVERSION = INVERSION_
AND D.FECINI <= FECHA_HASTA_
AND (D.FECFIN IS NULL OR D.FECFIN >= FECHA_DESDE_)
AND P.NUMPROY = D.NUMPROY
AND ( P.CTA = '0030' AND P.DEBHAB = 'H'
OR P.CTA = '004' AND P.DEBHAB = 'H'
OR P.CTA = '005' AND P.DEBHAB = 'H'
OR P.CTA LIKE '400%')
AND SUBSTR(P.ECO, 1, 1) = ECO_
AND A.ANOASI = P.ANOASI
AND A.NUMASI = P.NUMASI
AND A.FECENT BETWEEN FECHA_DESDE_ AND FECHA_HASTA_
GROUP BY DECODE(P.CTA, '0030', P.CTA, SUBSTR(P.CTA, 1, 3)), P.DEBHAB;
BEGIN
FECHA_DESDE := :PRINCIPAL.FECHA_DESDE;
FECHA_HASTA := :PRINCIPAL.FECHA_HASTA;
SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'BUSY');
HOST('delete '||ruta_||fichero_, NO_SCREEN);
-- Copio la plantilla original en c:\temp para trabajar sobre ella.
HOST('copy '||fichero_||' '||ruta_||fichero_, NO_SCREEN);
check_file := TEXT_IO.FOPEN(ruta_||fichero_, 'R');
TEXT_IO.FCLOSE(check_file);
application := ole2.create_obj('Excel.Application');
ole2.set_property(application , 'Visible', 0);
workbooks := ole2.get_obj_property(application, 'Workbooks');
args := ole2.create_arglist;
ole2.add_arg(args, ruta_||fichero_);
workbook := ole2.invoke_obj(workbooks, 'Open', args);
ole2.destroy_arglist(args);
worksheets := ole2.get_obj_property(workbook, 'Worksheets');
SELECT COUNT(*)
INTO NUMERO_DUPLAS
FROM (SELECT DISTINCT COMPONENTE, INVERSION
FROM DATOSPROYECTOS);
NUMERO_HOJAS := ole2.get_num_property(worksheets, 'Count');
IF NUMERO_DUPLAS > NUMERO_HOJAS THEN
ERROR('EL NÚMERO DE DUPLAS COMPONENTE|INVERSION ('||NUMERO_DUPLAS||') ES DISTINTO AL NÚMERO DE HOJAS CONTEMPLADAS EN EL FICHERO EXCEL ('||NUMERO_HOJAS||')');
END IF;
-- Recorremos las hojas
FOR H IN HOJAS LOOP
NUMERO_HOJA := NUMERO_HOJA + 1;
args := ole2.create_arglist;
ole2.add_arg(args, NUMERO_HOJA);
worksheet := ole2.get_obj_property(worksheets, 'Item', args);
ole2.destroy_arglist(args);
-- Obtenemos el nombre de la hoja, que será igual a COMPONENTE+INVERSION
--nombrehoja_ := ole2.get_char_property(worksheet, 'Name');
-- Nombramos la hoja según su número
ole2.set_property(worksheet, 'Name', NUMERO_HOJA);
args := ole2.create_arglist;
ole2.add_arg(args, 2);
ole2.add_arg(args, 1);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', 'Código Componente.Inversión: '||H.COMPONENTE||'.'||H.INVERSION);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
TCREDITO_TOTAL := 0;
TGASTO_AUTORIZADO_CORRIENTE := 0;
TGASTO_AUTORIZADO_POSTERIOR := 0;
TGASTO_COMPROMETIDO_CORRIENTE := 0;
TGASTO_COMPROMETIDO_POSTERIOR := 0;
TOBLIGACIONES_RECONOCIDAS := 0;
TTOTAL_PAGOS := 0;
FOR C IN CAPITULOS LOOP
CREDITO_TOTAL := 0;
GASTO_AUTORIZADO_CORRIENTE := 0;
GASTO_COMPROMETIDO_CORRIENTE := 0;
OBLIGACIONES_RECONOCIDAS := 0;
TOTAL_PAGOS := 0;
FOR I IN IMPORTES (H.COMPONENTE, H.INVERSION, C.CAPITULO, FECHA_DESDE, FECHA_HASTA) LOOP
IF I.CTA = '0030' AND I.DEBHAB = 'H' THEN
CREDITO_TOTAL := I.IMP;
TCREDITO_TOTAL := TCREDITO_TOTAL + CREDITO_TOTAL;
ELSIF I.CTA = '004' AND I.DEBHAB = 'H' THEN
GASTO_AUTORIZADO_CORRIENTE := I.IMP;
TGASTO_AUTORIZADO_CORRIENTE := TGASTO_AUTORIZADO_CORRIENTE + GASTO_AUTORIZADO_CORRIENTE;
ELSIF I.CTA = '005' AND I.DEBHAB = 'H' THEN
GASTO_COMPROMETIDO_CORRIENTE := I.IMP;
TGASTO_COMPROMETIDO_CORRIENTE := TGASTO_COMPROMETIDO_CORRIENTE + GASTO_COMPROMETIDO_CORRIENTE;
ELSIF I.CTA LIKE '400%' AND I.DEBHAB = 'H' THEN
OBLIGACIONES_RECONOCIDAS := I.IMP;
TOBLIGACIONES_RECONOCIDAS := TOBLIGACIONES_RECONOCIDAS + OBLIGACIONES_RECONOCIDAS;
ELSIF I.CTA LIKE '400%' AND I.DEBHAB = 'D' THEN
TOTAL_PAGOS := I.IMP;
TTOTAL_PAGOS := TTOTAL_PAGOS + TOTAL_PAGOS;
END IF;
END LOOP;
-- GASTOS AUTORIZADOS EJ POSTERIOR
SELECT ROUND(NVL(SUM(P.IMP), 0) / 1000, 2)
INTO GASTO_AUTORIZADO_POSTERIOR
FROM PARTIGASEF P, DOCGASEF DF, DATOSPROYECTOS D
WHERE D.COMPONENTE = H.COMPONENTE
AND D.INVERSION = H.INVERSION
AND D.FECINI <= FECHA_HASTA
AND (D.FECFIN IS NULL OR D.FECFIN >= FECHA_DESDE)
AND P.NUMPROY = D.NUMPROY
AND P.TIPOPEGAS LIKE 'A%'
AND SUBSTR(P.ECO, 1, 1) = C.CAPITULO
AND DF.ANODOCGASEF = P.ANODOCGASEF
AND DF.NUMDOCGASEF = P.NUMDOCGASEF
AND DF.FECMAT IS NOT NULL
AND (DF.FECACTIVACION IS NOT NULL AND DF.FECACTIVACION >= TO_DATE('01/' || TO_CHAR(OBT_EJETRABAJO(USER)+1),'MM/YYYY') OR DF.CARPRE >= :CABECERA.EJETRABAJO+1);
TGASTO_AUTORIZADO_POSTERIOR := TGASTO_AUTORIZADO_POSTERIOR + GASTO_AUTORIZADO_POSTERIOR;
-- GASTOS COMPROMETIDOS EJ POSTERIOR
SELECT ROUND(NVL(SUM(P.IMP), 0) / 1000, 2)
INTO GASTO_COMPROMETIDO_POSTERIOR
FROM PARTIGASEF P, DOCGASEF DF, DATOSPROYECTOS D
WHERE D.COMPONENTE = H.COMPONENTE
AND D.INVERSION = H.INVERSION
AND D.FECINI <= FECHA_HASTA
AND (D.FECFIN IS NULL OR D.FECFIN >= FECHA_DESDE)
AND P.NUMPROY = D.NUMPROY
AND P.TIPOPEGAS LIKE '%D%'
AND SUBSTR(P.ECO, 1, 1) = C.CAPITULO
AND DF.ANODOCGASEF = P.ANODOCGASEF
AND DF.NUMDOCGASEF = P.NUMDOCGASEF
AND DF.FECMAT IS NOT NULL
AND (DF.FECACTIVACION IS NOT NULL AND DF.FECACTIVACION >= TO_DATE('01/' || TO_CHAR(OBT_EJETRABAJO(USER)+1),'MM/YYYY') OR DF.CARPRE >= :CABECERA.EJETRABAJO+1);
TGASTO_COMPROMETIDO_POSTERIOR := TGASTO_COMPROMETIDO_POSTERIOR + GASTO_COMPROMETIDO_POSTERIOR;
IF C.CAPITULO = 1 THEN
FILA_ := 6;
ELSIF C.CAPITULO = 2 THEN
FILA_ := 8;
ELSIF C.CAPITULO = 3 THEN
FILA_ := 11;
ELSIF C.CAPITULO = 4 THEN
FILA_ := 12;
ELSIF C.CAPITULO = 6 THEN
FILA_ := 24;
ELSIF C.CAPITULO = 7 THEN
FILA_ := 27;
ELSIF C.CAPITULO = 8 THEN
FILA_ := 40;
END IF;
-- CREDITO TOTAL
args := ole2.create_arglist;
ole2.add_arg(args, FILA_);
ole2.add_arg(args, 3);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', CREDITO_TOTAL);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
-- GASTO_AUTORIZADO_CORRIENTE
args := ole2.create_arglist;
ole2.add_arg(args, FILA_);
ole2.add_arg(args, 4);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', GASTO_AUTORIZADO_CORRIENTE);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
-- GASTO_AUTORIZADO_POSTERIOR
args := ole2.create_arglist;
ole2.add_arg(args, FILA_);
ole2.add_arg(args, 5);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', GASTO_AUTORIZADO_POSTERIOR);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
-- GASTO_COMPROMETIDO_CORRIENTE
args := ole2.create_arglist;
ole2.add_arg(args, FILA_);
ole2.add_arg(args, 6);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', GASTO_COMPROMETIDO_CORRIENTE);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
-- GASTO_COMPROMETIDO_POSTERIOR
args := ole2.create_arglist;
ole2.add_arg(args, FILA_);
ole2.add_arg(args, 7);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', GASTO_COMPROMETIDO_POSTERIOR);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
-- OBLIGACIONES_RECONOCIDAS
args := ole2.create_arglist;
ole2.add_arg(args, FILA_);
ole2.add_arg(args, 8);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', OBLIGACIONES_RECONOCIDAS);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
-- TOTAL GASTO EJECUTADO
args := ole2.create_arglist;
ole2.add_arg(args, FILA_);
ole2.add_arg(args, 10);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', OBLIGACIONES_RECONOCIDAS);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
-- TOTAL PAGOS
args := ole2.create_arglist;
ole2.add_arg(args, FILA_);
ole2.add_arg(args, 11);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', TOTAL_PAGOS);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
END LOOP;
-- TOTALES
args := ole2.create_arglist;
ole2.add_arg(args, 56);
ole2.add_arg(args, 3);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', TCREDITO_TOTAL);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
ole2.add_arg(args, 56);
ole2.add_arg(args, 4);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', TGASTO_AUTORIZADO_CORRIENTE);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
ole2.add_arg(args, 56);
ole2.add_arg(args, 5);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', TGASTO_AUTORIZADO_POSTERIOR);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
ole2.add_arg(args, 56);
ole2.add_arg(args, 6);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', TGASTO_COMPROMETIDO_CORRIENTE);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
ole2.add_arg(args, 56);
ole2.add_arg(args, 7);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', TGASTO_COMPROMETIDO_POSTERIOR);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
ole2.add_arg(args, 56);
ole2.add_arg(args, 8);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', TOBLIGACIONES_RECONOCIDAS);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
ole2.add_arg(args, 56);
ole2.add_arg(args, 10);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', TOBLIGACIONES_RECONOCIDAS);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
ole2.add_arg(args, 56);
ole2.add_arg(args, 11);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.set_property(cell, 'Value', TTOTAL_PAGOS);
ole2.release_obj(cell);
ole2.destroy_arglist(args);
ole2.release_obj(worksheet);
END LOOP;
-- Recorremos las hojas
FOR I IN 1 .. 12 LOOP
args := ole2.create_arglist;
ole2.add_arg(args, I);
worksheet := ole2.get_obj_property(worksheets, 'Item', args);
if i in (11, 12) then
--mensaje('hoja '||i||' nombre: '||ole2.get_char_property(worksheet, 'Name'));
ole2.set_property(worksheet, 'Name', 'b');
ole2.set_property(worksheet, 'Name', 'c');
ole2.set_property(worksheet, 'Name', 'd');
ole2.set_property(worksheet, 'Name', 'e');
--mensaje('hoja '||i||' nombre: '||ole2.get_char_property(worksheet, 'Name'));
ole2.invoke(worksheet, 'Delete');
end if;
ole2.destroy_arglist(args);
ole2.release_obj(worksheet);
END LOOP;
-- Se guardan los datos y sale de Excel
ole2.release_obj(worksheets);
ole2.invoke(workbook, 'Save');
ole2.invoke(workbook, 'Close');
ole2.release_obj(workbook);
ole2.release_obj(workbooks);
ole2.invoke(application, 'Save');
ole2.invoke(application, 'Quit');
ole2.release_obj(application);
SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'DEFAULT');
HOST('start '||ruta_||fichero_, NO_SCREEN);
EXCEPTION
WHEN no_file THEN
SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'DEFAULT');
ERROR('No se ha encontrado la plantilla Excel.');
WHEN OTHERS THEN
SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'DEFAULT');
MENSAJE('ERROR '||sqlcode||': '||sqlerrm);
FOR i IN 1 .. tool_err.nerrors LOOP
MENSAJE(tool_err.message);
tool_err.pop;
END LOOP;
END;
[Updated on: Thu, 13 April 2023 01:09] Report message to a moderator
|
|
|
Goto Forum:
Current Time: Tue Mar 11 14:12:09 CDT 2025
|