Поиск и замена текста в 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. Душелов 4017 25.11.08 17:23 Сейчас в теме
А если снять выделение? Может он ищет в выделенном тексте?
+
16. glip 25.11.08 17:26 Сейчас в теме
не знаю как снять:(((
+
17. Душелов 4017 25.11.08 17:27 Сейчас в теме
Может, вроде: Ф.Selection = "";
+
18. glip 25.11.08 17:31 Сейчас в теме
он тогда удаляет вообще все замены, т.е. выделенные текст = "";
+
19. glip 25.11.08 17:33 Сейчас в теме
вот если бы установить курсор в начало документа....
+
20. Душелов 4017 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 37 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;
JinAir7460; +1
24. koloboc74 83 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;

+
Внимание! Тема сдана в архив

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