Надо написать Процедуру, которая форматирует все абзацы, которые содержат строку поиска.
В процедуру передаются 2 параметра: Alignment (выравнивание шрифта) и размер шрифта абзаца.
Выравнивание (Alignment) работает на ура, а вот переустановить размер шрифта в абзаце не получается. Помогите с установкой размера шрифта абзаца.
Причем в отладчике вижу, что значение Font.Size меняется на нужное мне, но в самом документе реально размер не меняется.
Вот сама процедура и пример ее вызова:
Процедура Word_УстановитьФорматАбзацевСодержащихСтрокуПоиска(WordApplication,СтрокаПоиска,Alignment,FontSize=-1)Экспорт
Range=WordApplication.ActiveDocument.Range(); // по умолчанию весь документ
Find=Range.Find;
Find.Text=СтрокаПоиска;
Find.Execute();
Пока Find.Found Цикл
рДиапазонСтроки = WordApplication.ActiveDocument.Range(Range.Start,Range.End);
Если НЕ FontSize=-1 Тогда
рДиапазонСтроки.ParagraphFormat.Style.Font.Size = FontSize; //ВОТ ЭТО СТРОКА НЕ РАБОТАЕТ
КонецЕсли;
Paragraphs = рДиапазонСтроки.Paragraphs;
Paragraphs.Format.Alignment = Alignment;
Find.Execute();
КонецЦикла;
КонецПроцедуры
//....
СсылкаМакет = ПолучитьМакет(ИмяМакета);
Word = СсылкаМакет.Получить();
Word.Application.Visible=1;
Word_УстановитьФорматАбзацевСодержащихСтрокуПоиска(Word.Application,"Заработная плата",3,11);
Word.Fields.UpDate();
В общем случае область у объекта Find.range.Start - Find.range.End не покрывает абзац(Paragraph)
и соответственно реквизит Find.Paragraphs не содержит то что ты ожидаешь.
Посмотри что есть Find.Paragraps.count,Find.Paragraps.Item(1).Range и сравни с Find.Range(Start-End).
Скорее всего тебе надо сначала собрать все абзацы ActiveDocument.Paragraphs, а потом в цикле перебора найденного Find.Execute определять в каком абзаце находится найденный фрагмент
$pp = $wo.ActiveDocument.Paragraphs
foreach ($pitem in $pp ){
if (($pitem.range.start -le $find.range.start) -and ($pitem.range.end -ge $finde.range.end)) {
$paraggaphrange= $pitem.range
break
}
}
# $paraggaphrange будет искомый абзац
Пока Find.Found Цикл
рДиапазонСтроки = WordApplication.ActiveDocument.Range(Range.Start,Range.End);
рДиапазонСтроки.Select();//Выделяем найденную область
Если НЕ FontSize=-1 Тогда
WordApplication.Selection.Font.Size = FontSize;//меняем размер шрифта в выделенном фрагменте
КонецЕсли;
КонецЦикла;
Dim rngTemp As Range
Set rngTemp = ActiveDocument.Range(Start:=0, End:=0)
With rngTemp
.InsertBefore "Company Report"
.Font.Name = "Arial"
.Font.Size = 24
.InsertParagraphAfter
End With
ActiveDocument.PrintOut
ParagraphFormat.Style Property (Word)- To set this property, specify the local name of the style, an integer, a WdBuiltinStyle constant, or an object that represents the style.
(10) antz, твой код работает, если его вызвать 1 раз. При повторном вызове этого кода для ДРУГОЙ строки поиска не работает. Может надо после первого поиска корртку надо возвратить в начало документа?