Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Word Automatisation Beschleunigen (https://www.delphipraxis.net/203682-word-automatisation-beschleunigen.html)

GoTo0815 12. Mär 2020 11:06

Word Automatisation Beschleunigen
 
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

Delphi-Quellcode:
   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

Der schöne Günther 12. Mär 2020 11:53

AW: Word Automatisation Beschleunigen
 
Ich kenne mich mit der Automatisierung von Office nicht aus, aber nicht dass du nach jedem Dokument Word effektiv schließt und wieder neu startest? 🤔

GoTo0815 12. Mär 2020 11:59

AW: Word Automatisation Beschleunigen
 
... nein, die Word Instanz bleibt bis zum Ende geöffnet. Es wird immer nur wieder die selbe Worddatei geöffnet, editiert und dann gespeichert.

bcvs 12. Mär 2020 11:59

AW: Word Automatisation Beschleunigen
 
Ich habe mal eine Zeit lang Rechnungen auf diese Weise erzeugt. Dabei dauerte das Befüllen des Word-Dokumentes per OLE recht lange.

Jetzt lade ich das XML-Dokument aus der DOCX in ein TXMLDocument, schreibe meine Werte da an die richtigen Stellen rein und zippe das wieder zusammen zu einem DOCX. Vielleicht wäre das ja ein Ansatz für dich.

Edelfix 12. Mär 2020 12:03

AW: Word Automatisation Beschleunigen
 
Wir machen das ähnlich. Unsere Vorlagen haben die Endung .DOTX
Beim speichern auf das Format stellen.
Zum bearbeiten muss man die .DOTX Dateien im Windows Explorer mit rechter Maus Taste und dann „öffnen“ editieren.
Weiß nicht ob das ein Vorteil ist.

GoTo0815 12. Mär 2020 12:39

AW: Word Automatisation Beschleunigen
 
... würde es nur um einzelne Werte gehen, aber es werden ganze Preistabellen je Artikel eingefügt. Diese sind in der Anzahl der Reihen und Spalten unterschiedlich groß.
Ich würde erst einmal abwarten, ob jemand hier noch eine Idee hätte, ein Dokument nur einmal zu laden und es immer wieder neu aus einer Variable einem neuen Dokument zuzuweisen.
Der Aufwand der Umstellung wäre hier viel geringer. Sollte das dann keine Zeitersparnis bringen, würde ich andere Wege auch noch einmal anschauen.

Das Befüllen eines Dokuments geht übrigens deutlich zügiger, wenn man die Sichtbarkeit der MS Word App (Visible) auf False setzt.

hoika 12. Mär 2020 12:51

AW: Word Automatisation Beschleunigen
 
Hallo,
ich werfe mal WPTools in die Runde.
Die können mittlerweise auch DOCX.

Pfaffe 12. Mär 2020 12:56

AW: Word Automatisation Beschleunigen
 
Word.Visible:= false;
Nicht DOCX, sondern dotx als Vorlage verwenden.

Bei Excel: ExcelApplication1.Visible[FLCID]:= false;

KodeZwerg 12. Mär 2020 13:56

AW: Word Automatisation Beschleunigen
 
Ich weiß nicht ob es noch mehr Geschwindigkeit bringt, jedenfalls gäbe es da noch
Delphi-Quellcode:
WordApp.ScreenUpdating := False;

GoTo0815 12. Mär 2020 14:27

AW: Word Automatisation Beschleunigen
 
Pfaffe: Inwieweit hilft es eine DotX anstatt der DocX zu verwenden?
Muss diese dann in meinem Fall nicht auch tausende Male von der Festplatte geladen werden?
Die eigentliche Frage ist, wie verhindere ich das häufige Laden der Datei von der Festplatte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.
Seite 1 von 3  1 23      

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