powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / as_xlsx, вопрос по работе пакета (не открывается сохранённый файл, но..)
7 сообщений из 7, страница 1 из 1
as_xlsx, вопрос по работе пакета (не открывается сохранённый файл, но..)
    #39889299
Ora uSeR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет

В связи с производственной необходимостью начал поиск пакетов для сборки файла xls(x).
В настоящее время используется xls_builder_pkg, но при наличии шапки таблицы более 3 уровней некорректно отрисовывает colspan/rowspan

Просто фактик
сравнив xls_builder_pkg с as_xlsx понял, что 85%+ функций пакетов совпадает. Сделал вывод, что xls_builder_pkg собирался на основе as_xlsx
Но всем как-то п..


Не могу разобраться с пакетом as_xlsx.
Сохранённый файл содержит ошибки и просто не открывается (excel исправить ошибки не смог). Но возможно особенность лежит в его сохранении.

Пробую на примере из первоисточника: Create an Excel-file with PL/SQL BY ANTON SCHEFFER (technology.amis.nl)

Код
Код: plsql
1.
2.
3.
4.
5.
6.
7.
begin
  as_xlsx.clear_workbook;
  as_xlsx.query2sheet('select 1 from dual');
  --as_xlsx.save('MY_DIR', 'my.xlsx');        -- *
  as_xlsx.saveOverHttp(p_filename => 'my',
                       p_filetype => 'xlsx');
end;




Касательно самописной as_xlsx.saveOverHttp - копировал процедуру save из пакета as_xlsx и слегка изменил:
Код
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure saveOverHttp
  ( p_filename varchar2,
    p_filetype varchar2
  )
  /* вызов:
    as_xlsx.saveOverHttp( p_filename => 'my', 
                          p_filetype => 'xlsx');
  */
is
begin
  --blob2file( finish, p_filename );
  download_file.download (p_file      => BlobToClob(finish),
                          p_file_name => p_filename,
                          p_file_type => p_filetype );

end;




+ download_file.download (в целом стандартный вариант. Используется для многих вещей, проблем нет. По этому на данный пакет думать не хочется)
Код
Код: 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.
create package body download_file ..
..

  PROCEDURE download(p_file      CLOB,
                     p_file_name VARCHAR2,
                     p_file_type VARCHAR2) AS
    v_mime      VARCHAR2(400);
    v_length    NUMBER;
    v_file_name VARCHAR2(2000);
    lob_loc     CLOB;
    blob_loc    BLOB;
  BEGIN
    SELECT 'application/xml',
           p_file,
           p_file_name || '.' || nvl(p_file_type, 'txt'),
           dbms_lob.getlength(p_file)
      INTO v_mime, lob_loc, v_file_name, v_length
      FROM dual;
    blob_loc := clob_to_blob(lob_loc);
    owa_util.mime_header(nvl(v_mime, 'application/xml'), FALSE);
    htp.p('Content-length: ' || v_length);
    htp.p('Content-Disposition:  attachment; filename="' ||
          REPLACE(REPLACE(substr(DOCS_TRANSLIT.translit(v_file_name),
                                 instr(DOCS_TRANSLIT.translit(v_file_name), '/') + 1),
                          chr(10),
                          NULL),
                  chr(13),
                  NULL) || '"');
    owa_util.http_header_close;
    wpg_docload.download_file(blob_loc);
  END;
  
end download_file;




В веб-приложении (apex 4.1.1) при клике по кнопке происходит выполнение кода из первоисточника (ещё раз код):
Код
Код: plsql
1.
2.
3.
4.
5.
6.
7.
begin
  as_xlsx.clear_workbook;
  as_xlsx.query2sheet('select 1 from dual');
  --as_xlsx.save('MY_DIR', 'my.xlsx');        -- *
  as_xlsx.saveOverHttp(p_filename => 'my',
                       p_filetype => 'xlsx');
end;



и файл сохраняется

Но при открытии получаю ошибки:
Ошибка в части содержимого файла my.xlsx Выполнить попытку восстановления?
и
Файл повреждён, поэтому его нельзя открыть

Файл xlsx так же прилагаю (прост)


Что может быть не так?
Может кто-то подскажет другой вариант реализации
(но в сторону MY_DIR думать не очень хочется. Хотя возможно это от незнания.. но наверно не везде получится настроить DIR в linux, от чего и начал искать более универсальное решение минуя шаг сохранение файла в ФС или blob/clob БД)

Так же буду рад дополнительным ссылкам по теме(люблю пополнять избранное)

Меня впечатлили эти две:
Пример отчета созданного с помощью as_xlsx (mazdik.ru)
Генерация XLSX средствами PL/SQL: шаблонный подход (habr.com)

Надеюсь на вашу помощь и освоить этот серьёзный пакетик
Благодарю всех за содействие
...
Рейтинг: 0 / 0
as_xlsx, вопрос по работе пакета (не открывается сохранённый файл, но..)
    #39889368
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все прекрасно описано, но только не понятно одно. Где тут слово АПЕКС? :)

Думаю в ветке на уровне выше Вам больше помогут.
...
Рейтинг: 0 / 0
as_xlsx, вопрос по работе пакета (не открывается сохранённый файл, но..)
    #39889375
Ora uSeR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangel, после темы сообщения я там статейку накидал мальца
Поиском можно найти ключевое слово, чтобы не читать всю статью с водой)

Мотивация написать в ветку апекс такова, что работаю через браузер, файл отдаётся по http
С уклоном на работу через DIR конечно бы накатал в общую ветку Oracle

Но думаю, что апексисты не смогут подсказать так быстро, перебазируюсь основную ветку в надежде, что кто-то знающий наткнётся на вопрос =)

...
Рейтинг: 0 / 0
as_xlsx, вопрос по работе пакета (не открывается сохранённый файл, но..)
    #39889395
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно через веб отдовать mp4, мы же не занимаемся тут вопросами о видео захвате... :)

Я для генерации XLS(X) использую библиотеку apache POI.
Есть платные решения, такие как Oracle BI.
Есть подешевле https://www.apexofficeprint.com

О Вашем пакете я слышу впервые, простите, хотя искал тоже варианты решения Вашей проблемы.
...
Рейтинг: 0 / 0
as_xlsx, вопрос по работе пакета (не открывается сохранённый файл, но..)
    #39890094
Ora uSeR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал прикрутить загрузку с нуля - прокатило =)
Что помешало раньше - возможно этого уже никто не узнает..

Изменённый пакет as_xlsx by ANTON SCHEFFER с прикрученной загрузкой файла, а так же пример xlsx экспорта прилагаю

Пример вызова
Код: plsql
1.
2.
3.
4.
5.
begin
  as_xlsx.clear_workbook;
  as_xlsx.query2sheet( 'select * from EBA_DEMO_FILE_PROJECTS' );
  as_xlsx.saveOverHttp('my', 'xlsx' );
end;




Пойду мутить многоэтажные шапки))
#отчётики
...
Рейтинг: 0 / 0
as_xlsx, вопрос по работе пакета (не открывается сохранённый файл, но..)
    #39900165
rgnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
begin
as_xlsx.clear_workbook;
as_xlsx.query2sheet('select 1 from dual');

dbms_lob.createtemporary(sBlob, TRUE, DBMS_LOB.SESSION);

-- полученый документ передаем в блоб
sBlob := as_xlsx.finish;

-- Загрузка на клиента APEX
owa_util.mime_header('application/xls', FALSE);
htp.p('Content-Length: ' || dbms_lob.getlength(sBlob));
htp.p('Content-Disposition: attachment; filename="' || 'MY.xlsx' || '"');
owa_util.http_header_close;
wpg_docload.download_file(sBlob);

-- Очистка блоба
dbms_lob.freetemporary(sBlob);
end;
...
Рейтинг: 0 / 0
as_xlsx, вопрос по работе пакета (не открывается сохранённый файл, но..)
    #39968083
t0m4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ora uSeR,

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


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