Форум: "Основная";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c