Announcement

Collapse
No announcement yet.

Suchen und Ersetzen über OLE

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Suchen und Ersetzen über OLE

    Wie kann ich in einem Worddokument am besten suchen und ersetzen? Die Kopfzeile, Fusszeile und Textfelder sollen auch durchsucht und ersetzt werden!

    Ciau

    David Wenzlow

  • #2
    Hallo,

    das folgende Beispiel demonstriert diesen Weg:
    <pre>
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, WordXP, OleServer, StdCtrls;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    WordApplication1: TWordApplication;
    procedure Button1Click(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    vFileName : OleVariant;
    vFindText : OleVariant;
    vNewText : OleVariant;
    vReplace : OleVariant;
    vForward : OleVariant;
    vWrap : OleVariant;
    vFalse : OleVariant;
    vSave : OleVariant;
    begin
    vFileName := 'C:\Temp\ReplaceTest.doc';
    WordApplication1.Connect;
    // Schritt 1: vorhandene DOC-Datei mit Word XP öffnen
    WordApplication1.Documents.OpenOld(vFileName, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam,
    EmptyParam);
    WordApplication1.Visible := True;
    // Schritt 2: Suchen&Ersetzen im Text
    WordApplication1.Selection.Find.ClearFormatting;
    WordApplication1.Selection.Find.Replacement.ClearF ormatting;
    vFindText := 'TestNeu';
    vNewText := 'NeuerText';
    vForward := True;
    vWrap := wdFindContinue;
    vReplace := wdReplaceAll;
    vFalse := False;
    WordApplication1.Selection.Find.ExecuteOld(vFindTe xt, vFalse, vFalse,
    vFalse, vFalse, vFalse, vForward, vWrap, vFalse,
    vNewText, vReplace);
    // Schritt 3: Suchen&Ersetzen in der Kopfzeile
    WordApplication1.ActiveWindow.ActivePane.View.Seek View := wdSeekCurrentPageHeader;
    WordApplication1.Selection.Find.ExecuteOld(vFindTe xt, vFalse, vFalse,
    vFalse, vFalse, vFalse, vForward, vWrap, vFalse,
    vNewText, vReplace);
    // Schritt 4: Aufräumen
    WordApplication1.ActiveWindow.ActivePane.View.Seek View := wdSeekMainDocument;
    ShowMessage('Test');
    vSave := False;
    WordApplication1.Documents.Close(vSave, EmptyParam, EmptyParam);
    WordApplication1.Disconnect;
    end;

    end.
    </pre&gt

    Comment


    • #3
      Hallo. Leider erhalte ich bei diesem Quelltext einen OLE-Fehler (EOleException C0000005). Dieser setzt bei der Zeile WordApplication1.Selection.Find.Replacement.ClearF ormatting; an. Was ist falsch

      Comment


      • #4
        Ich habe jetzt die 2 Zeilen auskommentiert.

        //WordApplication1.Selection.Find.ClearFormatting;
        //WordApplication1.Selection.Find.Replacement.ClearF ormatting;

        Das suchen und ersetzen funktioniert jedoch nicht. Er macht zwar irgendetwas (das Dokument flimmert kurz), aber er ersetzt nichts, obwohl der Text vorkommt!

        vFindText := 'Test';
        vNewText := 'Ersatz'

        Comment


        • #5
          Hallo,

          &gt;..einen OLE-Fehler (EOleException C0000005).

          Diese Fehlernummer steht für den Fehlertext "<i>Reading or writing to an inaccessible memory location</i>". Eine derartige Fehlermeldung kann zum Beispiel entstehen, wenn die TLB-Unit (die importierte Typbibliothek) nicht zu der zur Laufzeit vorgefundenen Word-Version passt. Mit welcher Word-Version tritt das Problem auf

          Comment


          • #6
            Hallo. Ich nutze Word 2003 mit Delphi 7 (WordXP-VCL). Ich habe ja die 2 Zeilen mit dem ClearFormatting auskommentiert und nun läuft es ohne Fehler, jedoch auch ohne Ergebnis. ClearFormatting ist doch nicht so wichtig oder

            Comment


            • #7
              Funktioniert bei Ihnen die Ersetzung, wenn Sie den Code ohne ClearFormatting ausführen

              Comment


              • #8
                auch bei word 97 mit windows 98 se tritt der OLE- Fehler auf

                Comment

                Working...
                X