Бюджет Блиц для Android - Возьмите расходы под контроль

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

Страницы: 1

Очень нужна помощь.
Пытаюсь найти и заменить текст в вордовском документе... Но у меня находит ттолько первую замену.
Есть подозрение, что после первой замены, программа ищет следующие в первой же замене, а не просматривает весь документ...
Помогите, плиз....


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

Ф.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
КонецПроцедуры //Показать()


А если снять выделение? Может он ищет в выделенном тексте?


не знаю как снять:(((


Может, вроде: Ф.Selection = "";


он тогда удаляет вообще все замены, т.е. выделенные текст = "";


вот если бы установить курсор в начало документа....


Ну в тут я советую посмотреть MSDN на предмет перевода курсора: http://msdn.microsoft.com/zh-tw/library/microsoft.office.interop.word.selection_members(VS.80).aspx


ничего не могу подобного найти:( Может кто еще подскажет!!!


Код
   
ф.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


спасибо всем...
проблему решил... были ошибки в коде и надо было добавить
wdFindContinue = 1;
Ф.Selection.Find.Wrap=wdFindContinue;


Процедура Печать()


//Создание объекта 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;


Использовал в своей обработке некоторые моменты из приведённых модулей кода. Спасибо!


Тут в стартовой теме изначально неправильно шаблон сделан, потому и решение такое сложное.
Точки входа в документе MS Word надо описать через коллекцию Fields с типами полей = wdFieldDocVariable. После этого можно будет извне применять такой программный ход, который проставит значения везде сразу:
Document.Variables("НомерДоговора").Value = "123456"
Document.Variables("Должность").Value = "Директор"
Document.Fields.Update
Более подробное описание Fields.

Страницы: 1
Форма ответов
Логин:
Пароль:
Текст сообщения*
Прикрепить файл