![]() |
Zugriffe auf MS Word
Guten Tag,
ich habe angefangen, mich mit den Zugriffen auf MS Word zu beschäftigen, komme aber nicht zurecht, weil mir Quellen zu diesem Thema ganz unterschiedliche Informationen bieten. Es fängt schon beim Zugriff an. Im Buch Borland Delphi 7 habe ich diesen Zugriff gefunden:
Delphi-Quellcode:
Bei Delphi-Treff steht nun etwas (komplett) anderes unter der Verwendung von TWordApplication:
uses comobj;
{$R *.DFM} var word: variant; procedure TForm1.Button1Click(Sender: TObject); begin word := CreateOleObject('Word.Application'); word.visible := True; word.Documents.Open(FileName:= ExtractFilePath(Paramstr(0)) + 'name.doc'); end
Delphi-Quellcode:
Es ist doch gleichtültig, welche Variante ich verwende, oder übersehe ich etwas?
procedure TForm1.FormCreate(Sender: TObject);
begin WordApplication:=TWordApplication.create; end; procedure TForm1.Button1Click(Sender: TObject); begin if assigned(WordApplication) then begin WordApplication.Connect; WordApplication.Visible:=true; end; end; Und wie funktioniert es, dass ich ein ganz neues Dokument mit Delphi erstellen kann? Ich habe schon so mit der TWordDocument-Komponente versucht:
Delphi-Quellcode:
Und drittens: Wie funktioniert es mit dem Zugriff auf ActiveX-Steuerelemente wie der TextBox (Edit) etc.? In Borland Delphi 7 wurde es mit "Formulare aus der Vorversion" realisiert (Aber dort fine ich keine TextBoxen...), wie es in MS Word heißt:
Dokument: TWordDocument; //Öffentliche Deklarationen
Word: TWordApplication ... Dokument := TWordDocument.Create(Self) //Erstellen im OnCreate-Ereignis ... //Beim Klicken auf einen Button Dokument.Connect; Word.NewDocument; Word.NextLetter
Delphi-Quellcode:
So klappt der Zugriff auf die ActiveX-Steuerelemente allerdings nicht, es treten immer Laufzeitfehler auf.
word.ActiveDocument.FormFields.Item('Text1').Result := edit1.text;
Ich wäre schon dankbar, wenn eine Verlinkung zu einem sehr vollständigen Tutorial gepostet würde. mfg. |
Re: Zugriffe auf MS Word
Das erste Beispiel ist späte Bindung. Die Verbindung wird erst zur Laufzeit geprüft. Der Compiler kennt das OLE-Interface nicht.
Das 2. frühe Bindung. Der Compiler kennt das Interface der COM-Objekte und kann Prüfungen auf Korrektheit durchführen |
Re: Zugriffe auf MS Word
Zitat:
Das mit dem neuen Dokument hat auch funktioniert, einfach Anweisung:
Delphi-Quellcode:
Wie genau kann ich das Öffnen einer Datei realisieren? Ich habe versucht, die Funktion Word.Documents.Open zu verwenden, bin aber nicht weit gekommen, weil ich nicht weiß, wie ich den ersten Parameter vom Typ OleVariant füllen soll - mit einem Dateinamen vom Typ String leider nicht.
Word.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam)
Bei dem Zugriff auf die ActiveX-Elemente bin ich auch noch nicht weitergekommen und eine Frage hat sich noch ergeben: Wenn ich im OnCreate-Ereignis die Variable Word vom Typ TWordApplication mit Word := TWordApplication.Create(Self) erstelle, muss ich dann nicht Word nicht auch wieder mit Word.Free freigeben? mfg. |
Re: Zugriffe auf MS Word
Der COM-Klasse ist es egal welche Form der Bindung du wählst. Die Bedeutung der Parameter kannst du ihnder VBA-Hilfe zu Word nachschlagen oder halt in TWordApplication, wobei die 2. für eine bestimmte Word-Version zugeschnitten sind.
|
Re: Zugriffe auf MS Word
Zitat:
edit: Den String musst Du natürlich einer Variablen vom Typ olevariant zuweisen und die übergeben. |
Re: Zugriffe auf MS Word
Zitat:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var s: String; begin try if OpenDialog.Execute then s := OpenDialog.FileName; Word.Documents.Open(s) //Hier steckt der Fehler?! Ungültige Parameterliste? except Application.MessageBox('Fehler beim Laden der Datei aufgetreten', 'Achtung', 48) end end; |
Re: Zugriffe auf MS Word
Versuch es mal so...
Zitat:
|
Re: Zugriffe auf MS Word
Danke, omata, ich musste nur noch ein paar Parameter bei der Zeile, die das Dokument öffnet, hinzufügen:
Delphi-Quellcode:
Was ist jetzt aber mit Free und den ActiveX-Steuerelementen?
Word.Documents.Open(s, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam)
|
Re: Zugriffe auf MS Word
Bevor Du Dein Programm schliesst, musst Du alle Objekte, die Du dynamisch (z.B. mit Create) erstellt hast, wieder freigeben.
Bez. des active X Codes, der Probleme macht: mir ist nicht ganz klar, was Du damit erreichen willst. Direkte Zuweisungen an COM Objekte gehen glaub ich überhaupt nicht, Daten müssen generell mittels Parametern vom Typ oleParam übergeben werden. |
Re: Zugriffe auf MS Word
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
So weit so gut: auf die "Formulare aus der Vorversion" kann ich zugreifen mit folgendem Code:
Delphi-Quellcode:
Das Problem ist, dass bei diesem Formularen aus der Vorversion z.B. kein Editierfeld dabei ist, dafür aber bei den ActiveX-Elementen, ich habe es im Bild im Anhang markiert. Nun habe ich im "Objektinspektor" von VBA die Name-Eigenschaft geändert und versucht, mit der oben genannten Funktion auf das AcitveX-Steuerelement zuzugreifen, das hat aber nicht funktioniert.
s := 'Text';
WordDoc.ActiveDocument.FormFields.Item(s).Result := Edit.Text; Wie muss der Code lauten? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 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 by Thomas Breitkreuz