Hallo
Ein Freund von mir hat angehängte Prozedur geschrieben, welche wunderbar
mit Excel funktioniert hat. Nun wurden die Excel typischen Sachen entfernt
und dafür scalc oder soffice eingesetzt. Doch leider geht die Prozedur
jetzt nicht mehr. Wäre super wenn sich das bitte mal einer anschauen kann
der sichmit DDE aus kennt.
Vielen lieben Dank
Gruß
Marko
--
--
--
PROCEDURE F50_DDE_EXCEL(output_file in varchar2 := 'output.xls') IS
appid PLS_INTEGER;
convid PLS_INTEGER;
docid PLS_INTEGER;
CONV_ESTABLISHED BOOLEAN := FALSE;
zeile number := :eingabe.ab_zeile;
spalte number := 0;
v_host varchar2(1000);
BEGIN
message('***1 ######### 2');
-- 16.03.09
appid := DDE.APP_BEGIN('g:\oracle8\forms6i\winopen.exe scalc.exe ',
--||output_file,
DDE.APP_MODE_MAXIMIZED);
/* Öffnen einer DDE-Verbindung mit der Server-Applikation Excel */
WHILE not CONV_ESTABLISHED LOOP
BEGIN
convid := DDE.INITIATE('soffice','system');
message('***2 ');
CONV_ESTABLISHED := TRUE;
EXCEPTION
WHEN DDE.DMLERR_NO_CONV_ESTABLISHED THEN
CONV_ESTABLISHED := FALSE;
END;
END LOOP;
-- 16.03.09
message('***3 '||output_file);
DDE.EXECUTE(convid, '[Save.As("' || output_file || '")]', 10000);
/* Öffnen einer DDE-Verbindung mit der Excel-Datei */
message('***4 ');
docid := DDE.INITIATE('soffice',output_file);
message('***5 ');
DDE.POKE(docid,'Z1S1', '### xyz ###', DDE.CF_TEXT, 10000);
/*Verbindungen beenden */
message('***6 ');
DDE.TERMINATE(docid);
DDE.TERMINATE(convid);
--DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt
EXCEPTION
WHEN form_trigger_failure THEN
message(sqlerrm);
raise form_trigger_failure;
WHEN DDE.DDE_APP_FAILURE THEN
message('Windows-Applikation kann nicht gestartet werden.');
DDE.TERMINATE(docid);
DDE.TERMINATE(convid);
--DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt
WHEN DDE.DDE_PARAM_ERR THEN
message('DDE wurde ein NULL-Wert übergeben.');
DDE.TERMINATE(docid);
DDE.TERMINATE(convid);
--DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt
WHEN DDE.DMLERR_NO_CONV_ESTABLISHED THEN
message('DDE kann eine Verbindung nicht einleiten.');
DDE.TERMINATE(docid);
DDE.TERMINATE(convid);
--DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt
WHEN DDE.DMLERR_NOTPROCESSED THEN
message('Fehler bei einer Transaktion aufgetaucht.');
DDE.TERMINATE(docid);
DDE.TERMINATE(convid);
--DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt
WHEN OTHERS THEN
message(sqlerrm);
DDE.TERMINATE(docid);
DDE.TERMINATE(convid);
--DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt
END;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]