powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Экспорт нескольких отчетов одновременно
25 сообщений из 25, страница 1 из 1
Экспорт нескольких отчетов одновременно
    #37675279
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток,
ищу решение такой вот проблемки:
На странице есть 3 отдельных региона - отчета.
Надо одной кнопкой экспортировать их всех в csv или любой другой формат понятный экселю.
Старндартными методами как я понял можно экспортировать по отдельности каждый регион, но не все разом.

Пробовал на всю страницу выставлять Page Template: PrinterFriendly и Before Header/Processes страницы пихать:

BEGIN
owa_util.mime_header('application/vnd.ms-excel', FALSE);
htp.p('Content-Disposition: attachment; filename="my_file.csv"');
owa_util.http_header_close;
END;

а в After regions/Processes:

BEGIN
htmldb_application.g_unrecoverable_error := TRUE;
END;

В итоге получаю одним куском файл со всеми 3 отчетами но к сожалению в него попадает много html мусора от которого я не знаю способа как избавиться.

Рою инет уже которую неделю, может я чето не догоняю даже как то не вериться что в апексе такой возможности как комплексный экспорт страницы со всеми отчетами нет.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37675734
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот примерт как это выглядит
http://apex.oracle.com/pls/apex/f?p=39655
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37676011
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели никаких идей?
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37676141
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Den999,

Shared Components > Reports > Report Queries + Report Layouts смотрели?
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37676419
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Den999,

И что? Я вот например в новом Excel'е такое тоже найти не могу.
Вы уверены, что формат csv вообще такое поддерживает (несколько таблиц) ?

Можно конечно поизвращаться с сервером печати. Или долго и настойчиво искать какие-то библиотеки.
Но не страдайте фигней. Программируется руками за 15 мин.

Вот пару ссылок, которые могут помочь

Denes Kubicek. Upload Files
Страница без темплейтов

Заодно определитесь с форматом, что вы хотите получить в итоге...
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37676463
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Den999,

Вот рабочий пример. Выгрузка в один файл xls данных из двух запросов.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37676943
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
haXbatDen999,

Вот рабочий пример. Выгрузка в один файл xls данных из двух запросов.

это мой пример? а где первый вертикальный отчет?
уточню, на моей странице три отчета:

1) вертикальный sql отчет
2) обычный но из PL/SQL function body returning SQL query
3) Interactive Report

если это сделано с помощью внешнего принт сервера типа BI Publisher'a или т.п. то такой вариант к сожеления не подходит, т.к. у заказчика физически невозможно больше ничего дополнительно инсталировать кроме уже существующих win7 64bit+db11.2+apex4.2
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37676967
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
haXbatDen999,

Вот рабочий пример. Выгрузка в один файл xls данных из двух запросов.

Прекрасно знаю такой способ генерированию страниц, сам его изпользовал с обычным Apache+mod_plsql лет 5 назад до перехода на апекс. Теперь вы мне предлагаете перелопатить готовую апликацию с 10 отчетами и в РУЧНУЮ запрограмить их все? Поверьте это точно не 15мин и даже не 15 часов. Это я тут для пониманию моей задачи привел очень упрощеный примерчик.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37676988
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SvDevDen999,

И что? Я вот например в новом Excel'е такое тоже найти не могу.
Вы уверены, что формат csv вообще такое поддерживает (несколько таблиц) ?

Можно конечно поизвращаться с сервером печати. Или долго и настойчиво искать какие-то библиотеки.
Но не страдайте фигней. Программируется руками за 15 мин.

Вот пару ссылок, которые могут помочь

Denes Kubicek. Upload Files
Страница без темплейтов

Заодно определитесь с форматом, что вы хотите получить в итоге...

Да в xls формат не обязательно конвертировать, достаточно обычный CSV.
Он не может поддерживать или не поддерживать несколько таблиц, т.к. это обычный текст разделенный определенным символом по которому уже программа его обрабатывающаю может парсить его в таблицы. Так что это задача экселя поддерживать, с чем она и прекрасно справляется.
В итоге мне надо обычные экселевские таблицы без всякого форматирования, поэтому и выбрал и CSV тут самое простое решение.
Ну как аналог может быть в HTML или XML он (эксель) тоже прекрасно распарщивает.
Как пример я попробовал сделать выгрузку страницы генирируемой апексом в HTML но что из этого получается видели на примере -куча ненужного мусора.

