In Word-Datei suchen
-
Hallo,
nachdem das Öffnen, Drucken, Speichern einer Word-Datei nun kein Problem mehr ist, stehe ich vorm nächsten - wenn auch kleinen - Hindernis.
Zur Suche in einem Word-Dokument habe ich folgenden Delphi-Code gefunden, der auch größtenteils selbsterklärend ist.var DocWord:_document; NomFichier:OLEVariant; MaZone,MaRecherche:Range; Param1, Param2, Param3, Param4, Param5, Param6 : OLEVariant; begin WordApplication1.Connect; WordApplication1.Visible:=True; NomFichier:='d:\essai.doc'; DocWord:=WordApplication1.Documents.Open(NomFichier,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam); Param1:=0; MaZone:=DocWord.Range(Param1,Param1); Param1:='UnMot'; Param2:=False; Param3:=True; Param4:=wdFindStop; Param5:=wdCharacter; Param6:=1; // ! with MaZone.Find do // begin while Execute(Param1,Param2,Param2,Param2,Param2, Param2,Param3,Param4,emptyparam,emptyparam,emptyparam)=true do begin; MaRecherche:= Parent as Range; MaRecherche.Font.colorindex:=5; end; end; end;Allerdings finde ich bisher keine Hilfe, um den folgenden Ausdruck zu übersetzen:
with MaZone.Find doGruß
Leo
-
Hallo
das ist ein Konstrukt, das nicht in C++ so übernommen werden kann.
Das heißt das du das ausschreiben must :MaZone->Find->Execute(...bis bald
akari
-
Hi,
ich bekomme leider nur Zugriffsverletzungen in der Execute-Zeile. Die Anzahl der übergebenen Parameter scheint nicht zu stimmen. Sonderbar: in fast jedem Beispiel, das ich dazu finde, ist die Anzahl unterschiedlich.
Akari, in einem anderen Thread (http://www.c-plusplus.net/forum/viewtopic-var-t-is-111207-and-highlight-is-wordapplication.html)
schreibst Du:... wenn Du unbedingt den Ole-Server benutzen möchtest, ...
Wie sähe denn eine andere Möglichkeit aus?
Gruß
Leo
-
Hallo
ich hab so ein Find->Execute in meinen Programm erfolgreich verwendet
WordApp->Selection->Find->Execute( OleVariant(StringToOleStr(<AnsiString-Wert>)), // FindText : Der zu suchende Text OleVariant(true), // MatchCase : ob Groß/Kleinschreibung beachtet werden soll OleVariant(false), // MatchWholeWord : ob nur nach ganzen Worten gesucht werden soll OleVariant(false), // MatchWildcards : ob ein Suchoperator verwendet werden soll OleVariant(false), // MatchSoundsLike : ob nach ähnlich lautenden Worten gesucht werden soll OleVariant(false), // MatchAllWordForms : ob alle Formen des Suchtextes gesucht werden soll OleVariant(true), // Forward : ob vorwärts gesucht werden soll OleVariant(wdFindContinue), // Wrap : Verhalten bei Erreichen des Suchbereichs-Endes // wdFindAsk : Abfrage, ob Suche im restlichen Dokument fortgesetzt werden soll // wdFindContinue : automatisch Suche fortsetzen // wdFindStop : Suche beenden OleVariant(false), // Format : ob nach einer Formatierung gesucht werden soll OleVariant(StringToOleStr("")), // ReplaceWith : der einzusetzende Text OleVariant(wdReplaceOne), // Replace : gibt die Anzahl der Ersetzungen an // wdReplaceAll : alle Fundstellen ersetzen // wdReplaceNone : keine ersetzen // wdReplaceOne : die erste Fundstelle ersetzen OleVariant(false), // MatchKashida : ob in einem arabischen Text nach übereinstimmenden Kashidas gesucht werden soll OleVariant(false), // MatchDiacritics : ob in einen Text mit Schreibrichtung rechts nach links nach diakritische Zeichen gesucht werden soll OleVariant(false), // MatchAlefHamza : ob in einem arabischen Text nach übereinstimmenden Alef Hamzas gesucht werden soll OleVariant(false)); // MatchControl : ob in einen Text mit Schreibrichtung rechts nach links und mit übereinstimmenden bidirektionalen Steuerzeichen gesucht werden sollWie sähe denn eine andere Möglichkeit aus?
Kein Word und kein OLE-Server verwenden. Ich bin erstmal auf RTF umgestiegen, und hab ein entsprechendes externes Control zugelegt.
Aber auch XML/HTML ist ein Blick wert,bis bald
akari
-
Danke für Deinen Beispielcode, aber ich bekomme nach wie vor ein Zugriffsverletzung in folgender Zeile:
WordApp->Selection->Find->Execute( OleVariant(StringToOleStr("Müller")), // FindText : Der zu suchende (...)Ne Idee?
Gruß
Leo
-
Hallo
kann an dem Umlaut liegen... ansonsten weiß ich auch nicht weiter. Das ist der Grund warum ich die OLE-Server sein gelassen hab...
bis bald
akari