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