Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Office 2010 und Delphi-7 (https://www.delphipraxis.net/176979-office-2010-und-delphi-7-a.html)

hesch21 8. Okt 2013 13:32

Office 2010 und Delphi-7
 
Hallo zusammen

ich sollte für einen Kunden eine Delphi-7-Applikatiom mit Office-Automation von Office-2003 auf Office-2010 umstellen. Leider kann ich das Programm nicht auf XE migrieren. Da sind derart viele speziell für den Kunden beschaffte Komponenten drin und der will kein Geld für diese Migration aufwerfen.
Eigentlich funktionieren alle Office-Schnittstellen-Funktionen auch unter Office-2010, nur will der Kunde, dass Dokumente direkt als PDF gespeichert werden können. Geht ja mit der neuen Funktion SaveAs2. Nur kennt Delphi7 die von Haus aus nicht. Ich hab deshalb versucht, das Microsoft Office XP Beispiel Wrapper-Komponenten für Automationsserver - Package zu deinstallieren und die Word-Typenbibliothek zu importieren, aber da bekomme ich einen Umwandlungsfehler.
Hat jemand eine Idee, wie ich die Office-2010-Funktionen ins Delphi-7 bekomme?

Bernhard Geyer 8. Okt 2013 13:40

AW: Office 2010 und Delphi-7
 
Für dies eine Funktion würde ich mit OleVariant und später Bindung arbeiten.

Delphi-Quellcode:
var
  myOleVar: OleVariant;

begin
  ...
  myOleVar = myWordDocument;
  myOleVar.SaveAs2(...);
  ...
end;

hesch21 8. Okt 2013 14:39

AW: Office 2010 und Delphi-7
 
Die Idee ist eigentlich schon gut nur ist leider mein Dokument leider kein OLEVariant. Mit dem ist zuvor schon ganz viel passiert, u.a. wurde es mit einer automatisch erstellten CSV-Datei zu einem Seriendruck-Dokument aufbereitet.
Der langen Rede kurzer Sinn:

Beim
myOleVar = myWordDocument;

stehe ich an (auch wenn ich den fehlenden Doppelpunkt einfüge)

Bernhard Geyer 8. Okt 2013 15:00

AW: Office 2010 und Delphi-7
 
Zitat:

Zitat von hesch21 (Beitrag 1231220)
Der langen Rede kurzer Sinn:

Beim
myOleVar = myWordDocument;

stehe ich an (auch wenn ich den fehlenden Doppelpunkt einfüge)

Am Bahnhof oder was? Was für ein Problem hast du genau mit meinen Quellcode?

hesch21 8. Okt 2013 15:15

AW: Office 2010 und Delphi-7
 
Also dämlich bin ich eigentlich nicht!

So wie Du es geschrieben hast:

-> Fehler ':=' erwartet aber '=' gefunden

wenn ich den Doppelpunkt einsetze (also myOleVar := myWordDocument;)

-> Fehler Inkompatible Typen 'OleVariant' und 'TWordDocument'

In etwa das, was ich versucht habe, zu erklären. Nichts da vom Bahnhof.

Morphie 8. Okt 2013 15:20

AW: Office 2010 und Delphi-7
 
Ich glaube aber, dass der Bahnhof nicht sehr weit weg ist...
Delphi-Quellcode:
...

uses
  ComObj;

...



var
  WordApp, WordDoc: OleVariant;
begin
  WordApp := CreateOleObject('Word.Application');
  WordDoc := WordApp.Documents.Add;
  WordDoc.SaveAs2(...);
  WordApp.Quit();

hesch21 9. Okt 2013 08:49

AW: Office 2010 und Delphi-7
 
Habe ja ein dickes Fell !

Lieber Morphie, das funktioniert prächtig! Ich bekomme ein wunderschönes LEERES PDF. Logisch, mit WordDoc := WordApp.Documents.Add; wird ein neues Dokument erstellt und dann gespeichert.
Nun, ich bin auch schon selbst auf die Idee gekommen, das mit einen WordDoc := WordApp.Documents.Open(FileName := FileName); zu ersetzen was sogar funktionieren würde wenn da nicht noch zwei kleine Details wären:
1. Die Datei FileName ist bereits anderweitig über die Wrapper-Funktionen mit Word geöffnet
2. Sie ist zudem mit einer CSV-Datei als Seriendruck-Datei verknüpft und ich will immer nur vom gerade aktuellen Seriendruck-Datensatz eine PDF-Datei erstellen

Ihr dürft mich ja ruhig an den Bahnhof stellen denn ich habe wirklich keine Ahnung von Word-Anbindung über OLE. Habe bisher immer die Delphi-Wrapper-Funktionen benutzt. Deshalb versuche ich seit gestern auch vergebens, die MailMerge-Funktion, also die CSV-Datei einzubinden.

Morphie 9. Okt 2013 08:52

AW: Office 2010 und Delphi-7
 
Zeig doch mal, wie du es bisher gemacht hast... (Code)
Das sollte dann über Ole auch so funktionieren...

hesch21 9. Okt 2013 09:15

AW: Office 2010 und Delphi-7
 
Delphi-Quellcode:

var lSaveDoc   : OleVariant;
var lSaveApp   : OleVariant;
var lSaveMail  : OleVariant;

begin
  lSaveApp := CreateOleObject('Word.Application');
  lSaveDoc := lSaveApp.Documents.Open(FileName := FileName);
  lSaveMail := lSaveDoc.MailMerge.OpenDataSource(NamCSV);
  lSaveDoc.SaveAs2(FileName := DokVerz + '\' + NewFile, FileFormat := 17);
  lSaveApp.Quit;
end;
Das funktioniert, es kommt aber immer eine Meldung, die CSV-Datei sei bereits offen, ob man mit einer Kopie arbeiten wolle. Ausserdem fehlt noch irgendwie die wirkliche Verbindung den abgespeichert wird in der PDF die Vorlage und nicht die Datei mit den Werten aus der CSV-Datei.

Morphie 9. Okt 2013 09:18

AW: Office 2010 und Delphi-7
 
Hast du vielleicht irgendwo im Hintergrund (Taskmanager > Reiter "Prozesse") noch WinWord.exe oder sowas geöffnet?

Bernhard Geyer 9. Okt 2013 09:18

AW: Office 2010 und Delphi-7
 
Zitat:

Zitat von hesch21 (Beitrag 1231230)
Also dämlich bin ich eigentlich nicht!

Das hat keiner Behauptet. Jedoch war dein Post was den deutschen Satzbau betrifft nicht gerade mustergültig und verwirrend (Ok, mach ich auch ab und zu wenn ich schreibe).

Zitat:

Zitat von hesch21 (Beitrag 1231230)
So wie Du es geschrieben hast:

-> Fehler ':=' erwartet aber '=' gefunden

wenn ich den Doppelpunkt einsetze (also myOleVar := myWordDocument;)

-> Fehler Inkompatible Typen 'OleVariant' und 'TWordDocument'

Und solche Informationen wie die genaue Fehlermeldung ist immer sehr hilfreich. Die Glaskugel wollte ich gestern nicht auspacken.

Jetzt mit der Fehlermeldung ist es klar. Ich bin direkt von von COM-Interfaces ausgegangen und nicht von den Delphi-Wrappern.

Delphi-Quellcode:
myOleVar := myWordDocument.DefaultInterface;
(und wieder nicht gegenüber den Compiler geprüft).

hesch21 9. Okt 2013 10:27

AW: Office 2010 und Delphi-7
 
ja, WINWORD war natürlich noch offen. Hatte ich ja erwähnt. Von der Wrapper-Instanz her. Jetzt habe ich aber die Applikation mit einigen Klimmzügen so umgestellt, dass diese Word-Instanz abgeschlossen ist, wenn diese Funktion gestartet wird. Und jetzt bin ich wieder eine Schneemeile weiter.
Jetzt habe ich nur noch zwei Probleme:
1. Das Kleinere ist eine Meldung, ob man die Änderungen am Dokument speichern wolle oder nicht. Da die Änderungen nie gespeichert werden müssen, braucht es noch irgendwo ein wdDoNotSaveChanges.

2. Das grössere Problem ist die Verbindung zwischen 'Grunddatei' und 'MailMerge-Datei' und die Positionierung auf den richtigen Datensatz in der Mailmerge-Datei. Vorderhand wird mir die PDF-Datei immer noch mit den Merge-Feldern anstelle der Datenfeldern erstellt.

Morphie 9. Okt 2013 10:34

AW: Office 2010 und Delphi-7
 
Da du jetzt weißt, wie man aus Delphi heraus Word ansprechen kann, sollte dir ab jetzt das MSDN weiterhelfen
http://msdn.microsoft.com/en-us/libr...ffice.14).aspx

Dort findest du alles, was du brauchst.

baumina 9. Okt 2013 10:35

AW: Office 2010 und Delphi-7
 
Starte ein Makro im Word, das dir alles aufzeichnen soll, was du machen musst, um die richtige Anzeige zu bekommen. Danach musst du nur noch das aufgezeichnete Makro im Delphi umsetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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