Имя: Пароль:
IT
 
Delphi - OLE - Word: Как узнать позицию найденной строки?
0 Chubrik
 
16.01.07
10:40
Текст ищется, но как мне потом узнать его позицию?

WordDocument1.Range.Find.ClearFormatting;
if WordDocument1.Range.Find.Execute(str, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam) then
  begin
  ???
 
  Хотелось бы чего-нибудь вроде:
RangeStart:=WordDocument1.Range.Find.Start;
RangeFin:=WordDocument1.Range.Find.End_;
1 smaharbA
 
16.01.07
11:07
Позицию в чем ? в доке/парагрофе/... ?
А так

fnd=WordDocument1.Range.Find;
fnd.ClearFormatting;
fnd.Execute(str, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
if fnd.Found=True then
 begin
   RangeStart:=fnd.Parent.Start;
   RangeFin:=fnd.Parent.End;
///

Только вот зачем ???!
2 Chubrik
 
16.01.07
11:13
(1)
Зачем? Анализ документа по содержанию.

  RangeStart:=fnd.Parent.Start;
  RangeFin:=fnd.Parent.End;
Нет там таких параметров - Start, End.
3 smaharbA
 
16.01.07
11:16
(2) Кто тебе сказал что нету ?
Start();
End();

"Зачем? Анализ документа по содержанию" - а зачем позиция ? и позиция какая док/секция/контент/параграф и т.д. и т.п.
4 Chubrik
 
16.01.07
11:19
Найти позицию в документе.
Start() тоже нет. И End() нет. Пробовал.
Позиция для выдирания данных, следующих за найденной строкой.
5 romix
 
модератор
16.01.07
11:26
Попробуй запустить Запись макроса - тебе Ворд нарисует макрос, где все методы показаны. Я так делал.
6 smaharbA
 
16.01.07
11:26
(4) Да ну, вот тебе рабочий код на васике

Sub nnn()
Set fnd = ThisDocument.Range.Find
fnd.Execute ("eee")
If fnd.Found Then
MsgBox fnd.Parent.End()
MsgBox fnd.Parent.Start()
End If
End Sub
7 Chubrik
 
16.01.07
11:45
Пробовал запись макроса, там пишет просто Execute после установки параметров.
Ребята, мне на Делфях надо, через Ole...
А оттуда Start/End нет/не видит в ворде почему-то :(
8 smaharbA
 
16.01.07
11:48
(7) Смотри внимательно (6)
9 Chubrik
 
16.01.07
11:51
(8) Ну и? В делфях есть WordDocument1.Range.Find.Parent, но свойств Start, Start(), End, End() нет, т. е. WordDocument1.Range.Find.Parent.Start/WordDocument1.Range.Find.Parent.Start() не катит.
10 smaharbA
 
16.01.07
11:56
(9) А ты пробовал ?
11 smaharbA
 
16.01.07
11:56
Parent это Range, а у ранжа есть и старт и енд
12 Chubrik
 
16.01.07
11:58
(10) Ну блин, ну конечно пробовал. У меня Делфя открыта, и все, что советуете, пробую сразу же.
Действительно, WordDocument1.Range.Start есть, а WordDocument1.Range.Find.Parent.Start нет почему-то. У меня вот из-за этого-то и возник вопрос для открытия темы.
13 smaharbA
 
16.01.07
12:01
Нету дельфи :(
Вот джабаскр
word=new ActiveXObject("Word.Application");
doc=word.Documents.Open("c:/find.doc");
fnd = doc.Range().Find;
fnd.Execute ("eee");
if (fnd.Found==true){
WScript.Echo(fnd.Parent.End);
WScript.Echo(fnd.Parent.Start);
}
doc.close();
word.quit();
14 Chubrik
 
16.01.07
12:05
(13)
WScript.Echo(fnd.Parent.End);
WScript.Echo(fnd.Parent.Start);
А это что за извращение еще?
15 Chubrik
 
16.01.07
12:06
Нет такого в делфях - WScript
16 smaharbA
 
16.01.07
12:10
(15) Дак это понятно, это просто вывожу на экран
понятно что там messagebox
17 Chubrik
 
16.01.07
12:12
Тогда я чего-то не понимаю... В чем смысл (13)?
Свой кусок кода я привел в (0)
18 Chubrik
 
16.01.07
12:23
И все-таки, что за глюк - (12)?
19 smaharbA
 
16.01.07
13:20
Сделай попробуй переменные типа объект (ну как там в дельфи правильно, хотя вроде в паскале нет приведения типов, но х.з.)
fnd:=WordDocument1.Range().Find;
и
Rang=fnd.Parent;
20 Chubrik
 
16.01.07
15:09
(19) Так съел Start, но значение всегда 0.
21 Chubrik
 
16.01.07
15:27
(19) Слушай, вроде как заработало.
  fnd.Parent.Select;
  rang:=fnd.Parent;
  d1:=rang.Start;
  d2:=rang.End;
22 Chubrik
 
16.01.07
15:27
Большое спасибо за ответы!