| 
 
  
	| Отчет в виде таблицы 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]
 |  |  
		|  |  
		| Эмиралька Эксперт
 
 
 Вступление в Клуб: 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?  Можно пример привести
 | 
 Да, действительно, спорола. АПИ в ворде не позволяет копировать пачку строк, только по одной Это не ёксель
  |  |  
		|  |  
		| 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    |   |  
				| Полезность: Нет оценки 
 |  
				| В ворде идем на вкладку разработчик. Выделяем все ячейки строки таблицы. Добавляем элемент управления содержимым -  "Форматированный текст". Настраиваем свойства.
 Потом тоже самое проделываем для каждой ячейки.
 Вроде как-то так.
 |  |  
		|  |  
		|  |  
  
	| 
 
 | Вы не можете начинать темы Вы не можете отвечать на сообщения
 Вы не можете редактировать свои сообщения
 Вы не можете удалять свои сообщения
 Вы не можете голосовать в опросах
 
 |  |