Имя: Пароль:
1C
1С v8
Замена текста в Word AD
0 Альбатрос
 
03.10.13
10:57
Договор = ПолучитьМакет("Макет"); // получим макет-ActiveDocument
MSWord = Договор.Получить();
Для каждого Строчка из ПриемНаРаботу.РаботникиОрганизации цикл
Попытка    

Doc = MSWord.Application.Documents(1);
Doc.Activate();

Replace = Doc.Content.Find;    
FindText = "{НомерДоговора}";        Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ОбщегоНазначенияЗК.ПолучитьНомерНаПечать(ПриемНаРаботу));

Если у меня в документе много шаблонов вида "{НомерДоговора}", то как задать цикл, чтоб они все заменились, а не только первый?
1 Альбатрос
 
03.10.13
11:14
неужели нет метода? придется копировать блок с заменой текста столько раз, сколько текст встречается в макете :( Неоптимальненько как-то...
2 BuHu
 
03.10.13
11:19
(1) открой ворд , включи запись макроса , выполни ту операцию ,которую хочешь выполнить программно , руками . останови запись макроса , посмотри код . мне иногда помогало.
3 Мыш
 
03.10.13
11:21
Find.Execute Method
Parameters
Replace
Specifies how many replacements are to be made: one, all, or none. Can be any WdReplace constant.
4 Мыш
 
03.10.13
11:22
Подробнее в синтакс [зачеркнуто], MSDN-помощнике
http://msdn.microsoft.com/en-us/library/office/bb179352(v=office.12).aspx
5 Chikko
 
03.10.13
11:25
В бсп для ворда вроде есть процедуры. УправлениеПечатьюMSWordКлиент
6 BuHu
 
03.10.13
11:26
как то надо сказать ворду - WdReplaceAll
7 Альбатрос
 
03.10.13
11:33
(3) (4) (6) Спасибо, щас опробую
8 Альбатрос
 
03.10.13
11:38
Блин, а как передать WDReplaceAll? Просто текстом не получается...
9 Альбатрос
 
03.10.13
11:42
все, понял, вот так:
wdReplace = 2;
Replace.Execute(ИскомыйТекст,Ложь,Истина,Ложь,,,Истина,,Ложь,ТекстЗамены,wdReplace);
10 Альбатрос
 
03.10.13
11:43
Еще раз спасибо!