Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Замедление чтения данных из MS-Word


Автор: TheCetus 27.4.2006, 10:16
столкнулся со следующей проблемой:
код читает данные из файла .doc

Код

procedure TImportWord.LoadFromFile(aFileName : string);
  wApp : TWordApplication;
  OleFileName : OleVariant;
  i, Idx : integer;
begin
  wApp := TWordApplication.Create(nil);
  wApp.ConnectKind := ckNewInstance;
  wApp.Connect;
  wApp.AutoQuit := True;
  OleFileName := aFileName;
  wApp.Documents.OpenOld(OleFileName,  EmptyParam, EmptyParam, EmptyParam,
                         EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                         EmptyParam, EmptyParam);
  for i := 1 to wApp.ActiveDocument.Paragraphs.Count do
  begin
    Self.Add(wApp.ActiveDocument.Paragraphs.Item(i));
    if (Idx >= FStep) then
    begin
      Idx := 0;
      DoProgress;
    end;
    Inc(Idx);
  end;
  wApp.Disconnect;
  wApp.Quit;
end;


procedure TImportWord.Add(const aValue : Paragraph);
begin
  FItems[FCount] := aValue.Range.Text;
  Inc(FCount);
end;



данные считываются нормально, 
НО! чем больше данных загружено, тем медленнее идет загрузка
т.е. первые строк 100 грузятся за 1 сек,
следующие уже за 3
с 200-й по 300-й около 8 сек...

почему возникают такие тормоза и как это лечить? 

Автор: Albinos_x 27.4.2006, 13:31
это не самый оптимальный вариант работы с документом... почему бы не скопировать всё содержимое сразу... к примеру:
Код

...
 wApp := TWordApplication.Create(nil);    
  wApp.ConnectKind := ckNewInstance;    
  wApp.Connect;    
  wApp.AutoQuit := True;    
  OleFileName := aFileName;    
  wApp.Documents.OpenOld(OleFileName,  EmptyParam, EmptyParam, EmptyParam,    
                         EmptyParam, EmptyParam, EmptyParam, EmptyParam,    
                         EmptyParam, EmptyParam);
  wApp.ActiveDocument.Select;
  RichEdit1.Text:=wApp.Selection.Text;
...

 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)