Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   MS Word mit Delphi öffnen (https://www.delphipraxis.net/129090-ms-word-mit-delphi-oeffnen.html)

Ykcim 12. Feb 2009 14:30


MS Word mit Delphi öffnen
 
Hallo Zusammen,

mit folgendem Code versuche ich Word zu öffnen:
Delphi-Quellcode: markieren
Delphi-Quellcode:
procedure TForm1.DatenClick(Sender: TObject);
begin
 
      if assigned(WordApplication1) then
        begin
          WordApplication1.Connect;
          WordApplication1.Visible:=true;
        end;
end;



Ich bekomme aber immer die Fehlermeldung: "Interfaces nicht unterstützt".

Kann mir jemand sagen, was ich da falsch mache.

Habe unter TurboDelphi 2006 die Komponente WordApplication und WordDocument auf das Form "gezogen"

Vielen Dank im Voraus

Ykcim

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

Ykcim 12. Feb 2009 14:58

Re: MS Word mit Delphi öffnen
 
Sorry, mein Browser hatte sich aufgehängt, und ich dachte, dass das Thema nicht eingestellt worden war!

Sorry! :oops:

mkinzler 12. Feb 2009 14:59

Re: MS Word mit Delphi öffnen
 
Kein Problem :-D

mirage228 12. Feb 2009 15:32

Re: MS Word mit Delphi öffnen
 
Hast Du Word auf dem Rechner installiert? Wenn ja, welche Version? Und welche Office-Version hast Du bei der Installation von Turbo Delphi ausgesucht (Könnte ja sein, dass das installierte Interface "neuer" ist und Dein Word älter...) ?

Viele Grüße

Ykcim 13. Feb 2009 10:57

Re: MS Word mit Delphi öffnen
 
Hallo,

ich haba Office 2003 installiert und muss gestehen, dass ich nicht mehr weiß,
welche Version ich bei der Installation von TurboDelphi 2006 verwendet habe... Ich werde mal suchen, ob ich etwas finde.
Hast Du eine Idee, wo ich suchen muss?

Danke
Ykcim

Ykcim 13. Feb 2009 11:06

Re: MS Word mit Delphi öffnen
 
Hallo,

Ich scheine Office xp angegeben zu haben.
Wie kann ich das auf Office 2003 ändern?

Ykcim

mkinzler 13. Feb 2009 11:08

Re: MS Word mit Delphi öffnen
 
Brauchst du nicht, die COM-Api ist (bzw. wahr bis O2k7) abwärtskompatibel.
Für O2k3 gibt es keinen spezifischen Wrapper von CG

Ykcim 13. Feb 2009 11:12

Re: MS Word mit Delphi öffnen
 
Aber ich habe immernoch die Fehlermeldung... Ich habe gerade mal die noch zur Auswahl stehende Office 2000 Version verwendet - ohne Erfolg.

Hat irgendwer eine Idee, wie ich Word über Delphi geöffnet bekomme?

Vielen Dank im Voraus

Ykcim

nahpets 13. Feb 2009 11:39

Re: MS Word mit Delphi öffnen
 
Hallo,

eigentlich bin ich der Meinung, dass Dein Wordaufruf korrekt ist.
Vor längerer Zeit hatte ich da auch mal mit Problemen zu kämpfen.

Der folgende Quelltext ist daraus entnommen, eventuell hilft er Dir als Denkanstoß. Seinerzeit wurde der Zugriff auf Word nicht über die Komponenten gemacht, sondern über CreateOLEObject bzw. GetActiveOleObject, wenn schon eine Instanz von Word lief.

Der Quelltext ist mit Sicherheit nicht in einem verwendbaren Zustand.
Delphi-Quellcode:
// Eventuell Felder aktuallisieren im Optionendialog.Drucken von Word ausschalten,
// sonst kann es passieren, dass den Anwendern beim Drucken Daten verloren gehen.
// Den Schalter Feldfunktionen Optionendialog.Ansicht ausschalten, sonst sieht
// man den Inhalt der Felder nicht.

// WordBool -> True und False werden durch WordBool(1) und WordBool(0) dargestellt.

unit WordSchnittstelle;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleServer, Grids, ValEdit, ExtCtrls, IniFiles,
  ActnList, ComObj, ActiveX;

type
  TfmWordSchnittstelle = class(TForm)
    pnMain: TPanel;
    pnTop: TPanel;
    btnWordStarten: TButton;
    btnWordBeenden: TButton;
    vleWordVorlagen: TValueListEditor;
    odVorlagen: TOpenDialog;
    procedure btnWordStartenClick(Sender: TObject);
    procedure btnWordBeendenClick(Sender: TObject);
    function WordStarten(sTemplate : String) : Boolean;
    procedure WordBeenden;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    function CreateWord : Boolean;
  private
    { Private-Deklarationen }
    CanClose     : Boolean;
    sCaption     : String;
    sCaptionTemp : String;
  public
    { Public-Deklarationen }
    FVisible: Boolean;

    FWord: Variant;
    FWordCreated: Boolean;
    FWordDoc : Variant;
  end;

var
  fmWordSchnittstelle: TfmWordSchnittstelle;

implementation

{$R *.dfm}

function tfmWordSchnittstelle.CreateWord : Boolean;
begin
  FWordCreated := False;
  Try
    FWord       := GetActiveOleObject('Word.Application');
    FWordCreated := True;
  Except
    on e : Exception Do Begin
      // MessageDlg(e.Message + #13 + 'Word.Application not Active',mtError,[mbok],0);
      FWordCreated := False;
    End;
  End;
  If Not FWordCreated Then Begin
    try
      FWord       := CreateOLEObject('Word.Application');
      FWordCreated := True;
    except
      on e : Exception Do Begin
        // MessageDlg(e.Message,mtError,[mbok],0);
        FWordCreated := False;
      End;
    End;
  End;
  FWord.Visible := True;
  If FWordCreated Then Begin
    Try
      FWordDoc    := CreateOleObject('Word.Document');
      FWordDoc.Activate;
      FWordCreated := True;
    Except
      on e : Exception Do Begin
        MessageDlg('Der Aufruf von Word ist fehlgeschlagen.' + #13
        + 'Ursache: ' + e.Message,mtError,[mbok],0);
        FWordCreated := False;
      End;
    End;
  End;
  Result := FWordCreated;
End;

function TfmWordSchnittstelle.WordStarten(sTemplate : String) : Boolean;
Var
          ovTemplate : OleVariant;
          ovVisible : OleVariant;
          sError    : String;

Begin
  Result := False;
  ovVisible := WordBool(0);
  odVorlagen.Title := 'Bitte Serienbriefvorlage auswählen.';
  If CreateWord Then Begin
    If Trim(sTemplate) <> '' Then Begin // wurde uns gesagt, welche Vorlage?
      ovTemplate := vleWordVorlagen.Values[sTemplate];
      Try // diese öffnen
        FWordDoc := FWord.Documents.Add(ovTemplate,WordBool(0),EmptyParam, EmptyParam);
        Result := True;
      Except
        on e : Exception Do Begin
          MessageDlg('Falsche WinWord-Version.' + #13 + e.Message,mtError,[mbok],0);
          FWord       := UnAssigned;
        End;
      End;
    End Else If odVorlagen.Execute Then Begin // es wurde nicht gesagt, welche Vorlage,
      ovTemplate := odVorlagen.FileName; // über Dialog Vorlage auswählen lassen.
      Try
        FWordDoc := FWord.Documents.Add(ovTemplate,WordBool(0),EmptyParam, EmptyParam);
        Result := True;
      Except
        on e : Exception Do Begin
          MessageDlg('Falsche WinWord-Version.' + #13 + e.Message,mtError,[mbok],0);
          FWord       := UnAssigned;
        End;
      End;
    End Else Begin
      sError := 'Fehlerhafter Aufruf der Wordschnittstelle.';
      MessageDlg(sError,mtInformation,[mbOk],0);
    End;
  End Else Begin
    MessageDlg('Word konnte nicht gestartet werden',mtError,[mbok],0);
  End;
End;

procedure TfmWordSchnittstelle.WordBeenden;
Begin
  FWordDoc.Activate;
  FWord.Activate;
  FWordDoc := Unassigned;
  FWord := Unassigned;
End;

procedure TfmWordSchnittstelle.btnWordStartenClick(Sender: TObject);
Var
          sTemplate : String;
begin
  sTemplate := vleWordVorlagen.Cells[0,vleWordvorlagen.Row];
  WordStarten(sTemplate);
end;

procedure TfmWordSchnittstelle.btnWordBeendenClick(Sender: TObject);
begin
  WordBeenden;
end;

procedure TfmWordSchnittstelle.FormCreate(Sender: TObject);
Var
          iniVorlagen : tIniFile;
begin
  CanClose     := True;
  sCaption     := Caption;
  sCaptionTemp := Caption;
  iniVorlagen  := tIniFile.Create(Application.ExeName + '.ini');
  iniVorlagen.ReadSectionValues('WORDVORLAGEN',vleWordVorlagen.Strings);
  iniVorlagen.Free;
  vleWordVorlagen.Col := 1;
  vleWordVorlagen.Row := 1;
end;

procedure TfmWordSchnittstelle.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  If CanClose Then Begin
    Action := caHide;
  End Else Begin
    Action := caNone;
  End;
end;

procedure TfmWordSchnittstelle.FormShow(Sender: TObject);
begin
  CanClose := True;
end;

procedure TfmWordSchnittstelle.FormKeyPress(Sender: TObject; var Key: Char);
begin
  Case Key Of
    #32..#255 : Begin
                  Caption := sCaptionTemp + ' *';
                End;
  End;
end;

end.

Ykcim 13. Feb 2009 11:43

Re: MS Word mit Delphi öffnen
 
Vielen Dank für die Antwort,

ich werde sie am WE mal versuchen für mich umzusetzen...

Ykcim

Ykcim 25. Feb 2009 19:12

Re: MS Word mit Delphi öffnen
 
Hallo Zusammen,

irgendwie bekomme ich es einfach nicht hin. Ich habe es nicht geschafft, aus dem Code von nahpets eine Lösung zu generieren. Ich glaube auch nicht, dass es an Delphi liegt, denn ich kann das auf meinem Rechner complierte Programm auf einem anderen Rechner problemlos laufen lassen. Ich habe Office 2003 SP3.

Ich bekomme auf meinem Rechner immernoch die Fehlermeldung "Interface nicht unterstützt". Hat jemand eine Idee, woran das liegen könnte? bin wirklich aufgeschmissen....

Dank
Ykcim

Ykcim 25. Feb 2009 19:36

Re: MS Word mit Delphi öffnen
 
Ich habe wirklich schon zuvor viel gesucht... Aber mit ein paar anderen Begriffen bin ich jetzt auf diese Seite gekommen, wo ich meine Lösung gefunden habe...

Trotzdem vielen Dank

Ykcim

Chemiker 25. Feb 2009 19:42

Re: MS Word mit Delphi öffnen
 
Hallo Ykcim,

bei Delphi wird ein Demo mitgeliefert für Word.

Der Path ist: C:\Programme\Borland\BDS\4.0\Demos\DelphiWin32\VCL Win32\ActiveX\OleAuto


Bis bald Chemiker

Ykcim 26. Feb 2009 20:43

Re: MS Word mit Delphi öffnen
 
Hallo Chemiker,

Danke, dass habe ich nicht gewusst. Aber selbst bei dem Beispiel bekomme ich die Fehlermeldung "Interface nicht unterstützt"...

Ich habe zwar jetzt eine Lösung gefunden (eine sehr antiquierte und umständliche) aber wenn jemand eine Idee hat, warum nur dieser Rechner dieses Theater macht, wäre ich wirklich dankbar...

Gruß

Ykcim

nahpets 27. Feb 2009 09:34

Re: MS Word mit Delphi öffnen
 
Hallo,

wenn ich das hier richtig verfolgt habe, so hast Du mit Deinem Programm und Word nur auf Deinem Rechner Probleme, Dein Programm funktioniert auf anderen Rechnern mit Word?

Welche Betriebssystemversionen, Wordversionen... sind auf den entsprechenden Rechnern?

Mein Verdacht wäre bei der Beschreibung:

Word hat auf Deinem Rechner irgendeinen Hau abbekommen.

Ist das irgendeine Registrierung kaputtgegangen?
Word mal neu installiert?
Oder sind auf Deinem Rechner irgendwelche Sachen aus dem Officepaket drauf, die auf den anderen Rechnern fehlen?
Quasi irgendwas kaputtaktualisiert?
Fehlt auf Deinem Rechner eventuell irgendeine Typelib, die auf den anderen Rechnern verfügbar ist?

Frag' mal bei Google nach.[google]"Interface nicht unterstützt"[/google]


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz