Отчет в виде таблицы Word OOXML - медленно
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
ulge Участник со стажем
Вступление в Клуб: 02.11.2015
|
Пн Ноя 12, 2018 13:42  Отчет в виде таблицы Word OOXML - медленно |
|
Полезность: Нет оценки
|
Кроме заполнения переменных документа или полей форм в шаблоне Word для отчетов OOXML иногда удобно использовать таблицы. Допустим в шаблоне основного отчета есть приложение - табличка переменной длины, которая динамически должна наполняться при формировании отчета. В OOXML есть средства чтения, записи в ячейки таблицы. Можно в цикле копировать одну строчку шаблона таблицы и писать в строку информацию. Вот только работает это очень медленно при больших и средних объемах таблицы. Нет ли способа ускорить вставку и заполнение строк?
[code]pragma macro(wd, '::[OOXML].[API_DOC_SAX]');
nTab := 1; -- номер таблицы в файле шаблона
nCur := 0;
for x in ::[AC_FIN] where ... loop
nCur := nCur + 1;
-- Копирование строки шаблона
&wd.copyTblRow(nTab,nCur,nCur);
-- Вывод одного объекта
&wd.SetTextTbl(nTab,nCur,1,x.[MAIN_V_ID]);
&wd.SetTextTbl(nTab,nCur,2,to_char(x.[DATE_OP],'DD.MM.YYYY'));
&wd.SetTextTbl(nTab,nCur,3,x.[DEPART].[code]);
end loop;
-- Удаление пустой строки шаблона (последней в таблице)
&wd.DelTblRow(nTab,nCur+1);[/code] |
|
![](templates/subSilver/images/spacer.gif) |
Эмиралька Эксперт
Вступление в Клуб: 09.11.2015
|
Вт Ноя 13, 2018 07:08  Re: Отчет в виде таблицы Word OOXML - медленно |
|
Полезность: Нет оценки
|
ulge пишет: | Кроме заполнения переменных документа или полей форм в шаблоне Word для отчетов OOXML иногда удобно использовать таблицы. Допустим в шаблоне основного отчета есть приложение - табличка переменной длины, которая динамически должна наполняться при формировании отчета. В OOXML есть средства чтения, записи в ячейки таблицы. Можно в цикле копировать одну строчку шаблона таблицы и писать в строку информацию. Вот только работает это очень медленно при больших и средних объемах таблицы. Нет ли способа ускорить вставку и заполнение строк?
Код: | pragma macro(wd, '::[OOXML].[API_DOC_SAX]');
nTab := 1; -- номер таблицы в файле шаблона
nCur := 0;
for x in ::[AC_FIN] where ... loop
nCur := nCur + 1;
-- Копирование строки шаблона
&wd.copyTblRow(nTab,nCur,nCur);
-- Вывод одного объекта
&wd.SetTextTbl(nTab,nCur,1,x.[MAIN_V_ID]);
&wd.SetTextTbl(nTab,nCur,2,to_char(x.[DATE_OP],'DD.MM.YYYY'));
&wd.SetTextTbl(nTab,nCur,3,x.[DEPART].[c o d e]);
end loop;
-- Удаление пустой строки шаблона (последней в таблице)
&wd.DelTblRow(nTab,nCur+1); |
|
А пачкой вставлять не быстрее? |
|
![](templates/subSilver/images/spacer.gif) |
dburg Участник
Вступление в Клуб: 29.01.2015
|
Вт Ноя 13, 2018 08:24   |
|
Полезность: Нет оценки
|
Посмотри в сторону библиотеки ::[OOXML].[API_DOC_AUTOTAG].
Там есть пакетная вставка. При обычном копировании строки вывод в ворд работает ну очень медленно. Особенно если достаточно много колонок.
Код: |
procedure set_tbl_tag2sql
/* Замена данных в блоке элемента управления c меткой 'TBL' */
( p_num in number
/* порядковый номер элемента в документе */
,p_sql in varchar2
/* строка запроса SQL для выборки данных */
,p_var_sql in memo_table_s
/* массив значений bind-переменных для строки запроса */
);
--
procedure set_tbl_tag2xml
/* Замена данных в блоке элемента управления c меткой 'TBL' по порядковому номеру в документе*/
( p_num in number
/* порядковый номер элемента в документе */
,p_data in clob
/* массив данных в формате xml */
);
--
|
|
|
![](templates/subSilver/images/spacer.gif) |
ulge Участник со стажем
Вступление в Клуб: 02.11.2015
|
Ср Ноя 14, 2018 08:28  Re: Отчет в виде таблицы Word OOXML - медленно |
|
Полезность: Нет оценки
|
Эмиралька пишет: |
А пачкой вставлять не быстрее? |
Как вставлять пачкой в рамках OOXML? Можно пример привести |
|
![](templates/subSilver/images/spacer.gif) |
ulge Участник со стажем
Вступление в Клуб: 02.11.2015
|
Ср Ноя 14, 2018 08:30   |
|
Полезность: Нет оценки
|
dburg пишет: | Посмотри в сторону библиотеки ::[OOXML].[API_DOC_AUTOTAG].
Там есть пакетная вставка. При обычном копировании строки вывод в ворд работает ну очень медленно. Особенно если достаточно много колонок.
|
Что-то я ни одного примера вызова этой библиотеки найти в операциях не могу. А можно пример применения? |
|
![](templates/subSilver/images/spacer.gif) |
Эмиралька Эксперт
Вступление в Клуб: 09.11.2015
|
Ср Ноя 14, 2018 10:22  Re: Отчет в виде таблицы Word OOXML - медленно |
|
Полезность: Нет оценки
|
ulge пишет: | Эмиралька пишет: |
А пачкой вставлять не быстрее? |
Как вставлять пачкой в рамках OOXML? Можно пример привести |
Да, действительно, спорола. АПИ в ворде не позволяет копировать пачку строк, только по одной Это не ёксель ![Sad](images/smiles/icon_sad.gif) |
|
![](templates/subSilver/images/spacer.gif) |
dburg Участник
Вступление в Клуб: 29.01.2015
|
Ср Ноя 14, 2018 14:08   |
|
Полезность: Нет оценки
|
Смотри в архиве. Архив зиповский.
Там же есть примерчик разметки шаблона. В шаблоне надо определенным образом разметить строку таблицы куда будет вставляться блок данных. |
|
![](templates/subSilver/images/spacer.gif) |
korneev Профи
Вступление в Клуб: 02.07.2007
|
Вт Дек 10, 2019 13:16   |
|
Полезность: Нет оценки
|
dburg пишет: | Смотри в архиве. Архив зиповский.
Там же есть примерчик разметки шаблона. В шаблоне надо определенным образом разметить строку таблицы куда будет вставляться блок данных. |
Подскажите, пожалуйста, как создали в word-е объект TBLROW? |
|
![](templates/subSilver/images/spacer.gif) |
dburg Участник
Вступление в Клуб: 29.01.2015
|
Ср Дек 11, 2019 13:23   |
|
Полезность: Нет оценки
|
В ворде идем на вкладку разработчик.
Выделяем все ячейки строки таблицы. Добавляем элемент управления содержимым - "Форматированный текст". Настраиваем свойства.
Потом тоже самое проделываем для каждой ячейки.
Вроде как-то так. |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|