Насчет приведенных ссылок:
Прекрасно знаю такой способ генерированию страниц, сам его изпользовал с обычным Apache+mod_plsql лет 5 назад до перехода на апекс. Теперь вы мне предлагаете перелопатить готовую апликацию с 10 отчетами и в РУЧНУЮ запрограмить их все? Поверьте это точно не 15мин и даже не 15 часов. Это я тут для пониманию моей задачи привел очень упрощеный примерчик.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37677057
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Den999,

Код: plsql
1.
2.
Да в xls формат не обязательно конвертировать, достаточно обычный CSV.
Он не может поддерживать или не поддерживать несколько таблиц, т.к. это обычный текст разделенный определенным символом по которому уже программа его обрабатывающаю может парсить его в таблицы. Так что это задача экселя поддерживать, с чем она и прекрасно справляется.


Да где же справляется-то ??? Офис 2007 нету. Офис 2003 умеет только один лист экспортировать в него.
Объедините в один репорт, скройте, и получить возможность экспорта объединенных данных.

авторПоверьте это точно не 15мин и даже не 15 часов. Это я тут для пониманию моей задачи привел очень упрощеный примерчик.
вот именно потому что csv это просто значения через разделитель, глупо искать библиотеку для непонятной задачи, которую даже excel не умеет. Проще сделать руками.

Где там 15 часов нашли не понятно. Под каждым reports есть source. Продублировать его, и записать через разделитель.
Если у вас там супер-сложно-организованный-dynamic content, или нужно проделать на 100 страницах, можно поискать другие подходы собирания данных, но это уже другая тема.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37677138
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SvDevDen999,

Код: plsql
1.
2.
Да в xls формат не обязательно конвертировать, достаточно обычный CSV.
Он не может поддерживать или не поддерживать несколько таблиц, т.к. это обычный текст разделенный определенным символом по которому уже программа его обрабатывающаю может парсить его в таблицы. Так что это задача экселя поддерживать, с чем она и прекрасно справляется.


Да где же справляется-то ??? Офис 2007 нету. Офис 2003 умеет только один лист экспортировать в него.
Объедините в один репорт, скройте, и получить возможность экспорта объединенных данных.

авторПоверьте это точно не 15мин и даже не 15 часов. Это я тут для пониманию моей задачи привел очень упрощеный примерчик.
вот именно потому что csv это просто значения через разделитель, глупо искать библиотеку для непонятной задачи, которую даже excel не умеет. Проще сделать руками.

Где там 15 часов нашли не понятно. Под каждым reports есть source. Продублировать его, и записать через разделитель.
Если у вас там супер-сложно-организованный-dynamic content, или нужно проделать на 100 страницах, можно поискать другие подходы собирания данных, но это уже другая тема.

Возможности экселя экспортировать в csv мне на самом деле не важны ведь я не экспортирую из экселя а импортирую в эксель csv формат, и с этим проблем никаких не возникало. Есть файл с тремя блоками текста через точку с запятой(;) все прекрасно импортируется в три отдельные таблицы одна под другой.

насчет копированию сорца в другие места программы это не совсем правильный подход с точки зрения програмирования да и так тупо не сработает, т.к. у меня в отчете динамически отключаются столбцы в зависимости от начальных параметров да и сорторовка и групировка в IR, слету просто не сделаешь.

