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

Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)