Данная статья - попытка собрать сведения по работе (на начальном уровне) с MS Word в одном месте. Полно похожего материала, и при наличии должной усидчивости это все можно найти. Хотелось собрать основные моменты в одном месте.
Публикация - своего рода памятка, содержащая примеры кода для:
Попытка
//Получаем макет из двоичных данных
Шаблон = ПолучитьМакет(ДополнительныеПараметры.ВидДоговора);
ИмяФайла = ПолучитьИмяВременногоФайла(".docx");
Шаблон.Записать(ИмяФайла);
//Создаем COM-объект для работы с Word
ОбъектВорд = Новый COMОбъект("Word.Application");
ОбъектВорд.Documents.add(ИмяФайла);
//В Word можно открывать в одном приложении несколько документов, поэтому ОбъектВорд.Application.Documents - это коллекция открытых документов.
//В нашем случае документ открыт всегда один
ДокументВорд = ОбъектВорд.Application.Documents(1);
ДокументВорд.Activate();
Исключение Сообщить("Ошибка при запуске приложения "+ОписаниеОшибки());
КонецПопытки;
//Разумеется, получение COM-объекта нужно поместить в попытку. Мало ли, что-то пойдет не так.
//Создадим структуру параметров документа
ПараметрыДокумента = ПодготовитьСтрукутруПараметров();
//Заполним структуру параметров документа
ЗаполнитьСтруктуруПараметров(ПараметрыДокумента);
//Объект, содержит весь основный текст из всех разделов ДокументВорд.Content
//Объект содержит коллекцию разделов документа
ДокументВорд.Sections
//В каждом разделе есть своя коллекция для верхних колонтитулов
ДокументВорд.Sections(1).Headers
//И своя коллекция для нижних колонтитулов
ДокументВорд.Sections(1).Footers
//При этом, если стоит галочка "Уникальный колонтитул для первой страницы", то коллекции Headers и Footers будут содержать два элемента
//Переберем все параметры и заменим их в документе
Для каждого Параметр Из ПараметрыДокумента Цикл
ВыполнитьЗамену(ДокументВорд.Content, Параметр.Ключ, Параметр.Значение);
//Ищим вхождения параметра в верхнем колонтитуле
ВыполнитьЗамену(ДокументВорд.Sections(1).Headers.Item(1).Range(), Параметр.Ключ, Параметр.Значение);
//Ищим вхождения параметра в нижнем колонтитуле первой и последующих страниц
ВыполнитьЗамену(ДокументВорд.Sections(1).Footers.Item(1).Range(), Параметр.Ключ, Параметр.Значение);
ВыполнитьЗамену(ДокументВорд.Sections(1).Footers.Item(2).Range(), Параметр.Ключ, Параметр.Значение);
КонецЦикла;
//Выполнить поиск и замену Функция
ВыполнитьЗамену(знач Object, Параметр, Значение)
Object.Find.Execute(Параметр,,,,,,,,,Значение,2)
КонецФункции
//УправлениеПечатьюMSWordКлиент c незначительными изменениями для конфигурации УПП 1.3
Функция ВыполнитьЗамену(знач Object, Параметр, Значение)
СтрокаПоиска = "[" + Параметр + "]";
СтрокаЗамены = Строка(Значение);
//Необходимо выделить областей, в которой мы осуществляем замену
Object.Select();
//Получаем выделенную область
Selection = Object.Application.Selection;
//Найдем все вхождения параметра и заменим его на нужное нам значение
FindObject = Selection.Find;
FindObject.ClearFormatting();
Пока FindObject.Execute(СтрокаПоиска) Цикл
Если ПустаяСтрока(СтрокаЗамены) Тогда
Selection.Delete();
Иначе
Selection.TypeText(СтрокаЗамены);
КонецЕсли;
КонецЦикла;
//Отменим выделение
Selection.Collapse();
КонецФункции
//Редактирование шрифта
Selection.Font
//Редактирование цвета
Selection.HighlightColorIndex
ДокументВорд.Variables.Item(НазваниеПараметра).Values
//Получаем доступ к первой таблице в основном тексте
Таблица = ДокументВорд.Content.Tables(1)
//Данные для заполнения
ПараметрыТЧ = ПараметрыДокумента.ПриложениеТЧ;
//Нужно оставить шапку и первую строку нетронутой Итератор = 2;
Таблица = ДокументВорд.Content.Tables(3);
Для каждого Строка Из ПараметрыТЧ Цикл
//По умолчанию добавляет строку выше первой
Таблица.Rows.Add();
ЗаполнитьСтрокуТаблицы(Таблица, Итератор, Строка,"ПП,НоменклатураНаименование,ЕдИзмерения,ЦенаСтрокой",ПараметрыТЧ );
Итератор = Итератор + 1;
КонецЦикла;
//Структура шаблонов содержит Наименование колонок и их порядок
Процедура ЗаполнитьСтрокуТаблицы(Таблица, НомерСтроки, ЗначениеЗаполнения, СтруктураШаблонов,ТаблицаЗначений)
МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтруктураШаблонов,",");
Итератор = 1;
Для каждого Строка Из МассивСтрок Цикл
Если ТаблицаЗначений.Колонки.Найти(Строка) = Неопределено И Строка <> "ПП" Тогда
Итератор = Итератор + 1;
Продолжить;
//Не забываем, что Шапка тоже строка, а при нумерации нам нужно её исключить
ИначеЕсли Строка = "ПП" Тогда
Таблица.Cell(НомерСтроки, Итератор).Range().Text = Строка(НомерСтроки-1);
Итератор = Итератор + 1;
Продолжить;
КонецЕсли;
Таблица.Cell(НомерСтроки, Итератор).Range().Text = Строка(ЗначениеЗаполнения[Строка]);
Итератор = Итератор + 1;
КонецЦикла;
КонецПроцедуры
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua