Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Использование пакета HTP в APEX / 19 сообщений из 19, страница 1 из 1
23.06.2014, 11:58
    #38677032
Vladyslav_007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование пакета HTP в APEX
Всем привет,
Экспортирую данные в 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
23.06.2014, 12:28
    #38677076
Gustly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование пакета HTP в APEX
Vladyslav_007,

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

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

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

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

Нужно больше конкретики. Повторите эксперимент на оракловой песочнице и дайте доступ.
...
Рейтинг: 0 / 0
23.06.2014, 16:53
    #38677637
Vladyslav_007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование пакета HTP в APEX
Ну вообщем я потестировал чуток, вышло так:
Значение item применяется только после Submit , т.е. создал кнопку с функцией сабмита, после нажатия на неё у меня эти значения уже становятся актуальными. Немного не ясна для меня эта ситуация. Почему я не могу просто ссылатся на значение итема без применения сабмита?
...
Рейтинг: 0 / 0
23.06.2014, 16:58
    #38677648
Vladyslav_007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование пакета HTP в APEX
И, кстати, забыл добавить, можно использовать синтаксис :P_ITEM_NAME, а не обязательно v('P_ITEM_NAME');
...
Рейтинг: 0 / 0
23.06.2014, 18:53
    #38677819
Vladyslav_007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование пакета HTP в APEX
Может кто подскажет как можно заменить код:
Код: 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
24.06.2014, 09:19
    #38678081
Gustly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование пакета HTP в APEX
Vladyslav_007,

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

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

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

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


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

Да, но не от этого. Кодировка разная. Пробуй или утф 8 или вин1251
...
Рейтинг: 0 / 0
24.06.2014, 12:41
    #38678384
Vladyslav_007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование пакета HTP в APEX
Попробовал
Код: 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
24.06.2014, 12:47
    #38678401
Gustly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование пакета HTP в APEX
Vladyslav_007,

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



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


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