Чувствуе придется писать собственный пакет экспорта. Нашел несколько апексовских пакетов по теме (WWV_FLOW_PLUGIN_UTIL; WWV_FLOW_RENDER_QUERY) но нужно время тестировать и пробовать а его как всегда нету :(
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37677248
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Den999,

Могу еще предложить по теме

Код: plsql
1.
2.
select * from apex_application_page_rpt 
select * from apex_application_page_rpt_cols



так же можно обратить внимание, ссылки на download csv имеют не сложный синтаксис, и все они в public доступе,
можно в цикле попробовать подгрузить и сконкатинировать. Только сомневаюсь, что найдете готовые реализации.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37677593
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SvDevDen999,

Могу еще предложить по теме

Код: plsql
1.
2.
select * from apex_application_page_rpt 
select * from apex_application_page_rpt_cols



так же можно обратить внимание, ссылки на download csv имеют не сложный синтаксис, и все они в public доступе,
можно в цикле попробовать подгрузить и сконкатинировать. Только сомневаюсь, что найдете готовые реализации.

За селекты спасибо.
С конкантинацией интересное предложение, но как по обращению по линку который возвращает csv получить его содержимое скажем в какойто свой буфер а не запрос на сохранение файла?
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37678417
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Den999,

Через utl_http. Вот сваял из кусков пример вам:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
declare
    vURL       VARCHAR2(255);
    vBlob           BLOB;
    vCookieNameList  Owa_Cookie.vc_arr;
    vCookieValueList Owa_Cookie.vc_arr;
    vCookieCount     INTEGER;
    vCookieList      Utl_Http.cookie_table;
    vRequest         Utl_Http.req;
    vResponse        Utl_Http.resp;
    vData            RAW(32767);
BEGIN
    htp.init;
    vURL := apex_util.host_url('SCRIPT') || 'f?p=122:6:' || :session || '::::';
    DBMS_LOB.createtemporary(vBlob, FALSE);


    Owa_Cookie.get_all
      ( names    => vCookieNameList
      , vals     => vCookieValueList
      , num_vals => vCookieCount
      );
    FOR ii IN 1 .. vCookieNameList.COUNT
    LOOP
        vCookieList(ii).name   := vCookieNameList(ii);
        vCookieList(ii).value  := vCookieValueList(ii);
        vCookieList(ii).domain := ltrim( apex_util.host_url, 'http://' );
        vCookieList(ii).path   := '/';
    END LOOP;
    Utl_Http.add_cookies(vCookieList);



    vRequest := Utl_Http.begin_request(vURL);
    Utl_Http.set_header(vRequest, 'User-Agent', UPPER(OWA_UTIL.GET_CGI_ENV('HTTP_USER_AGENT')) );
    vResponse := Utl_Http.get_response(vRequest);


    LOOP
        BEGIN
            --------------------------------------------------------------------
            -- read the next junk of binary data
            --------------------------------------------------------------------
            Utl_Http.read_raw(vResponse, vData);
            --------------------------------------------------------------------
            -- append it to our blob for the pdf file
            --------------------------------------------------------------------
            Dbms_Lob.writeAppend
              ( lob_loc => vBlob
              , amount  => Utl_Raw.length(vData)
              , buffer  => vData
              );
        EXCEPTION WHEN Utl_Http.END_OF_BODY THEN
            EXIT; -- exit loop
        END;
    END LOOP;
    Utl_Http.end_response(vResponse);

    OWA_UTIL.mime_header ( 'text/html', FALSE);
    HTP.p ('Content-length: ' || dbms_lob.getlength(vBlob));
    OWA_UTIL.http_header_close;
    WPG_DOCLOAD.download_file (vBlob);
    apex_application.stop_apex_engine;
end;


(в данном случае before header process подгружает другую страницу, не public)

Работает в 4.1.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37678427
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут я вижу 2 варианта. Если не хочется/не можется копировать/исправлять source.

1. Самостоятельно получить source и обработать его, в зависимости от типа региона.
В том числе conditional columns и т.д.
Недостаток: куча недокументированнных вызовов, вроде apex_040100.wwv_flow_page_plugs, постоянные дописывания двигателя.

2. utl_http, подгрузить все csv и сконкатинировать. В ссылках region_id должен быть, который так же легко вычислить.
Недостаток: скорость такой обработки.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37678474
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бегло еще поискал по вашей теме.

3. Попытать счастья с APEX_XXXXXX.WWV_FLOW_DISP_PAGE_PLUGS.DISPLAY_REPORT
которая наверняка пишет во все тот же wpg_docload с открытыми исходными кодами.

Напишите, делитесь.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37679118
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SvDevDen999,

Через utl_http. Вот сваял из кусков пример вам:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
declare
    vURL       VARCHAR2(255);
    vBlob           BLOB;
    vCookieNameList  Owa_Cookie.vc_arr;
    vCookieValueList Owa_Cookie.vc_arr;
    vCookieCount     INTEGER;
    vCookieList      Utl_Http.cookie_table;
    vRequest         Utl_Http.req;
    vResponse        Utl_Http.resp;
    vData            RAW(32767);
BEGIN
    htp.init;
    vURL := apex_util.host_url('SCRIPT') || 'f?p=122:6:' || :session || '::::';
    DBMS_LOB.createtemporary(vBlob, FALSE);


    Owa_Cookie.get_all
      ( names    => vCookieNameList
      , vals     => vCookieValueList
      , num_vals => vCookieCount
      );
    FOR ii IN 1 .. vCookieNameList.COUNT
    LOOP
        vCookieList(ii).name   := vCookieNameList(ii);
        vCookieList(ii).value  := vCookieValueList(ii);
        vCookieList(ii).domain := ltrim( apex_util.host_url, 'http://' );
        vCookieList(ii).path   := '/';
    END LOOP;
    Utl_Http.add_cookies(vCookieList);



    vRequest := Utl_Http.begin_request(vURL);
    Utl_Http.set_header(vRequest, 'User-Agent', UPPER(OWA_UTIL.GET_CGI_ENV('HTTP_USER_AGENT')) );
    vResponse := Utl_Http.get_response(vRequest);


    LOOP
        BEGIN
            --------------------------------------------------------------------
            -- read the next junk of binary data
            --------------------------------------------------------------------
            Utl_Http.read_raw(vResponse, vData);
            --------------------------------------------------------------------
            -- append it to our blob for the pdf file
            --------------------------------------------------------------------
            Dbms_Lob.writeAppend
              ( lob_loc => vBlob
              , amount  => Utl_Raw.length(vData)
              , buffer  => vData
              );
        EXCEPTION WHEN Utl_Http.END_OF_BODY THEN
            EXIT; -- exit loop
        END;
    END LOOP;
    Utl_Http.end_response(vResponse);

    OWA_UTIL.mime_header ( 'text/html', FALSE);
    HTP.p ('Content-length: ' || dbms_lob.getlength(vBlob));
    OWA_UTIL.http_header_close;
    WPG_DOCLOAD.download_file (vBlob);
    apex_application.stop_apex_engine;
end;


(в данном случае before header process подгружает другую страницу, не public)

Работает в 4.1.


решение с UTIL_HTTP генеально, но почемуто заставить работать приведенный пример я не смог.
вставил ваш соурц (исправив app_id i page_id на свои) в onload before header с условием срабатывания по нажатии кнопки.
но как только я нажимал кнопку происходило перебрасывание на страницу логина. выяснил что это происходит в момент отработки строчки с WPG_DOCLOAD.download_file (vBlob);
решил упростить пример чтобы чтение страницы происходило не blob а сразу в htp буфер, результат тотже: генерируемое содержимое файла - страница логина. Похоже какаято служебная информация для работы апекса теряется при обращении через UTL_HTTP.

P.S.
Переменная vURL, проверял, генерируется правильно с актуальным session_id.
А на apex.oracle.com вываливается ошибка: ORA-24247: network access denied by access control list (ACL)
http://apex.oracle.com/pls/apex/f?p=39655
кнопка UTL_HTTP
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37679119
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SvDevБегло еще поискал по вашей теме.

3. Попытать счастья с APEX_XXXXXX.WWV_FLOW_DISP_PAGE_PLUGS.DISPLAY_REPORT
которая наверняка пишет во все тот же wpg_docload с открытыми исходными кодами.

Напишите, делитесь.

Это именно та процедура которая срабатывает при нажатии на стандартный апексовкий линк (export to CSV) у региона с репортом (см. мой пример http://apex.oracle.com/pls/apex/f?p=39655).
К сожалению она выдает готовый результат в htp буфер да к томуже вертикальный репорт (первый в моем примере) переделывает в горизонтальный, что никуда не годится.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37679121
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SvDevТут я вижу 2 варианта. Если не хочется/не можется копировать/исправлять source.

1. Самостоятельно получить source и обработать его, в зависимости от типа региона.
В том числе conditional columns и т.д.
Недостаток: куча недокументированнных вызовов, вроде apex_040100.wwv_flow_page_plugs, постоянные дописывания двигателя.

2. utl_http, подгрузить все csv и сконкатинировать. В ссылках region_id должен быть, который так же легко вычислить.
Недостаток: скорость такой обработки.

Именно так, я выбираю 2 вариант, только конкатинировать я не буду, т.к. захватывать буду всю страницу целиком со всеми тремя сгенерироваными репортами только с Printer_Friendly template'ом (облегченый вид для печати страницы) и дальнейшей вырезкой из буфера с захваченой страницей по UTL_HTTP, ненужного мусора наподобии всяких меню поисов в IR и стилей для таблиц, чтобы окончательный, и очищеный таким образом, html вариант открывать экселем.
Осталось разобраться с загрузкой через UTL_HTTP (проблему описал в раннем посте)
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37679446
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Den999,

csv я еще могу понять, html врятли. Хотя бы pagination. ЭКспортирует 1 из 100 страниц.

Залог успеха:

1. valid url
2.
Код: plsql
1.
vCookieList(ii).domain := ltrim( apex_util.host_url, 'http://' );


обрезать еще порт, если не 80
3. для 11g acl. no comments.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37680560
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SvDevDen999,

csv я еще могу понять, html врятли. Хотя бы pagination. ЭКспортирует 1 из 100 страниц.

Залог успеха:

1. valid url
2.
Код: plsql
1.
vCookieList(ii).domain := ltrim( apex_util.host_url, 'http://' );


обрезать еще порт, если не 80
3. для 11g acl. no comments.

вырезка порта помогла, спасибо.
и вставил в ваш пример после строчки "OWA_UTIL.mime_header ( 'text/html', FALSE);"
" htp.p('Content-Disposition: attachment; filename="test.htm"');"
чтобы выкидывал диалог "save/open file"

pagination у меня будет отключен на момент генерации файла, пока еще не знаю как :)
может вообще отключу, т.к. отчеты у меня не большие, мотать сотнями строк не надо точно.

сейчас разбераюсь почему при вызове всего этого из "On Load - Before Header" как процедуру выкидывает:
ORA-29273: HTTP request failed ORA-06512: at "SYS.UTL_HTTP", line 1130 ORA-24247: network access denied by access control list (ACL)

вызов через анонимный блок в "On Load - Before Header" - никаких ошибок :(
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37685500
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с ACL разобрался, надо было добавить право из моей схемы работать с сетью:

BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('/sys/acls/power_users.xml', 'TELEMETRIJA3', TRUE, 'connect');
END;

процедуру ехпорта страницы дописал с возможностью вырезать мусор посредством REGEXP_REPLACE
кому интересно:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
CREATE OR REPLACE PROCEDURE get_page IS

 vURL VARCHAR2(255);
 vBlob BLOB;
 vClob CLOB;
 vCookieNameList owa_cookie.vc_arr;
 vCookieValueList owa_cookie.vc_arr;
 vCookieCount INTEGER;
 vCookieList utl_http.cookie_table;
 vRequest utl_http.req;
 vResponse utl_http.resp;
 vPiece VARCHAR2(32767);
 n1 NUMBER := 1;
 n2 NUMBER := 1;
 convert_warn INTEGER;
 lang_context INTEGER := dbms_lob.default_lang_ctx;
 csid INTEGER := dbms_lob.default_csid;

BEGIN
 htp.init;
 vURL := apex_util.host_url('SCRIPT')||'f?p='||v('APP_ID')||':'||v('APP_PAGE_ID')||':' ||v('APP_SESSION')|| '::NO::::YES'; -- обращение к странице с которой эта процедура и вызвана с установкой Print_Friendly Template'а
 owa_cookie.get_all
   ( names    => vCookieNameList
   , vals     => vCookieValueList
   , num_vals => vCookieCount
   );
 FOR i IN 1 .. vCookieNameList.COUNT LOOP
  vCookieList(i).name   := vCookieNameList(i);
  vCookieList(i).value  := vCookieValueList(i);
  vCookieList(i).domain := REGEXP_REPLACE(LTRIM(apex_util.host_url, 'http://'), '\:\d{1,5}'); -- вырезка порта и "http://" из хоста
  vCookieList(i).path   := '/';
 END LOOP;
 utl_http.add_cookies(vCookieList);

 vRequest := utl_http.begin_request(vURL);
 utl_http.set_header(vRequest, 'User-Agent', UPPER(owa_util.get_cgi_env('HTTP_USER_AGENT')) );
 vResponse := utl_http.get_response(vRequest);

 dbms_lob.createtemporary(vClob, FALSE);
 LOOP
  BEGIN
   utl_http.read_text(vResponse, vPiece);
   dbms_lob.writeAppend
     ( lob_loc => vClob
     , amount  => LENGTH(vPiece)
     , buffer  => vPiece
     );
  EXCEPTION WHEN utl_http.END_OF_BODY THEN EXIT;
  END;
 END LOOP;
 utl_http.end_response(vResponse);

 FOR c IN (SELECT * FROM wwv_page_pattern ORDER BY wpp_id) LOOP
  vClob := REGEXP_REPLACE(vClob, c.wpp_from, c.wpp_to, modifier => 'n'); -- вырезка html мусора из буфера с содержимым страныцы (wwv_page_pattern - моя табличка в которой я и храню что надо вырезать)
 END LOOP;
 vClob := '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/></head><body>'||vClob||'</body></html>';

 dbms_lob.createtemporary(vBlob, FALSE);
 dbms_lob.CONVERTTOBLOB(vBlob, vClob, dbms_lob.lobmaxsize, n1, n2, csid, lang_context, convert_warn);

 owa_util.mime_header('text/html; charset=UTF-8', FALSE);
  htp.p('Content-Disposition: attachment; filename="report.htm"');
  htp.p ('Content-length: '||dbms_lob.getlength(vBlob));
 owa_util.http_header_close;
 wpg_docload.download_file(vBlob);
 apex_application.stop_apex_engine;
END;
/



результатом доволен, все выглядит приемлемо и главно в одной экселевской закладке :)

SvDev, спасибо за идии и советы!

P.S.
паралельно вел ветку на ораклавском форуме https://forums.oracle.com/forums/thread.jspa?messageID=10167705
там кстати есть стоящее предложение с плугином, кого интересует экспорт в чисто экселевский формат репортов любого типа http://www.apex-plugin.com/oracle-apex-plugins/process-type-plugin/reports-2-excel-xml_110.html
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37685689
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Den999,

Вообще говоря нужно было взять плагин и немного допрограммировать его. имхо.
...
Рейтинг: 0 / 0
Экспорт нескольких отчетов одновременно
    #37686428
Den999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SvDevDen999,

Вообще говоря нужно было взять плагин и немного допрограммировать его. имхо.

Была такая мысль, но побоялся что закопаюсь надолго в недокументированых пакетах и таблицах апекса.
Так как мне нужна была точная копия страницы как есть, после того как пользователь выполнит все ему нужные телодвижения в плане сортировки, фильтровки, да еще и в конце отчета нужно чтоб попали агрегированые данные.
А в плугин на данный момент может только тупо взять сорс и вывести его результат, да вертикальный репорт он показывает как горизонтальный. Просто не было времени на разбирание и переделку, но решение интересное, когда нибудь и до него дойдут руки.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Экспорт нескольких отчетов одновременно
    #39530241
Алексей2408
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Den999,

Подскажите, пожалуйста, у меня стоит похожая задача (есть несколько репортов на странице, необходимо их вывести на вкладку
Excel). Я так понимаю, Ваша процедура имеет завершенный вид. Как вы ее подключаете?

Есть ли у Вас возможность показать, что у Вас получилось в результате на примере Вашего приложения, изложенного в теме выше?
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Экспорт нескольких отчетов одновременно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]