Программно в MS Word установить формат абзацев, содержащих строку поиска

1. RailMen 824 02.10.15 19:15 Сейчас в теме
Надо написать Процедуру, которая форматирует все абзацы, которые содержат строку поиска.
В процедуру передаются 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();
Показать
Вознаграждение за ответ
Показать полностью
Найденные решения
12. antz 05.10.15 16:05 Сейчас в теме
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. teller 05.10.15 05:26 Сейчас в теме
В общем случае область у объекта 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 будет искомый абзац 
Показать
6. RailMen 824 05.10.15 12:37 Сейчас в теме
(5) teller, идею понял. Буду пробовать. Как обычно результат выложу тут.
8. RailMen 824 05.10.15 13:18 Сейчас в теме
(5) teller, возможно ли код на языке 1С написать?
2. vovan_victory 63 02.10.15 19:56 Сейчас в теме
3. vovan_victory 63 02.10.15 20:15 Сейчас в теме
А если попробовать так..
 

    Пока Find.Found Цикл
        рДиапазонСтроки = WordApplication.ActiveDocument.Range(Range.Start,Range.End);
        рДиапазонСтроки.Select();//Выделяем найденную область

        Если НЕ FontSize=-1 Тогда
            WordApplication.Selection.Font.Size = FontSize;//меняем размер шрифта в выделенном фрагменте
            
        КонецЕсли;        

    КонецЦикла;   
Показать
7. RailMen 824 05.10.15 13:02 Сейчас в теме
(3) vovan_victory, так пробовал - не помогает.
4. teller 03.10.15 16:51 Сейчас в теме
Range Properties (Word) (https://msdn.microsoft.com/EN-US/library/office/dn353042.aspx)
Font Properties (Word) (https://msdn.microsoft.com/EN-US/library/office/dn320660.aspx)
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
Показать

$wo = new-object -comobject "Word.Application"
$wo |get-member
$wo.Documents.Open( "test.docx")
$rng = $wo.ActiveDocument.Range(0, 10)
$rng.font.size=24
$wo.ActiveDocument.Save()
$wo.quit()
Показать

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.
13. RailMen 824 05.10.15 16:07 Сейчас в теме
Путем проб и ошибок вымучена следующая процедура, которая базируется на коде antz (из его обработки)

Процедура Word_УстановитьФорматАбзацевСодержащихСтрокуПоиска(WordApplication,СтрокаПоиска,Alignment=-1,FontSize=-1)Экспорт				
	
	    WordApplication.Selection.HomeKey(6, 0); //курсор в начало документа
	
		Find = WordApplication.Selection.Find;
				
		Find.ClearFormatting(); //Сбросим форматирование из предыдущих операций поиска.
		Find.Replacement.ClearFormatting();
		
		Find.Text = СтрокаПоиска;
		Find.Forward = Истина;
		Find.Wrap = 1;
		Find.Execute();		
		Selection = Find.Application.Selection;
		Selection.MoveUp(4);
		Selection.MoveDown(4, 1, 1);		
		
		Если Selection.Font.Size <> FontSize и FontSize<>-1 Тогда
			Selection.Font.Size = FontSize;			
		КонецЕсли;
		
		Если Selection.ParagraphFormat.Alignment <> Alignment и Alignment<>-1 Тогда
			Selection.ParagraphFormat.Alignment = Alignment;			
		КонецЕсли;
		
		Selection.EndOf();					
		Find.Execute();			
		Selection = Find.Application.Selection;
		Selection.MoveUp(4);
		Selection.MoveDown(4, 1, 1);
		
		Find.ClearFormatting(); //Сбросим форматирование из предыдущих операций поиска.
		Find.Replacement.ClearFormatting();		
		
КонецПроцедуры
Показать
10. antz 05.10.15 15:13 Сейчас в теме
И тут снова такой я :)
Прикрепленные файлы:
ФорматированиеАбзаца.epf
11. RailMen 824 05.10.15 15:52 Сейчас в теме
(10) antz, твой код работает, если его вызвать 1 раз. При повторном вызове этого кода для ДРУГОЙ строки поиска не работает. Может надо после первого поиска корртку надо возвратить в начало документа?
12. antz 05.10.15 16:05 Сейчас в теме
14. RailMen 824 05.10.15 16:07 Сейчас в теме
(12) antz, да, на 2 секунды ты меня опередил ))) Шустрый какой.

Возможно по коду и не очень оптимально. Зато работает.

Ты получаешь 12 попугаев ) Это тенденция.
15. antz 05.10.15 16:19 Сейчас в теме
(14) RailMen,
Прикрепленные файлы:
Оставьте свое сообщение

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