![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск жирного шрифта в word
Bratskiy © (2005-12-27 06:21:00)Привет всем! Помогите пожалуйста. У меня такая проблема: мне нужно написать код, который ищет в документе Word, номера строк, которые выделены жирным шрифтом. Я попробовал решить эту задачу так:
e:=WD.Range.End_;
r:=WD.Range(a,b);
while (r.Font.Underline=0)and(b<e) do
begin
r:=WD.Range(a,b);
Application.ProcessMessages;
end;
после выхода из цикла значение переменной a будет решением данной
задачи. Но возникает проблемма, полученная программа работает очень медленно. Подскажите пожалуйста как добится решения другим более быстрым способом. Заранее благодарен
k2 (2005-12-28 11:57:00) [1]и кстати нижеследующее вынести перед циклом (поспешишь - людей насмешишь :))
r.find.ClearFormatting;
r.find.Font.Bold := true;
r.Find.Font.Underline := wdUnderlineSingle;
k2 (2005-12-28 11:54:00) [2]на здоровье :) а просто интересно - насколько быстрее?
Bratskiy (2005-12-28 11:49:00) [3]Спасибо огромное, работает действительно гораздо быстрее. С наступающим!!!
Bratskiy (2005-12-28 11:48:00) [4]Спасибо огромное, работае действительно гораздо быстрее. С наступающим!!!
k2 (2005-12-28 11:27:00) [5]
procedure FindBoldAndUnderline;
var
wapp: WordApplication;
doc: WordDocument;
r: OleVariant;
found: WordBool;
begin
wapp := GetActiveOleObject('Word.Application')as WordApplication;
doc := wapp.ActiveDocument;
r := doc.Content;
repeat
found := false;
r.find.ClearFormatting;
r.find.Font.Bold := true;
r.Find.Font.Underline := wdUnderlineSingle;
found := r.Find.Execute(EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, true, EmptyParam, true, mptyParam,EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam);
if found then begin
r.StartOf(wdCharacter, wdMove);
r.InsertAfter('Новость: ');
r.Move(wdParagraph, 1);
end;
until
not found;
end;
попробуй такой вариант - будет быстрее?
Bratskiy (2005-12-28 09:21:00) [6]Эти самые ленты приходят по электронной почте в виде прикреплённых документов
k2 (2005-12-28 09:00:00) [7]новостная лента у меня почемуто с html ассоциируется, а там лучше через таги
Bratskiy (2005-12-28 04:29:00) [8]Я немного не тот код написал, торопился, а потом когда отправил, увидел что не то, а уже поздно, сообщение отправлено. На самом деле у меня так:
var a,b:OleVariant;
.......................
a:=1; b:=2;
e:=WD.Range.End_;
r:=WD.Range(a,b);
while (r.Font.Bold=0)and(b<e) do
begin
inc(b);inc(b);
r:=WD.Range(a,b);
Application.ProcessMessages;
end;
Вообще задача у меня разбить документ, который представляет из себя новостную ленту на отдельные новости, и соотнести каждую новость к определённому разделу и занести в базу. Разделы в ленте выделяются жирным и подчёркнутым шрифтом, а новости внутри разделов просто жирным шрифтом поэтому условие в цикле While у меня сложнее, но приводить я его не стал. Таким способом одна лента обрабатывается около 10 минут а их целая куча.
umbra (2005-12-27 14:07:00) [9]и почему проверяется, подчеркнутость шрифта?
umbra (2005-12-27 14:06:00) [10]а как a и b изменяются? приведенный цикл может быть бесконечным