Поиск и замена текста в Word

12. Александр Жерздев (Al777) 17.12.13 08:23 Сейчас в теме
Использовал в своей обработке некоторые моменты из приведённых модулей кода. Спасибо!
Ответы
13. Владимир Опарин (TTMouse) 18.12.13 11:35 Сейчас в теме
Тут в стартовой теме изначально неправильно шаблон сделан, потому и решение такое сложное.
Точки входа в документе MS Word надо описать через коллекцию Fields с типами полей = wdFieldDocVariable. После этого можно будет извне применять такой программный ход, который проставит значения везде сразу:
Document.Variables("НомерДоговора").Value = "123456"
Document.Variables("Должность").Value = "Директор"
Document.Fields.Update
Более подробное описание Fields.
14. Леша (glip) 25.11.08 17:21 Сейчас в теме
Очень нужна помощь.
Пытаюсь найти и заменить текст в вордовском документе... Но у меня находит ттолько первую замену.
Есть подозрение, что после первой замены, программа ищет следующие в первой же замене, а не просматривает весь документ...
Помогите, плиз....


Функция НайтиТекст(Ф,Текст,Замена)

Ф.Selection.Find.ClearFormatting();
Ф.Selection.Find.Text=Текст;
Ф.Selection.Find.Forward=1;
Если Ф.Selection.Find.Execute()=0 Тогда
Возврат(0);
Иначе
Возврат(1);
КонецЕсли;
КонецФункции
//*******************************************
Процедура Показать()
ФайлШаблона = ""+БД+"Samples\"+ШаблоныДоговоров.ПолучитьЗначение(ШаблоныДоговоров.ТекущаяСтрока());
Ф = СоздатьОбъект("Word.Application");
Ф.Documents.Add(ФайлШаблона);
Если НайтиТекст(Ф,"{НомерДоговора}")=1 Тогда
Ф.Selection.Find.Text = СокрЛП(НомерДоговора);
КонецЕсли;
Если НайтиТекст(Ф,"{Должность}")=1 Тогда
Ф.Selection.Find.Text = Должность.ПолучитьЗначение(Должность.ТекущаяСтрока());
КонецЕсли;
Если НайтиТекст(Ф,"{ДатаДоговора}")=1 Тогда
Ф.Selection.Find.Text = СокрЛП(ДатаДоговора);
КонецЕсли;
//заменяем переменные
Ф.Visible = 1
КонецПроцедуры //Показать()

15. Василий Демидов (Душелов) 3801 25.11.08 17:23 Сейчас в теме
А если снять выделение? Может он ищет в выделенном тексте?
16. Леша (glip) 25.11.08 17:26 Сейчас в теме
17. Василий Демидов (Душелов) 3801 25.11.08 17:27 Сейчас в теме
18. Леша (glip) 25.11.08 17:31 Сейчас в теме
он тогда удаляет вообще все замены, т.е. выделенные текст = "";
19. Леша (glip) 25.11.08 17:33 Сейчас в теме
вот если бы установить курсор в начало документа....
20. Василий Демидов (Душелов) 3801 25.11.08 17:41 Сейчас в теме
Ну в тут я советую посмотреть MSDN на предмет перевода курсора: http://msdn.microsoft.com/zh-tw/library/microsoft.office.interop.word.selection_members(VS.80).aspx
21. Леша (glip) 25.11.08 21:38 Сейчас в теме
ничего не могу подобного найти:( Может кто еще подскажет!!!
22. Федор (tdr1225) 36 26.11.08 10:57 Сейчас в теме
Код
   
ф.Selection.Find.Execute("{НомерДоговора}", 0,0,0,0,0, 1,1, 0,НомДог,2);
ф.Selection.Find.Execute("{Должность}",      0,0,0,0,0, 1,1, 0,Должн, 2);
Показать полностью

А также см. в ВижуалБейсике описание метода Execute():

Execute method as it applies to the Find object.

Runs the specified find operation. Returns True if the find operation is successful. Boolean.

expression.Execute(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)
...
обрати внимание на параметры Forward, Wrap и Replace
23. Леша (glip) 27.11.08 20:59 Сейчас в теме
спасибо всем...
проблему решил... были ошибки в коде и надо было добавить
wdFindContinue = 1;
Ф.Selection.Find.Wrap=wdFindContinue;
24. Женя Попов (koloboc74) 76 28.11.08 06:33 Сейчас в теме
Процедура Печать()


//Создание объекта Word документ
WordApp=СоздатьОбъект("Word.Application");
NewDoc=WordApp.Documents;
//Открітие файла

Док=NewDoc.Add(КаталогИБ()+"\График.doc");
//Заполнение текстового поля


Fnd = WordApp.ActiveDocument.Range().Find;
Fnd.ClearFormatting();
Fnd.Forward = -1;

// Заменяем ключевые поля на нужные значения

ТаблицаЗамен = СоздатьОбъект("ТаблицаЗначений");
Для x=1 По 3 Цикл
ТаблицаЗамен.НоваяСтрока();
КонецЦикла;

ТаблицаЗамен.НоваяКолонка("Найти" , ,,, "Найти слово");
ТаблицаЗамен.НоваяКолонка("Заменить", ,,, "Заменить на...");
// Что надо

ТаблицаЗамен.УстановитьЗначение(1,1,"{Номер}");
ТаблицаЗамен.УстановитьЗначение(2,1,"{Дата}");
ТаблицаЗамен.УстановитьЗначение(3,1,"{Сотр}");
// На что

ТаблицаЗамен.УстановитьЗначение(1,2, СокрЛП(НомерДок));
ТаблицаЗамен.УстановитьЗначение(2,2, СокрЛП(Нрег(Формат(ДатаДок,"Д(0)ДДММММГГГГ"))));
ТаблицаЗамен.УстановитьЗначение(3,2, СокрЛП(Сотрудник.Подразделение.Получить(ТекущаяДата())));


ТаблицаЗамен.ВыбратьСтроки();
Пока ТаблицаЗамен.ПолучитьСтроку() = 1 Цикл
Fnd.Execute(ТаблицаЗамен.Найти,,,,,,,,, ТаблицаЗамен.Заменить, 2);
КонецЦикла;

WordApp.ActiveWindow.View.Type = 4; // Режим только просмотра WordApp.Visible =1;

Оставьте свое сообщение