Форум: "Corba";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
ВнизПоиск жирного шрифта в word Найти похожие ветки
← →
Bratskiy © (2005-12-27 06:21) [0]Привет всем! Помогите пожалуйста. У меня такая проблема: мне нужно написать код, который ищет в документе 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 будет решением данной
задачи. Но возникает проблемма, полученная программа работает очень медленно. Подскажите пожалуйста как добится решения другим более быстрым способом. Заранее благодарен
← →
umbra © (2005-12-27 14:06) [1]а как a и b изменяются? приведенный цикл может быть бесконечным
← →
umbra © (2005-12-27 14:07) [2]и почему проверяется, подчеркнутость шрифта?
← →
Bratskiy © (2005-12-28 04:29) [3]Я немного не тот код написал, торопился, а потом когда отправил, увидел что не то, а уже поздно, сообщение отправлено. На самом деле у меня так:
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 минут а их целая куча.
← →
k2 © (2005-12-28 09:00) [4]новостная лента у меня почемуто с html ассоциируется, а там лучше через таги
← →
Bratskiy © (2005-12-28 09:21) [5]Эти самые ленты приходят по электронной почте в виде прикреплённых документов
← →
k2 © (2005-12-28 11:27) [6]
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 11:48) [7]Спасибо огромное, работае действительно гораздо быстрее. С наступающим!!!
← →
Bratskiy © (2005-12-28 11:49) [8]Спасибо огромное, работает действительно гораздо быстрее. С наступающим!!!
← →
k2 © (2005-12-28 11:54) [9]на здоровье :) а просто интересно - насколько быстрее?
← →
k2 © (2005-12-28 11:57) [10]и кстати нижеследующее вынести перед циклом (поспешишь - людей насмешишь :))
r.find.ClearFormatting;
r.find.Font.Bold := true;
r.Find.Font.Underline := wdUnderlineSingle;
Страницы: 1 вся ветка
Форум: "Corba";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c