Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2011, 23:55   #1
shakycucumber
 
Регистрация: 17.04.2011
Сообщений: 3
По умолчанию Поиск и замена текста в надписях Word

Помогите.

Приведенным ниже кодом, ищу и заменяю текст в документе word:

OWord(TFileName); {открываю документ}
SeekInsert(SText, IText); {ищем, заменяем}
CWord(TFileName); {закрываем документ}

...

function SeekInsertInText(SText, IText : string):boolean; {функция поиска и замены}
begin
WordApp1.Selection.Find.ClearFormat ting;
WordApp1.Selection.Find.Replacement .ClearFormatting;
WordApp1.Selection.Find.Text:=SText ;
WordApp1.Selection.Find.Replacement .Text:=IText;
WordApp1.Selection.Find.Forward:=Tr ue;
WordApp1.Selection.Find.Wrap:=wdFin dContinue;
WordApp1.Selection.Find.Format:=Fal se;
WordApp1.Selection.Find.MatchCase:= False;
WordApp1.Selection.Find.MatchWholeW ord:=False;
WordApp1.Selection.Find.MatchWildca rds:=False;
WordApp1.Selection.Find.MatchAllWor dForms:=False;
WordApp1.Selection.Find.Execute(Rep lace:=wdReplaceAll);
end;

Всё хорошо ищет и заменяет.

НО! моя функция игнорирует надписи. Т.к. пока я дилетант во взаимодействии word'a и delphi, подскажите как можно решить эту проблему.

Для непросвещенных объясняю, что такое "надпись" в word скриншотом, который пониже.

И чтобы сразу выкинуть мусор и хлам из темы просьба не писать "умным":
- погугли, там полно примеров;
- запиши макрос в word и посмотри;
- не могу понять что ты хочешь;

ЗАРАНЕЕ, ОГРОМНОЕ СПАСИБО!

а вот и обещанный скриншот.
Изображения
Тип файла: jpg Безымянный.jpg (37.4 Кб, 133 просмотров)
shakycucumber вне форума Ответить с цитированием
Старый 18.04.2011, 13:43   #2
shakycucumber
 
Регистрация: 17.04.2011
Сообщений: 3
По умолчанию

Ни у кого ни каких идей?

Думал решить проблему запуском готового макроса программно.
Но тогда придется писать макрос для каждых поиска и замены. А в моей программульке это невероятно большой объем.

Следовательно назревает вопрос - можно ли ввести параметры замены и поиска в делфи, а затем с этими параметрами запустить макрос?

Конечно ответ скорей всего - нет.

Но может это натолкнет кого то на какие-то мысли.
shakycucumber вне форума Ответить с цитированием
Старый 19.04.2011, 02:18   #3
shakycucumber
 
Регистрация: 17.04.2011
Сообщений: 3
По умолчанию

активность форумчан просто поражает)) Наверно не там я свою проблему описал(

Ну что же, продолжим беседовать самим с собой. Решение точно найду может кому то потом пригодится)

реализовал идею с макросами.
но опять НО.

для ясности сначала:

Код:
function SeekInsertInAllDoc(SText, IText : string):boolean;
const vbext_ct_StdModule=1;
      msoBarFloating=4;
      msoControlButton=1;
var cm, cb, btn: Variant;
    s: string;
begin
  cm:=wordApp1.VBE.VBProject.Item(1).VBComponents.Add(vbext_ct_StdModule).CodeModule;
  s:='Sub Макрос2() '+
     'Selection.Find.ClearFormatting '+
     'Selection.Find.Replacement.ClearFormatting '+
     'With Selection.Find '+
     '.Text = '+STExt+' '+
     '.Replacement.Text = '+IText+' '+
     '.Forward = True '+
     '.Wrap = wdFindContinue '+
     '.Format = False '+
     '.MatchCase = False '+
     '.MatchWholeWord = False '+
     '.MatchWildcards = False '+
     '.MatchSoundsLike = False '+
     '.MatchAllWordForms = False '+
     'End With '+
     'Selection.Find.Execute Replace:=wdReplaceAll '+
     'End Sub ';{СКРИПТ}
  cm.AddFromString(s);
  s:=cm.name;
  cb:=wordApp1.commandBars.add(Name:='Временная панель', Position:=msoBarFloating);
  cb.enabled:=true;
  cb.visible:=true;
  btn:=wordApp1.commandBars.Item['Временная панель'].Controls.add(type:=msoControlButton, ID:=1);
  btn.caption:='Временная кнопка';
  btn.onAction:=cm.Name+'.Макрос1';
  btn.execute;
  btn.delete;
  cb.delete;
  wordApp1.VBE.VBProjects.Items(1).VBComponents.Remove(cm.parent);
end;
вот такой функцией создаю макрос - поиска и замены в word.
описать поэтапно что делает функция не могу, так как нашел данный код во всемирной паутине, содрал, немного изменил под себя.
В двух словах:
1. описываем макрос;
2. создаем кнопку макроса;
3. нажимаем на нее;
4. ищем заменяем;
5. удаляем кнопку и макрос;
как то так.

знаю что пункты 2, 3, 4 лишние, но во избежании еще большей путаницы, оставил все как есть.

теперь ПРОБЛЕМА!!!
после запуска программки и соответствующих действий, выдает ошибку

Method 'VBProject' not supported by automation object.

как это переводится я знаю (кстати если заменить слово object на abject, интересный перевод получается)))
но что это значит и как его приготовить я не понимаю.

О МОЛЧАЛИВЫЕ МУДРЕЦЫ окиньте взором своим текст мой, и ПОМОГИТЕ.
shakycucumber вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема поиск и замена текста(Delphi) KirkMETAL Помощь студентам 4 26.07.2010 08:41
Поиск и замена текста Jantar Общие вопросы Delphi 10 26.07.2010 08:26
Поиск и замена текста для Отдела кадров Viento Microsoft Office Excel 2 24.07.2009 10:08
Поиск и замена текста в файле VAbramyak Общие вопросы Delphi 3 04.04.2007 20:20
поиск и замена текста в RichEdit Vasya Помощь студентам 11 16.03.2007 06:48