powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Использование пакета HTP в APEX
19 сообщений из 19, страница 1 из 1
Использование пакета HTP в APEX
    #38677032
Vladyslav_007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет,
Экспортирую данные в Excel при помощи функции с использованием HTP:

Код: 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.
DECLARE
  v_emp_count NUMBER(20);
  v_partyid NUMBER(20);
  v_partyname VARCHAR2(500);
  v_hidden VARCHAR(20);
  CURSOR c_emp IS
    SELECT partyid,
           initcap(partyname)
    FROM reporter.retail_party
    where rownum<20
    ORDER BY partyname;
BEGIN
  SELECT COUNT(*)
  INTO v_emp_count
  FROM reporter.retail_party
  where rownum < 20;

  owa_util.mime_header('application/ms-excel',   FALSE);
  htp.p(' Content-Disposition: filename= test.xls ');
  owa_util.http_header_close;

  htp.htmlopen;
  htp.bodyopen;
  htp.header(5,   '<font color="BLACK"><center> EMPLOYEES </center></font>');
  htp.tableopen(cattributes=>'border="2",bordercolor="BLACK",width="60%",align="CENTER"');
  htp.tablerowopen(cattributes => 'bgcolor="GREEN"');
  htp.tableheader(cattributes => 'colspan="2", align="CENTER"'
                 ,cvalue => '<font face="ARIAL" size="2.5" color="WHITE">'
                             || 'Employees. (List Count:' || v_emp_count|| ')');
  htp.tablerowclose;
  htp.tablerowopen(cattributes => 'align="LEFT", bgcolor="YELLOW"');
  htp.tableheader(cvalue => '<font face="ARIAL" size="2.25" color="BLUE">' || 'No.');
  htp.tableheader(cvalue => '<font face="ARIAL" size="2.25" color="BLUE">' || 'Name');
  htp.tablerowclose;
  OPEN c_emp;
  FETCH c_emp
  INTO v_partyid,
       v_partyname;
  WHILE c_emp % FOUND
  LOOP
    htp.tablerowopen();
    htp.tabledata(cattributes => 'align="LEFT"'
                 ,cvalue => '<font face="ARIAL" size="2" color="BLACK">' || v_partyid);
    htp.tabledata(cattributes => 'align="LEFT"'
                 ,cvalue => '<font face="ARIAL" size="2" color="BLACK">' || v_partyname);
    htp.tablerowclose;
    v_emp_count := v_emp_count -1;
    FETCH c_emp
    INTO v_partyid,
         v_partyname;
  END LOOP;
  CLOSE c_emp;
  htp.tablerowclose;
  htp.tableclose;
  htp.bodyclose;
  htp.htmlclose;
EXCEPTION
  WHEN no_data_found
THEN
  NULL;
END;



Вопрос: можно ли использовать синтаксис :P5_ITEM_NAME ? Попробовал присвоить процессу on load after footer и заменил
Код: plsql
1.
'<font color="BLACK"><center> EMPLOYEES </center></font>'

на
Код: plsql
1.
'<font color="BLACK"><center> :P5_TEXT</center></font>'

- на экране отобразилось значение итема, а если же ставить процессу значение on load before header, чтобы он открывал xls файл то в самом файле такого значения не наблюдается...
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38677076
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladyslav_007,

Подозреваю, что сессии разные, поэтому пусто.

А вообще я не очень понял, как это вы запихали переменную в обычный текст.

Я себе представлял это так:

Код: plsql
1.
'<font color="BLACK"><center>'||v('P5_TEXT')||'</center></font>'
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38677179
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladyslav_007,

Выглядит забавно.
application/ms-excel это блоб, а вы пытаетесь в качестве екселевского файла выкинуть HTML таблицу.

http://www.jasonsdevelopercorner.com/?page_id=8
Или как вариант изучите Open XML формат

По поводу вашего вопроса. Синтаксис :P5_TEXT или &P5_TEXT. работает в апексовых регионах. В процедуре нужно использовать.
Код: plsql
1.
 '<font color="BLACK"><center> '||v('P5_TEXT')||'</center></font>'
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38677199
Vladyslav_007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gustly,

Да уже и работает почему-то
Код: plsql
1.
 htp.header(5,   '<font color="BLACK"><center> '||v_hidden||' </center></font>');

:)

