ďťż
 
eksport do excela z Oracle Forms ďťż
 
eksport do excela z Oracle Forms
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

eksport do excela z Oracle Forms



mcinek@gmail.com - 16-03-2007 00:02
eksport do excela z Oracle Forms
  Witam.

Chciałbym zrobić następującą rzecz: na formularzu umieścić przycisk,
którego kliknięcie spowoduje utworzenie pliku w formacie excela
(bądź jakimś łatwo importowalnym, np. csv) z danymi aktualnie
pokazywanymi w formularzu, czyli uwzględniającymi zapytania
określone już podczas budowy formularza, a jeszcze lepiej wprowadzone
przez użytkownika w trybie zapytań. Czy da się zrobić coś takiego?

Wiem, że można zrobić eksport po prostu z tabeli. Ale czy można
wtedy 'pobrać' jakoś zapytanie używane aktualnie w formularzu?

Mam nadzieję, że dość jasno przedstawiłem mój nietypowy problem:)

Pozdrawiam
Marcin





Pudel - 17-03-2007 00:02

  mcinek@gmail.com napisał(a):
> Witam.
>
> Chciałbym zrobić następującą rzecz: na formularzu umieścić przycisk,
> którego kliknięcie spowoduje utworzenie pliku w formacie excela
> (bądź jakimś łatwo importowalnym, np. csv) z danymi aktualnie
> pokazywanymi w formularzu, czyli uwzględniającymi zapytania
> określone już podczas budowy formularza, a jeszcze lepiej wprowadzone
> przez użytkownika w trybie zapytań. Czy da się zrobić coś takiego?
>
> Wiem, że można zrobić eksport po prostu z tabeli. Ale czy można
> wtedy 'pobrać' jakoś zapytanie używane aktualnie w formularzu?
>
> Mam nadzieję, że dość jasno przedstawiłem mój nietypowy problem :)
>
> Pozdrawiam
> Marcin
>

Witam,
Załączam przykładowy plik wysyłający dane do excela.
Zmienna z_plik zawiera nazwę pliku excel (ścieżkę).
Z_str zawiera ścieżkę do pliku excel.exe.
EXCEL_INV w rejestrze powinno zawierac położenie pliku excel.exe

Na początku trzeba rozpocząć prace excela

appid := dde.app_begin (z_str, dde.app_mode_normal);

póżniej inicjuje się konwersację

convid := dde.initiate ('excel', 'system');

póżniej się otwiera plik

dde.EXECUTE (convid, '[Open("' || z_plik || '")]', 60000);

póżniej się otwiera konwersację z dokumentem

docid := dde.initiate ('excel', z_plik);

Te etapy można trkatować jako zło konieczne. Rozumienie ich
nie jest wymagane.

Poterzebne jest znaczenie procedur:
Oblicz współrzędne - przeksztalca współrzedną w formacie
XX999 an wiersz i kolumnę. Na przykład A1 wiersz 1 kolumna 1.
Ta procedura jest kiepska była sklecona "na chybcika" ale powinna
wystarczyć,
bo obejmuje przypadki do 800 kolumn i nieograniczonej ilości wierszy.

Następna jest "Przekaz".
Wysyła dane ascii pod wskazany adres na arkuszu (dane inne niż ascii
trzeba przekształcic na ascii).

Procedura zmień_arkusz zmienia arkusz na wskazany w parametrze.

aby zakończyć przekazywanie danych trzeba wykonać

dde.EXECUTE (convid, '[Save]', 60000);
dde.TERMINATE (docid);
dde.TERMINATE (convid);

procedure oblicz_wspolrzedne(znaki varchar2,p_wiersz in out
number,p_kolumna in out number ) is

wiersz number:=0;
kolumna number:=1;
/* format współrzędnej - jedna lub dwie duże litery ASCII,
po których liczba */
begin
/* pierwsza musi być litera */
kolumna:= ascii(substr(znaki,1,1))-ascii('A')+1;
if substr(znaki,2,1) not between 'A' and 'Z' then
wiersz:=wiersz*10+ascii(substr(znaki,2,1))-ascii('0');
else
kolumna:= kolumna*26+ascii(substr(znaki,2,1))-ascii('A')+1;
end if;
for i in 3..NVL(length(znaki), 0) loop
wiersz:=wiersz*10+ascii(substr(znaki,i,1))-ascii('0');
end loop;
p_wiersz:=wiersz;
p_kolumna:=kolumna;
end;

/* Formatted on 2004/04/28 23:23 (Formatter Plus v4.8.0) */
PROCEDURE excel
IS
/* Declare variables */
z_str VARCHAR2 (100);
z_plik VARCHAR2 (100);
appid PLS_INTEGER;
convid PLS_INTEGER;
docid PLS_INTEGER;
conv_established BOOLEAN := FALSE;
z_wspolrzedna VARCHAR2 (10) := NULL;
z_arkusz VARCHAR2 (30);

PROCEDURE zmien_arkusz (p_arkusz VARCHAR2)
IS
BEGIN
/* zmieniamy aruksz w razie potrzeby */
IF p_arkusz IS NOT NULL
THEN
dde.TERMINATE (docid);
/* to zabawne gówno lubi mieć nazwę arkusza dłuższĹĄ niż 4
znaki, ha,ha,ha */
docid := dde.initiate ('excel', z_plik || ':' || p_arkusz);
/* progress indication */
dde.EXECUTE (convid,
'[workbook.select("'
|| p_arkusz
|| '",
"'
|| p_arkusz
|| '")]',
60000
);
END IF;
END;

