Как добавить строки в таблицу word

1. sidalexsandr 3 26.04.18 16:52 Сейчас в теме
Написано
Word = Новый COMОбъект("Word.Application");
		
	//получаем макет
	Макет = ПолучитьМакет("МакетWord");
	ВременныйПуть = КаталогВременныхФайлов();
	ИмяВременногоФайла = ВременныйПуть + "Пример ворд.doc";
	Макет.Записать(ИмяВременногоФайла);
	ТекДок = Word.Documents.ADD(ИмяВременногоФайла);
    
    // Поиск и замена маркеров
    Замена = ТекДок.Content.Find;    
	
	//Execute работает как замена текста, подробности метода не знаю, единственное и это точно - без цифры 2 заменяется только первый текст, вторая замена не срабатывает
	НомДог = СсылкаНаОбъект.ДоговорКонтрагента.Номер;
	Замена.Execute("[Номер]",,,,,,,,, НомДог, 2);

 // Вывод документа
    ТекДок.Application.Visible = Истина;
    ТекДок.Activate();
Показать


Есть таблица с колонками товар и цена, например
Товар 1 55
Товар 2 77

Вопрос: подскажите как добавить строки в таблицу в word и указать значение колонкам товар и цена?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sitial 26.04.18 18:43 Сейчас в теме
Если нет особых требований к таблице (добавлять колонки и т.д.), то можно попробовать так:
в макете создается таблица с нужным количеством колонок, добавляется первая пустая строка и настраивается формат колонок (шрифт, выравнивание и т.д.) для этой пустой строки.

Затем в 1С (у меня 1 колонка - материал, 2 - количество, 3 - сумма без НДС):
Word = MsWord.Application;
Word.Visible = Истина;
Док = Word.Documents(1);
Док.Activate();
				
Таблица = Word.ActiveDocument.Range().Tables(1); // номер таблицы
НомерСтроки = 2; // в макете оставляем первую строку, чтобы все последующие имели формат как у неё
				
// Поиск сумм списания активов для заполнения Цены и Суммы
Для Каждого СтрокаТЧ Из Материалы Цикл
	Если НомерСтроки <> 2 Тогда
		Таблица.Rows.Add();
	КонецЕсли;
					
	Сумма = Окр(ЦенаСписания(ТаблицаСуммСписанияПоДокументу, СтрокаТЧ.Материал, СтрокаТЧ.Партия) * СтрокаТЧ.Количество,2);
					
	Таблица.Cell(НомерСтроки,1).Range().InsertAfter(СокрЛП(СтрокаТЧ.Материал));
	Таблица.Cell(НомерСтроки,2).Range().InsertAfter(СокрЛП(СтрокаТЧ.Количество));
	Таблица.Cell(НомерСтроки,3).Range().InsertAfter(СокрЛП(Сумма));
					
	НомерСтроки = НомерСтроки + 2;
КонецЦикла;
Показать
3. SlavaKron 26.04.18 20:02 Сейчас в теме
(2) Как-то экспериментируя с таблицами Ворд, нашёл что быстрее будет добавить все строки разом методом InsertRowsBelow.
Следующий код выводит данные таблицы значений (ТЗ) в заготовленную таблицу (почти как у вас):
Таблица = Документ.Tables(1);
КоличествоКолонок = Таблица.Columns.Count;
КоличествоСтрок = ТЗ.Количество();

// выделим вторую строку
Таблица.Rows(2).Select();
Если КоличествоСтрок > 1 Тогда
	// добавим после выделенной строки новые строки
	ПрограммаВорд.Selection.InsertRowsBelow(КоличествоСтрок - 1);	
КонецЕсли;
// обойдем все ячейки выбранной области
Таблица.Select();
Сч = 0;
Для Каждого Ячейка Из ПрограммаВорд.Selection.Cells Цикл
	Строка = Цел(Сч / КоличествоКолонок);		
	Если Строка > 0 И Строка <= КоличествоСтрок Тогда
		Столбец = Сч % КоличествоКолонок;
		Ячейка.Range.InsertAfter(ТЗ[Строка - 1][Столбец]);
	КонецЕсли;
	Сч = Сч + 1;
КонецЦикла;
Показать

Я не использовал обращение к ячейке через Cell(НомерСтроки, НомерКолонки), так как обход в одиночном цикле оказался быстрее.
Основные трудозатраты приходятся на обращение к ячейке. Думаю, если еще покопаться, можно оптимизировать и этот код, например обращаться к ячейке не через таблицу, а через ее строку.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот