Announcement

Collapse
No announcement yet.

wie öffnet man von delphi aus ein bestehendes word dokument

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

  • wie öffnet man von delphi aus ein bestehendes word dokument

    wie öffnet man von delphi aus ein bestehendes word document?
    mein versuch:
    <PRE>
    uses comobj

    var wordap: variant; <BR>
    procedure TForm1.Button1Click(Sender: TObject);<BR>
    begin <BR>
    wordap := CreateOleObject('Word.Application');<BR>
    wordap.visible:=true;<BR>
    wordap.documents.open[filename:='Test.doc'];<BR>
    end;<BR>
    </PRE>
    - dies ergibt den fehler ole exception open it keine eigenschaft.
    - in visual basic ist aber open eine methode von documents und dieses öffnungsverfahren funktiontioniert

    - eine bestehende excel tabelle konnte ich mit demselben verfahren öffnen:
    <PRE>
    var excel:variant

    excel := CreateOleObject('Excel.Application');
    excel.Visible := true;
    excel.workbooks.open[filename:='Test.xls'];
    </PRE>
    _ das funktioniert

  • #2
    Hallo,

    mit welcher Delphi-Version wird gearbeitet? Mit Delphi 5/6 geht es am bequemsten mit den VCL-Wrapperkomponenten von der Palettenseite <i>Servers</i> (TWordApplication + TWordDocument):
    <pre>
    const
    cDOC1PATH = 'C:\Ablage\Test.doc';

    procedure TForm1.Button1Click(Sender: TObject);
    var
    vParam : OleVariant;
    FPara : Paragraph; // Paragraph-Objekt von Word 2000
    FRange : Range; // Range-Objekt von Word 2000
    begin
    WordApplication1.Connect;
    try
    vParam := cDOC1PATH;
    WordApplication1.Documents.OpenOld(vParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam, EmptyParam);
    WordDocument1.ConnectTo(WordApplication1.ActiveDoc ument);
    FPara := WordDocument1.Paragraphs.Item(3);
    FRange := FPara.Range.Words.Item(2);
    FRange.Bold := 1;
    WordApplication1.Visible := True;
    ShowMessage('Fertig');
    vParam := False;
    WordDocument1.Close(vParam);
    WordDocument1.Disconnect;
    finally
    WordApplication1.Disconnect;
    end;
    end;
    </pre>
    Ansonsten stehen die Alternativen "Frühe Bindung" über das Dual-Interface oder "Späte Bindung" über IDispatch zur Verfügung. Ein Beispiel für die späte Bindung könnte so aussehen:
    <pre>
    uses ActiveX, ComObj;

    const
    cDOC1PATH = 'C:\Ablage\Test.doc';

    procedure TForm1.Button1Click(Sender: TObject);
    var
    vWord : OleVariant;
    vPara : OleVariant;
    begin
    vWord := CreateOleObject('Word.Application');
    vWord.Visible := True;
    vWord.Documents.Open(FileName := cDOC1PATH);
    vPara := vWord.Documents.Item(1).Paragraphs.Item(3);
    vPara.Range.Words.Item(2).Bold := True;
    ShowMessage('Fertig');
    vWord.Quit(False);
    end;
    </pre>
    Hinter <b>Open</b> verbirgt sich eine Methode, so dass Delphi runde Klammern erwartet.
    &#10

    Comment


    • #3
      Hallo Martin,

      Dein Problem liegt an der eckigen Klammer. Du mußt die <b>Methode</b> open (zumindest bei word) folgendermaßen aufrufen:

      wordap.documents.open(filename:='Test.doc');

      Dann klappt's. Viele Grüße Hans-Pete

      Comment


      • #4
        Ups, sorry Andreas, habe übersehen, daß Du das schon gesagt has

        Comment


        • #5
          Vielen Dank Andreas und Hans-Peter, mit runden Klammern geht es tatsächlich.
          Da ich bei Excel mit eckigen Klammern erfolgreich war versuchte ich bei word nicht mit runden. Nun stellte ich fest bei Excel geht es mit runden und eckigen, bei word nur mit runden

          Comment


          • #6
            Hallo,

            &gt;Nun stellte ich fest bei Excel geht es mit runden und eckigen, bei word nur mit runden.

            das ist der Beweis dafür, dass bei Microsoft für Word und Excel unterschiedliche Entwickler-Teams zuständig sind :-

            Comment

            Working...
            X