PROCEDURE przekaz (p_wspolrz VARCHAR2, p_dane VARCHAR2)
IS
z_wiersz NUMBER;
z_kolumna NUMBER;
BEGIN
IF p_wspolrz IS NULL
THEN
RETURN;
END IF;

oblicz_wspolrzedne (p_wspolrz, z_wiersz, z_kolumna);
/*================================================= ===================
Nie będzie progress indication bo excel XP lubi mieć WK
DDE.EXECUTE(convid, '[formula.goto("R'||to_char(z_wiersz)||'C'||
to_char(z_kolumna)||'")]', 60000);
================================================== =====================*/
dde.poke (docid,
'W' || TO_CHAR (z_wiersz) || 'K' || TO_CHAR (z_kolumna),
p_dane,
dde.cf_text,
60000
);
END;

PROCEDURE transfer_daty
IS
z_wspolrz mr_spr.wspolrz_okr%TYPE;
z_arkusz mr_spr.arkusz_okr%TYPE;
BEGIN
SELECT s.wspolrz_okr, s.arkusz_okr
INTO z_wspolrz, z_arkusz
FROM mr_spr s
WHERE ID = :mr_spr.ID;

/* Mamy podane wspolrzedne? */
IF z_wspolrz IS NULL
THEN
RETURN;
END IF;

/* zmieniamy arkusz w razie potrzeby */
zmien_arkusz (z_arkusz);
przekaz (z_wspolrz, :okres.id_okres);
END;

PROCEDURE transfer
IS
z_wartosc VARCHAR2 (40);

CURSOR wyr_cur
IS
SELECT s.wspolrz, s.arkusz, s.ID
FROM mr_spr_wyr s
WHERE s.id_spr = :mr_spr.ID
AND (s.wspolrz IS NOT NULL OR s.arkusz IS NOT NULL)
ORDER BY s.ID;
BEGIN
FOR wyr_rec IN wyr_cur
LOOP
/* Warto�ci */
z_wspolrzedna := wyr_rec.wspolrz;
z_arkusz := wyr_rec.arkusz;
zmien_arkusz (wyr_rec.arkusz);

BEGIN
SELECT TO_CHAR (w.wartosc) wartosc
INTO z_wartosc
FROM mr_wartosc w
WHERE w.id_zest = para.id_zest AND w.id_spr_wyr = wyr_rec.ID;

przekaz (wyr_rec.wspolrz, z_wartosc);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
END;
END LOOP;
END;
BEGIN
pobierz_id_zest;
z_plik := :mr_spr.plik;

/* jak krótszy niż 5 to uzupełnij extension */
IF NVL (LENGTH (z_plik), 0) < 5
THEN
z_plik := z_plik || '.xls';
END IF;

/* jak extension nie ma to dopisz */
IF SUBSTR (z_plik, NVL (LENGTH (z_plik), 0) - 3, 1) <> '.'
THEN
z_plik := z_plik || '.xls';
END IF;

/* Start Excel */
tool_env.getvar ('EXCEL_INV', z_str);

IF z_str IS NULL
THEN
blad ('Wpisz ciĹĄg excel_inv do rejestru');
END IF;

appid := dde.app_begin (z_str, dde.app_mode_normal);

/* Establish a conversation with Excel */
/* The following loop will not end until a conversation with Excel
has been established. Therefore, it can result in a endless loop,
so use with caution. */
WHILE NOT conv_established
LOOP
BEGIN
convid := dde.initiate ('excel', 'system');
conv_established := TRUE;
EXCEPTION
WHEN dde.dmlerr_no_conv_established
THEN
conv_established := FALSE;
END;
-- loop
END LOOP;

/* Open Excel document */
/* This assumes that you have an Excel spreadsheet named ddetest.xls
in the root of e: */
dde.EXECUTE (convid, '[Open("' || z_plik || '")]', 60000);
/* Initiate conversation with Excel document */
docid := dde.initiate ('excel', z_plik);
-- dde.app_focus(appid);
transfer_daty;
transfer;
dde.EXECUTE (convid, '[Save]', 60000);
komunikat ('Operacja wykonana');
/*End transfer to Excel */
dde.TERMINATE (docid);
dde.TERMINATE (convid);
-- DDE.APP_END(appid);
/* if z_wspolrzedna is null then
blad('Nie było danych do przekazania.');
end if;
*/
/* Handle exceptions */
EXCEPTION
WHEN dde.dde_app_failure
THEN
MESSAGE ('Aplikacja Excel nie może wystartować.');
WHEN dde.dde_param_err
THEN
MESSAGE ('A NULL VALUE WAS PASSED TO DDE');
WHEN dde.dmlerr_no_conv_established
THEN
MESSAGE ('Nie mogę rozpoczĹĄć konwersacji. Sprawdďż˝ nazwę pliku.');
WHEN dde.dmlerr_notprocessed
THEN
blad ( 'Nie mogłem przekazać danych do komórki '
|| z_wspolrzedna
|| ' Na arkuszu '
|| z_arkusz
);
/* End of trigger */
END;




ZepZoSo - 20-03-2007 00:02

  Użytkownik brzdąka pod nosem:
> Chciałbym zrobić następującą rzecz: na formularzu umieścić przycisk,
> którego kliknięcie spowoduje utworzenie pliku w formacie excela

Spróbuj obczaić takie coś co się OLE2 zowie.

--
Z
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?= Oracle 19g +Insert +Insert +Insert... [oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?= [Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?= =?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?= [oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?= [oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?= MSSQL Express czy Oracle Express =?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?= =?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lunadance.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com