Einzelnen Beitrag anzeigen

stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
380 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Word Zugriff per Ole -- zunehmend langsamer

  Alt 24. Apr 2007, 18:24
Hallo,

ich habe mir gerade als aktuelles projekt vorgenommen,
eine lokale Datenbank zu erstellen, die sämtliche in einem
(natürlich auch mehrere) Worddokument vorkommenen Wörter aufnimmt,
damit man anschließend über eine Wortsuche schneller die betreffenden
Dokumente aufgelistet bekommt, als es z.B. die bordeigene Suche von
Windows schafft.
Nun aber zu meinem "Problem":
Ich verbinde mich mit einem Worddokument und gehe dann alle
Wörter in dem Dokument durch um diese dann später mal zu verarbeiten,
allerdings ist es so, dass die Verarbeitungsgeschwindigkeit der
Wörter zunehemnd abnimmt, je weiter sich die Routine dem Dokumentende
nähert.
Hier mal mein bisheriger "Versuchscode":
Delphi-Quellcode:
procedure TForm1.bt_OpenWordDocClick(Sender: TObject);
Var
V :OleVariant;
Docs, ItemIndex: OleVariant;
ConFirmConversions,
OpenReadOnly :OleVariant;
LinesCount : Integer;
Zl : TStringList;

begin
If OpenDialog1.execute Then
 Begin
 Screen.Cursor := crHourGlass;
 Zl := TStringList.Create;
 
 If CheckBox2.Checked Then
 Zl.Sorted := True;
 
 If Not CheckBox1.Checked Then
 Zl.Duplicates := dupIgnore;
 
 Memo1.Lines.Clear;
 EditDocFile.Text := OpenDialog1.FileName;
 ProgressBar1.Visible:= True;
 
  try
    ItemIndex := 1;
    try
      Wordapplication.Visible := False;
      Wordapplication.Connect;
    except
      MessageDlg('Word ist nicht auf diesem Rechner installiert', mtError, [mbOk], 0);
      Abort;
    end;

      Docs := (EditDocFile.Text);
      ConFirmConversions:= False;
      OpenReadOnly := True;

      WordApplication.Documents.Open(Docs,ConFirmConversions,OpenReadOnly,EmptyParam,
      EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
      EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

      WordDocument.ConnectTo(WordApplication.Documents.Item(ItemIndex));
      ProgressBar1.Max := WordDocument.Words.Count;

    // Alle Wörter durchgehen
    For LinesCount := 1 To WordDocument.Words.Count Do
     Begin
     ProgressBar1.Position := LinesCount;
     V:=WordDocument.Words.Item(LinesCount).Text;
     V:= trim(V);
     If Length(V) > 1 Then
     Zl.Add(V);
     End;
  except
    on E: Exception do
    begin
      ShowMessage(E.Message);
      WordApplication.Disconnect;
    end;
    
  end;
   ProgressBar1.Visible := False;
// WordApplication.Disconnect;
   Memo1.Lines.Assign(Zl);
   Zl.Free;
   Screen.Cursor:= crDefault;
 end;
end;
Jetzt also die Gretchenfrage, ist mein Vorhaben so überhaupt sinnvoll realisierbar,
oder ist der Zugriff per Ole 'n schlechter Ansatz?
Ich bin für alle Vorschläge offen.

Moin
  Mit Zitat antworten Zitat