Может тут какая-то гадость с сессией, я присвоил значение P5_HIDDEN = select TO_CHAR(SYSDATE, 'DD-MM-YYYY')||'.xls' from dual,
а запрос до сих пор берет значение когда-то мною вписанное - HELLO WORLD. Я уже и разлогинивался с апекса и добавил эти 2 строчки в функцию
Код: plsql
1.
2.
  htp.flush();
  htp.init();


И все равно на тебе HELLO WORLD. Как так то?
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38677206
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladyslav_007,

Нужно больше конкретики. Повторите эксперимент на оракловой песочнице и дайте доступ.
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38677637
Vladyslav_007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вообщем я потестировал чуток, вышло так:
Значение item применяется только после Submit , т.е. создал кнопку с функцией сабмита, после нажатия на неё у меня эти значения уже становятся актуальными. Немного не ясна для меня эта ситуация. Почему я не могу просто ссылатся на значение итема без применения сабмита?
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38677648
Vladyslav_007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И, кстати, забыл добавить, можно использовать синтаксис :P_ITEM_NAME, а не обязательно v('P_ITEM_NAME');
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38677819
Vladyslav_007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может кто подскажет как можно заменить код:
Код: plsql
1.
2.
  htp.tableheader(cvalue => '<font face="ARIAL" size="2.25">' || 'DEPARTMENT');
  htp.tableheader(cvalue => '<font face="ARIAL" size="2.25">' || 'Name');


на такой, чтобы не прописывать названия колонок в ручную, а брать название колонки из запроса, или из interactive report-a?
Благодарю
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38678081
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladyslav_007,

Вы вырвали непонятно откуда кусок и хотите что-то поменять. Это какая-то процедура или pl/sql регион или что вообще? В репортах можно использовать значения полей для подстановки через #POLE#, но сомневаюсь что здесь это поможет.
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38678116
Vladyslav_007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это процесс pl/sql, который запускается On load before header, при нажатии кнопки происходит переадресация на ту страницу и грузится файл.
Насколько я нашёл это практически единственное решение нормальное для своего вывода на экран. По поводу колонок я вот тоже думал, что вряд ли этот синтаксис тут проконает..
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38678137
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladyslav_007,

Для своего вывода на экран в конце необходимо делать stop engine
А вообще нужно увидеть всю часть, которая рисует. Лично мне не очень понятно.
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38678180
Vladyslav_007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю, что такое stop engine, а тот код который я привел в первом сообщении - это и есть вся процедура
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38678221
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladyslav_007,

1) А теперь посмотрите в блокноте в самый конец файла.

2) Можно в самом селекте написать
Код: sql
1.
select 'Департамент' col_1,.... from table


И использовать поле col_1, там будет название
Еще вариант использовать таблицу all_tab_cols с колонками.
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38678307
Vladyslav_007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за советы. Сейчас при тестировании работы заметил, что в libre office выводятся крокозябры а в Excel все хорошо. Это зависит от майм хедера?
Код: plsql
1.
owa_util.mime_header('application/vnd.ms-excel ',   FALSE);
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38678332
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladyslav_007,

Да, но не от этого. Кодировка разная. Пробуй или утф 8 или вин1251
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38678384
Vladyslav_007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал
Код: plsql
1.
  owa_util.mime_header('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ',FALSE,'Win1251');


И с utf-8 тоже, не работает. Хотя и не удивительно, в доке написано - The character set only makes sense if the MIME type is of type 'text'.
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38678401
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladyslav_007,

Там заголовок должен быть вроде с чарсетом, или как-то так. В общем отдельный хедер только для кодировки.
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38678458
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladyslav_007И с utf-8 тоже, не работает. Хотя и не удивительно, в доке написано - The character set only makes sense if the MIME type is of type 'text'.
Ну раз вы шаманите с выводом HTML таблицы в ексель, попробуйте прописать боди, и мета, а в мете кодировку. http://htmlbook.ru/samhtml

Не уверен в результате, но если уж пляшете с бубном, почему бы не попробовать.
...
Рейтинг: 0 / 0
Использование пакета HTP в APEX
    #38678516
Vladyslav_007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем решение оказалось такое:
Код: plsql
1.
2.
3.
  htp.htmlopen;
  htp.prn('<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>'); -- НУЖНАЯ СТРОКА!
  htp.bodyopen;



Благодарю за отзывчивость !
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Использование пакета HTP в APEX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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