CftClub.ru
Клуб специалистов ЦФТ-Банк

Отчет в виде таблицы Word OOXML - медленно

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
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]
Эмиралька
Эксперт


Вступление в Клуб: 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);

А пачкой вставлять не быстрее?
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 */
   );
--
ulge
Участник со стажем


Вступление в Клуб: 02.11.2015
СообщениеСр Ноя 14, 2018 08:28   Re: Отчет в виде таблицы Word OOXML - медленно Ответить с цитатой
Полезность: Нет оценки
Эмиралька пишет:

А пачкой вставлять не быстрее?


Как вставлять пачкой в рамках OOXML? Можно пример привести
ulge
Участник со стажем


Вступление в Клуб: 02.11.2015
СообщениеСр Ноя 14, 2018 08:30    Ответить с цитатой
Полезность: Нет оценки
dburg пишет:
Посмотри в сторону библиотеки ::[OOXML].[API_DOC_AUTOTAG].
Там есть пакетная вставка. При обычном копировании строки вывод в ворд работает ну очень медленно. Особенно если достаточно много колонок.


Что-то я ни одного примера вызова этой библиотеки найти в операциях не могу. А можно пример применения?
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеСр Ноя 14, 2018 10:22   Re: Отчет в виде таблицы Word OOXML - медленно Ответить с цитатой
Полезность: Нет оценки
ulge пишет:
Эмиралька пишет:

А пачкой вставлять не быстрее?


Как вставлять пачкой в рамках OOXML? Можно пример привести

Да, действительно, спорола. АПИ в ворде не позволяет копировать пачку строк, только по одной Это не ёксель Sad
dburg
Участник


Вступление в Клуб: 29.01.2015
СообщениеСр Ноя 14, 2018 14:08    Ответить с цитатой
Полезность: Нет оценки
Смотри в архиве. Архив зиповский.
Там же есть примерчик разметки шаблона. В шаблоне надо определенным образом разметить строку таблицы куда будет вставляться блок данных.
korneev
Профи


Вступление в Клуб: 02.07.2007
СообщениеВт Дек 10, 2019 13:16    Ответить с цитатой
Полезность: Нет оценки
dburg пишет:
Смотри в архиве. Архив зиповский.
Там же есть примерчик разметки шаблона. В шаблоне надо определенным образом разметить строку таблицы куда будет вставляться блок данных.


Подскажите, пожалуйста, как создали в word-е объект TBLROW?
dburg
Участник


Вступление в Клуб: 29.01.2015
СообщениеСр Дек 11, 2019 13:23    Ответить с цитатой
Полезность: Нет оценки
В ворде идем на вкладку разработчик.
Выделяем все ячейки строки таблицы. Добавляем элемент управления содержимым - "Форматированный текст". Настраиваем свойства.
Потом тоже самое проделываем для каждой ячейки.
Вроде как-то так.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах