Еще один пример работы с Word из 1С 7.7, увидел тут .
Word = CreateObject("Word.Application");
Word.Documents.Add();
Word.Documents(1).Content.InsertAfter(“Уважаемый “ + СокрЛП(Директор)+"!");
MyRange = Word.Documents(1).paragraphs.last.range;
MyRange.Bold = 1;
Word.Documents(1).paragraphs.last.Alignment = 1; //center
Word.Documents(1).Content.InsertParagraphAfter();
Word.Documents(1).Content.InsertAfter("Вы нам должны "+Сумма);
Word.Documents(1).Content.InsertAfter(" "+СокрЛП(Валюта));
Word.Documents(1).paragraphs.last.range.Bold = 0;
Word.Documents(1).paragraphs.last.Alignment = 0; //left
Цифирь = Word.Documents(1).range (Word.ActiveDocument.paragraphs.last.range.End – 1 -СтрДлина(Строка(СокрЛП(Сумма)))-1-СтрДлина(Строка(СокрЛП(Валюта))),
Word.ActiveDocument.paragraphs.last.range.End – 1 -СтрДлина(Строка(СокрЛП(Валюта))));
Цифирь.Font.ColorIndex = 6; //wdRed
// показываем полученный текст
Word.Visible = 1;
Есть несколько тонкостей, на которые следует обратить внимание:
• вызывается объект “Word.Application”;
• нельзя передавать константы Word в качестве параметров функций – только их численные значения. А чтобы быстро узнать их значения, достаточно создать макрос в Word, а в нем воспользоваться процедурой MsgBox(). Например, если передать ей wdRed в качестве параметра, то получим 6 – значение константы;
• вместо True и False надо использовать 1 и 0;
• “Documents(1)” указывает на первый из открытых документов. Надежнее использовать “ActiveDocument” (ведь если Word уже был запущен, то ваш документ может оказаться не первым) – пример просто показывает, что работают оба варианта;
• обратите внимание, что объектом “Range” может быть как весь объект другого вида (слово, абзац, документ), так и конкретная область (ср. “MyRange” и “Цифирь”).
Основным источником информации на эту тему является файл справки по VBA для MS Word.
1 комментарий:
Для нового документа применять Content InsertAfter и InsertParagraphAfter особого смысла нет. Вполне можно обойтись TypeParagraph и TypeText.
Отправить комментарий