AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffe auf MS Word

Ein Thema von Mysterio08 · begonnen am 16. Mai 2010 · letzter Beitrag vom 22. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#1

Zugriffe auf MS Word

  Alt 16. Mai 2010, 13:09
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:
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
Bei Delphi-Treff steht nun etwas (komplett) anderes unter der Verwendung von TWordApplication:
Delphi-Quellcode:
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;
Es ist doch gleichtültig, welche Variante ich verwende, oder übersehe ich etwas?

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:
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
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:
word.ActiveDocument.FormFields.Item('Text1').Result := edit1.text; So klappt der Zugriff auf die ActiveX-Steuerelemente allerdings nicht, es treten immer Laufzeitfehler auf.

Ich wäre schon dankbar, wenn eine Verlinkung zu einem sehr vollständigen Tutorial gepostet würde.

mfg.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zugriffe auf MS Word

  Alt 16. Mai 2010, 15:33
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
Markus Kinzler
  Mit Zitat antworten Zitat
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#3

Re: Zugriffe auf MS Word

  Alt 16. Mai 2010, 16:59
Zitat von mkinzler:
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
Das hört sich für mich nicht nach einem signifikanten Unterschied an, es ist also nur wichtig zu wissen, wann die Zugriffe geschehen (wenn ich das so richtig verstanden habe).

Das mit dem neuen Dokument hat auch funktioniert, einfach Anweisung:
Word.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam) 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.

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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Zugriffe auf MS Word

  Alt 16. Mai 2010, 17:41
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.
Markus Kinzler
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#5

Re: Zugriffe auf MS Word

  Alt 16. Mai 2010, 18:09
Zitat:
mit einem Dateinamen vom Typ String leider nicht.
Warum nicht? Wo ist das Problem? Wenn es nicht funktioniert, dürfte es nicht daran liegen.

edit: Den String musst Du natürlich einer Variablen vom Typ olevariant zuweisen und die übergeben.
  Mit Zitat antworten Zitat
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#6

Re: Zugriffe auf MS Word

  Alt 16. Mai 2010, 18:33
Zitat von idefix2:
Zitat:
mit einem Dateinamen vom Typ String leider nicht.
Warum nicht? Wo ist das Problem? Wenn es nicht funktioniert, dürfte es nicht daran liegen.

edit: Den String musst Du natürlich einer Variablen vom Typ olevariant zuweisen und die übergeben.
Bei folgendem Code kreidet mir der Compiler die gekennzeichnete Zeile wie folgt an an: [DCC Fehler] Word_u.pas(66): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen:
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;
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Zugriffe auf MS Word

  Alt 16. Mai 2010, 18:47
Versuch es mal so...
Zitat von Mysterio08:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var s: OleVariant;
begin
  try
    if OpenDialog.Execute then
      s := OpenDialog.FileName;
    Word.Documents.Open(s);
  except
    Application.MessageBox('Fehler beim Laden der Datei aufgetreten', 'Achtung', 48);
  end
end;
  Mit Zitat antworten Zitat
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#8

Re: Zugriffe auf MS Word

  Alt 16. Mai 2010, 19:03
Danke, omata, ich musste nur noch ein paar Parameter bei der Zeile, die das Dokument öffnet, hinzufügen:
Word.Documents.Open(s, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam) Was ist jetzt aber mit Free und den ActiveX-Steuerelementen?
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#9

Re: Zugriffe auf MS Word

  Alt 16. Mai 2010, 19:42
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.
  Mit Zitat antworten Zitat
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#10

Re: Zugriffe auf MS Word

  Alt 17. Mai 2010, 06:57
Zitat von idefix2:
Bez. des active X Codes, der Probleme macht: mir ist nicht ganz klar, was Du damit erreichen willst.
Beispielsweise habe ich in der Kopfzeile ein Feld, das ich mit dem aktuellen Datum füllen will, welches von Delphi ermittelt und in einer Variable gespeichert wurde - klar muss ich für diesen Fall nicht extra ein Steuerelement benutzen, aber es ist ja nicht ausgeschlossen.
So weit so gut: auf die "Formulare aus der Vorversion" kann ich zugreifen mit folgendem Code:
Delphi-Quellcode:
s := 'Text';
WordDoc.ActiveDocument.FormFields.Item(s).Result := Edit.Text;
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.

Wie muss der Code lauten?
Miniaturansicht angehängter Grafiken
bild_100.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz