Word Ole -> Speicherpfad ändern

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Flenser
Beiträge: 24
Registriert: Di 28. Okt 2014, 12:49

Word Ole -> Speicherpfad ändern

Beitrag von Flenser »

Ich versuche gerade für eine Doc-Datei, die von meinem Programm aus einer Dokumentenvorlage erstellt wurde, den Speicherpfad zu ändern, der beim
"Speichern unter" von Word angeboten wird.
Standardmäßig wird ja der Pfad angeboten, der bei den Word-Eigenschaften eingestellt ist.

Der Code

Code: Alles auswählen

 
varDokument := varWdApp.Documents.path('\\Pfad\');   
 

funktioniert leider nicht, weil die path-Eigenschaft des Documents schreibgeschützt ist.

Da die erstellten Dokumente jedesmal in einem anderen Pfad gespeichert werden, bringt es nichts den Standard-Speicherpfad in Word zu ändern. Ich möchte
die Dokumente aber auch nicht einmal automatisch speichern, weil vor dem Speichern noch etwas an den Dokumenten in Word gemacht wird.

Für Ideen oder Vorschläge wäre ich dankbar...

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Word Ole -> Speicherpfad ändern

Beitrag von MacWomble »

Wird das was in Word noch gemacht wird, automatisch gemacht?

Generell halte ich es nicht für sinnig, Word fest einzubinden. besser ist es, über das Aufrufen des gespeicherten Dokuments die Standardanwendung starten zu lassen. Also nicht Word starten, sondern das Dokument - und wo das liegt, ist dir ja bekannt.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Word Ole -> Speicherpfad ändern

Beitrag von braunbär »

Er spricht von einer Dokumentvorlage. Die liegt in einem eigenen Ordner, und wenn die Vorlage gestartet wird, dann macht Word daraus ein neues Dokument.
Dass er das erst begonenne Dokument vor der (manuellen) Bearbeitung noch nicht im richtigen Ordner speichern wil, damit es nachher im richtigen Ordner abgelegt wird, kann ich auch nachvollziehen, denn wenn der ganze Vorgang irgenwie abgebrchen wird, dann bleibt ihm ein dort eine halbfertige Datei übrig.

Ich hatte einmal vor Langem wit Word Automation zu tun, um den Output von Dos-Programmen mit Hilfe von Word Vorlagen "aufzuhübschen", das Programm hat das aus der Vorlage erstellte Dokument dann gedruckt, gefaxt (so lange ist das schon her :D ) und gemailt, aber es musste nicht gespeichert werden. Deshalb war ich mit der Frage nie konfrontiert. Und die Dokumentation der Word API hat mich damals auch zur Verzweiflung gebracht.
Zuletzt geändert von braunbär am Fr 25. Jan 2019, 15:39, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Word Ole -> Speicherpfad ändern

Beitrag von wp_xyz »

Warum erstellst du die Dokumentenvorlage nicht mit Word direkt?

Flenser
Beiträge: 24
Registriert: Di 28. Okt 2014, 12:49

Re: Word Ole -> Speicherpfad ändern

Beitrag von Flenser »

Die Vorlage *.dot existiert im Ordner XY

Code: Alles auswählen

 
try
  varWdApp := CreateOleObject('Word.Application'); // erstellt das Wordobjekt
except
  WriteLn('MS Word kann nicht gestartet werden.'); // Fehlerbehandlung
end;
 
 
varWdApp.Visible := True;   // macht Word sichtbar
varDokument := varWdApp.Documents.add('\\Pfad\Anschreiben_Pb_Fl.dot');         
 
varbookmark:=varDokument.bookmarks.item('Pruefnummer');             
varTmp:=(Pruefnr);           
varBookmark.Range.Text :=  varTmp;
 
...
 
varWdApp := Unassigned;
varDokument := Unassigned;
varTmp := unassigned;
varbookmark := Unassigned;  
 


Wenn ich jetzt zum neuen Worddokument wechsel und "Speichern unter" wähle, wird mir der Standardpfad angeboten, der in den Word-Eigenschaften eingetragen ist.
Wähle ich im Speichern-Dialog einen anderen Pfad und speichere die Datei, wird dieser Pfad ja (so glaube ich) irgendwo in der Doc-Datei hinterlegt.

Und diesen Speicherpfad würde ich gern vorher festlegen, damit beim "Speichern unter" in Word gleich der richtige Ordner angeboten wird.



Ich versuche auch noch die Anzahl der Seiten im Worddokument zu ermitteln:

Code: Alles auswählen

Blattzahl:=    varDokument.Selection.Information(wdNumberOfPagesInDocument);


Funktioniert aber leider nicht, weil Lazarus "wdNumberOfPagesInDocument" nicht kennt.

Kann ich "wdNumberOfPagesInDocument" irgendwie umschiffen? Oder anders die Anzahl der Seiten ermitteln?

Unter http://wiki.lazarus.freepascal.org/WordAutomation/de#Auszug_aus_den_Wordkonstanten wird die Konstante leider nicht aufgeführt.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Word Ole -> Speicherpfad ändern

Beitrag von MacWomble »

Flenser hat geschrieben:Wenn ich jetzt zum neuen Worddokument wechsel und "Speichern unter" wähle, wird mir der Standardpfad angeboten, der in den Word-Eigenschaften eingetragen ist.
Wähle ich im Speichern-Dialog einen anderen Pfad und speichere die Datei, wird dieser Pfad ja (so glaube ich) irgendwo in der Doc-Datei hinterlegt.

Und diesen Speicherpfad würde ich gern vorher festlegen, damit beim "Speichern unter" in Word gleich der richtige Ordner angeboten wird.


Ich mache das (vereinfacht) so:

- Ich habe einen Ordner mit den Vorlagen (im OpenDocument-Format, also docx oder odt)
Die Vorlagen enthalten einfache Text-Platzhalter (zB #Betreff#).
- Der Anwender wählt in meinem Programm eine Vorlage, das Programm entpackt diese, ersetzt die Platzhalter und packt alles in eine neue Datei am Ort meiner Wahl.
Dann wird die Datei gestartet und öffnet mit der Standardanwendung (das muss nicht Word sein, geht auch mit anderen Office-Programmen)
Wenn nun gespeichert wird, ist sie auch da, wo sie hin soll.

Durch den Verzicht von OLE bleibe ich flexibel und plattformunabhängig, durch eigene Platzhalter behalte ich die Kontrolle.
OLE ist m.E. nicht hierfür geeignet, da die Bindung zu einem Programm die Anwender zu MS nötigt - in der heutigen Zeit ein No-go! :twisted:
Auch ist es mir egal, welches Programm der Anwender verwendet, solange es mit dem Format umgehen kann. :shock:

Das ganze funktioniert z.B. für den kompletten Schriftverkehr einer Anwaltskanzlei seit Jahren problemlos.

Die Seitenzahl findet sich eventuell ebenfalls in der neu erzeugten Datei, da muss man dann evtl. nochmal was entpacken zum Auslesen. (nur eine Vermutung!)
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Antworten