Написано
Есть таблица с колонками товар и цена, например
Товар 1 55
Товар 2 77
Вопрос: подскажите как добавить строки в таблицу в word и указать значение колонкам товар и цена?
Word = Новый COMОбъект("Word.Application");
//получаем макет
Макет = ПолучитьМакет("МакетWord");
ВременныйПуть = КаталогВременныхФайлов();
ИмяВременногоФайла = ВременныйПуть + "Пример ворд.doc";
Макет.Записать(ИмяВременногоФайла);
ТекДок = Word.Documents.ADD(ИмяВременногоФайла);
// Поиск и замена маркеров
Замена = ТекДок.Content.Find;
//Execute работает как замена текста, подробности метода не знаю, единственное и это точно - без цифры 2 заменяется только первый текст, вторая замена не срабатывает
НомДог = СсылкаНаОбъект.ДоговорКонтрагента.Номер;
Замена.Execute("[Номер]",,,,,,,,, НомДог, 2);
// Вывод документа
ТекДок.Application.Visible = Истина;
ТекДок.Activate();
ПоказатьЕсть таблица с колонками товар и цена, например
Товар 1 55
Товар 2 77
Вопрос: подскажите как добавить строки в таблицу в word и указать значение колонкам товар и цена?
По теме из базы знаний
- Всякие полезности
- Легкое добавление формы печати через *.docx Word в документы, 1С:ERP
- Печать нескольких документов в Word
- Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0
- Программное создание таблицы в WORD с использованием разметки Office Open XML. Через сервер с использованием БСП
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Если нет особых требований к таблице (добавлять колонки и т.д.), то можно попробовать так:
в макете создается таблица с нужным количеством колонок, добавляется первая пустая строка и настраивается формат колонок (шрифт, выравнивание и т.д.) для этой пустой строки.
Затем в 1С (у меня 1 колонка - материал, 2 - количество, 3 - сумма без НДС):
в макете создается таблица с нужным количеством колонок, добавляется первая пустая строка и настраивается формат колонок (шрифт, выравнивание и т.д.) для этой пустой строки.
Затем в 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;
КонецЦикла;
Показать
(2) Как-то экспериментируя с таблицами Ворд, нашёл что быстрее будет добавить все строки разом методом InsertRowsBelow.
Следующий код выводит данные таблицы значений (ТЗ) в заготовленную таблицу (почти как у вас):
Я не использовал обращение к ячейке через Cell(НомерСтроки, НомерКолонки), так как обход в одиночном цикле оказался быстрее.
Основные трудозатраты приходятся на обращение к ячейке. Думаю, если еще покопаться, можно оптимизировать и этот код, например обращаться к ячейке не через таблицу, а через ее строку.
Следующий код выводит данные таблицы значений (ТЗ) в заготовленную таблицу (почти как у вас):
Таблица = Документ.Tables(1);
КоличествоКолонок = Таблица.Columns.Count;
КоличествоСтрок = ТЗ.Количество();
// выделим вторую строку
Таблица.Rows(2).Select();
Если КоличествоСтрок > 1 Тогда
// добавим после выделенной строки новые строки
ПрограммаВорд.Selection.InsertRowsBelow(КоличествоСтрок - 1);
КонецЕсли;
// обойдем все ячейки выбранной области
Таблица.Select();
Сч = 0;
Для Каждого Ячейка Из ПрограммаВорд.Selection.Cells Цикл
Строка = Цел(Сч / КоличествоКолонок);
Если Строка > 0 И Строка <= КоличествоСтрок Тогда
Столбец = Сч % КоличествоКолонок;
Ячейка.Range.InsertAfter(ТЗ[Строка - 1][Столбец]);
КонецЕсли;
Сч = Сч + 1;
КонецЦикла;
ПоказатьЯ не использовал обращение к ячейке через Cell(НомерСтроки, НомерКолонки), так как обход в одиночном цикле оказался быстрее.
Основные трудозатраты приходятся на обращение к ячейке. Думаю, если еще покопаться, можно оптимизировать и этот код, например обращаться к ячейке не через таблицу, а через ее строку.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот