Текущий архив: 2007.10.14;
Скачать: CL | DM;
Вниз
Поиск в Word по определённому стилю Найти похожие ветки
← →
Bratskiy © (2006-01-24 12:24) [0]Привет! У меня опять вопрос по поиску в Word. На это раз мне надо найти текст определённого стиля. У объекта Find я нашел такой метод Set_Style(var prop: OleVariant), судя по всему в нём и устанавливается стиль, который надо найти. Но какой параметр бы я ни передовал выходит ошибка: Method "Set_Style" not supported by automation object
Вот примерно как я делал
var
r,i,s:OleVariant;
st:string;
.....................
r:=WD.Content;
i:=0;
st:="Заголовок 2";
repeat inc(i);
until (WD.Styles.Item(i).NameLocal = st) or (i = WD.Styles.Count);
s:=WA.ActiveDocument.Styles.Item(i);
r.Find.ClearFormatting;
r.Find.Set_Style(s);// Здесь выходит ошибка
........................
Буду очень благодарен, если кто-нибудь поможет.
← →
umbra © (2006-01-24 17:58) [1]
> Method "Set_Style" not supported by automation object
такого публичного метода нет. это метод-сеттер свойстваStyle
. А насчет поиска - надо искать текст, а затем проверять свойствоStyle
объектаFind
. Если его значение подходит - делаем, что надо, если не подходит - ищем дальше
← →
Bratskiy © (2006-01-25 04:22) [2]А, что такое метод-сеттер?
Если такого метода нет, то тогда не понятно почему, когда пишешь Find, потом ставишь точку и нажимамаешь Crtl + пробел всплывает Set_Style.
У меня по условию задачи необходимо найти текст (не ясно заранее какой), который будет заданного стиля. В VBA это делается легко, а вот в Delphi у меня что-то никак не получается.
← →
k2 © (2006-01-25 06:21) [3]to umbra © (24.01.06 17:58) [1]
а какой текст он будет искать, если заранее неизвесно :) не посимвольнож :)
to Bratskiy ©
если немножко извратиться, то искать абсолютно также, как мы с вами разбирали в предыдущей ветке:
var
wapp: WordApplication;
doc: WordDocument;
r: OleVariant;
r1: range;
found: WordBool;
p, st: OleVariant;
f: Find;
begin
wapp := GetActiveOleObject("Word.Application")as WordApplication;
doc := wapp.ActiveDocument;
r1 := doc.content;
f := r1.Find;
r := r1;
f.ClearFormatting;
p := "Заголовок 2";
st := doc.Styles.Item(p);
f.Set_Style(st);
repeat
found := false;
found := r.find.Execute(EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, true, EmptyParam, true, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
if found then begin
r.StartOf(wdCharacter, wdMove);
r.InsertAfter("Новость: ");
r.Move(wdParagraph, 1);
end;
until
not found;
end;
← →
k2 © (2006-01-25 06:46) [4]и ещё, на наличие стиля лучше не закладываться, сделать обработочку
..
p := "Заголовок 232";
try
st1 := doc.Styles.Item(p);
except
MessageBox(0, "Стиль не найден", "WordFindExample", 0);
exit;
end;
f.Set_Style(st1);
..
← →
Bratskiy © (2006-01-25 07:00) [5]Спасибо,
Я правда уже чуть-чуть проще сделал (чем в х [3])
r:=WD.Content;
r.Find.ClearFormatting;
s:=WD.Styles.Item(i);
r.Find.Style:=s;
Вроде работает нормально. Не мог сделать потому-что У Find метод Style почему-то не всплывает (Ctrl + пробел)
И ещё
p := "Заголовок 2";
st := doc.Styles.Item(p);// Даже не знал что можно имя стиля передовать, думал только индекс
← →
k2 © (2006-01-25 07:04) [6]точно, и так работает :) што ещё раз доказывает лучше недоперемудрить :)
Страницы: 1 вся ветка
Текущий архив: 2007.10.14;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.03 c