Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.28;
Скачать: CL | DM;

Вниз

Word, замена найденного текста удалением строки...   Найти похожие ветки 

 
asafr ©   (2003-04-14 18:32) [0]

Здравствуйте. Как еще (кроме приведенного ниже способа) можно эффективно заменить определенную переменную в Word-e удалением строки документа, где эта переменная находится?
Функционирующий код, приведенный ниже, работает очень медленно и, поэтому, малоэффективен в даже не очень больших документах. (использую закладку Delphi-> Servers)
a, b, Vstart, Vend, OldStr:OleVariant;
WordLength , j, k, n :integer;
KeyStop : Boolean;
...............................
...............................
j :=0;
KeyStop:=False;
n :=? //Задается необходимая величина
repeat
a:=j;
b:=j+n;
if WordDocument1.Range(a,b).Text=oldStr then begin
Vstart :=j;
Vend :=j+n;
KeyStop :=True;
end;
Inc(j);
until (j=WordLength-n) or (KeyStop=True) ;
WordDocument1.Range(Vstart,Vend).Select;
WordApplication1.Selection.Delete(EmptyParam,EmptyParam);

, где WordLength - длина текста документа...


 
asafr ©   (2003-04-15 13:52) [1]

Переиначим вопрос...
Как в документе Word97 можно найти заданную строку и выделить ее способом, отличным от вышеприведенного?


 
MBo ©   (2003-04-15 14:05) [2]

How to search and replace text in a Word document
--------------------------------------------------------------------------------


Answer 1:

You should use a variant because the Find.Execute method is a bit buggy. Something like this, for example:



{ ... }
var
Rnge: OleVariant;
{ ... }

Rnge := Doc.Content;
Rnge.Find.Execute("old", Wrap := wdFindContinue, ReplaceWith := "new", Replace := wdReplaceAll);
{ ... }



Tip by Deborah Pate




Answer 2:



{ ... }
{ Create the OLE Object }
WordApp := CreateOLEObject("Word.Application");
WordApp.Documents.Open(yourDocFile);
WordApp.Selection.Find.ClearFormatting;
WordApp.Selection.Find.Text := yourOldStr;
WordApp.Selection.Find.Replacement.Text := yourNewStr;
WordApp.Selection.Find.Forward := True;
WordApp.Selection.Find.Wrap := 1; {wdFindContinue}
WordApp.Selection.Find.Format := False;
WordApp.Selection.Find.MatchCase := False;
WordApp.Selection.Find.MatchWholeWord := False;
WordApp.Selection.Find.MatchWildcards := True;
WordApp.Selection.Find.MatchSoundsLike := False;
WordApp.Selection.Find.MatchAllWordForms := False;
WordApp.Selection.Find.Execute(Replace := 2); {wdReplaceAll}
{Or as alternative: WordApp.Selection.Find.Execute(Replace := 1); for one replace}
WordApp.ActiveDocument.SaveAs(yourNewDocFile);
WordApp.Quit;
WordApp := Unassigned;
{ ... }



Tip by Mike Shkolnik


 
asafr ©   (2003-04-15 14:44) [3]

MBo, спасибо, но это стандартный способ замены одной строки на другую...
А вопрос состоит в том, чтобы найти заданную строку и выделить ее и все...
WordDocument1.Range(a,b)...


 
asafr ©   (2003-04-15 14:52) [4]

Не дописал выражение в предыдущий раз..
Что-то вроде:
WordDocument1.Range(a,b).Select


 
MBo ©   (2003-04-15 15:00) [5]

Subj был, BTW: замена найденного текста удалением строки

насколько я понимаю, во втором примере можно остановиться на строчке
WordApp.Selection.Find.Text := yourOldStr;


 
asafr ©   (2003-04-15 15:37) [6]

Нет... Этим ты просто задаешь один из параметров поиска, но не останавливаешься на yourOldStr


 
asafr ©   (2003-04-15 16:18) [7]

Решил. Запоминайте, вещь полезная - потом пригодится. Данные в Word заносятся из некого массива Store, сформированного раньше...
var
oldStr, newStr, replace :OleVariant;
....................................
....................................
Replace:=1;
repeat
Inc(Step);
..................
WordApplication1.Selection.Find.ClearFormatting; WordApplication1.Selection.Find.Replacement.ClearFormatting;
WordApplication1.Selection.Find.Text:=oldStr;
if WordApplication1.Selection.Find.Execute(oldStr,EmptyParam,......,replace) then begin
if Massif^[Step]="" then //Удаляем строку, если данных нет
WordApplication1.Selection.Delete(EmptyParam,EmptyParam)
else
WordApplication1.Selection.TypeText(newStr); //Позволяет заменять строку длиной более 256 символов
end;
.................................
until Step=FullStep


 
asafr ©   (2003-04-15 16:19) [8]

Опа... вот мои оплошности... Вместо Store в коде написана ссылка на Massif, но сути это не меняет



Страницы: 1 вся ветка

Текущий архив: 2003.04.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
14-91528
passm
2003-04-10 17:07
2003.04.28
Windows XP & LPT1 привелегии пользователей ??


3-91189
pavel_rosl
2003-04-10 01:10
2003.04.28
удалить несколько записей


14-91487
pi
2003-04-10 12:18
2003.04.28
Проблемы внедрения


1-91345
Officeman
2003-04-15 17:55
2003.04.28
про Office2000 - Excel


3-91177
alxx
2003-04-09 14:39
2003.04.28
GetDate