Einzelnen Beitrag anzeigen

GoTo0815

Registriert seit: 18. Mai 2004
148 Beiträge
 
Delphi XE2 Professional
 
#1

Word Automatisation Beschleunigen

  Alt 12. Mär 2020, 11:06
Guten Tag!

Für einen Preislistengenerator verwende ich MS Word.
Für das allgemeine Design einer Seite in dieser Preisliste verwende ich ein einseitiges Worddokument (DOCX) als Vorlage(beispielsweise mit 6 Artikeln auf einer DIN A4 Seite).
Wenn die gesamte Preisliste nun 60 Artikel beinhalten soll, dann lade ich das o.g. Dokument editiere die Infos, Bilder und Tabellen per OLE und speichere das als PDF Dokument ab.
Dann schließe ich das Word Dokument und lade die Vorlage erneut. Das Ganze mache ich dann beispielsweise 10 Mal.
Das funktioniert soweit sehr gut und ist bereits lange verlässlich im Einsatz.

Das öffnen des Worddokuments (Vorlage) erfolgt über

   WordApp.Documents.Open(aFilename, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);

Nun zum Problem:
Mittlerweile müssen hintereinander 100 - 150 verschiedene Preislisten mit jeweils mehr als 300 Artikeln erzeugt werden.
Das bedeutet im aktuellen Maximalfall, dass der o.g. Code 5000 - 7500 Mal ausgeführt wird.
Das laden der Vorlage dauert seine Zeit, was den gasamten Durchlauf auf mehrere Stunden ausweitet.
Ich habe bereits versucht, dass vor dem Start die Wordvorlage in ein virtuelles Laufwerk in den Arbeitspeicher geladen wird, um die Zugriffszeiten zu reduzieren, aber richtig Performance bringt das nicht.
Ein Worddokument ist eine ZIP Datei, bei der nur die Endung auf DOCX umbenannt wurde (übrigens sehr hilfreich, wenn man mal beispielsweise Bilder extrahieren möchte aus einem Dokument, einfach wieder in ZIP umbenennen...).
Somit dauert natürlich das Laden sehr lange.

Kurzum: Weiß jemand, wie ich es schaffen kann ohne jedesmal das Document zu laden?
Also einmal Laden, in eine Variable speichern und immer wieder ein neues Dokument aus dieser Variable erzeugen?
Ich finde dazu einfach nicht die passenden Ansätze im Netz. Ggf. suche ich auch falsch.
Würde mich über Ansätze oder Code sehr freuen.

Grüße
GoTo0815
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!
  Mit Zitat antworten Zitat