AGB  ·  Datenschutz  ·  Impressum  







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

Word Automatisation Beschleunigen

Ein Thema von GoTo0815 · begonnen am 12. Mär 2020 · letzter Beitrag vom 19. Mär 2020
Antwort Antwort
Seite 1 von 3  1 23      
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
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Word Automatisation Beschleunigen

  Alt 12. Mär 2020, 11:53
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? 🤔
  Mit Zitat antworten Zitat
GoTo0815

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

AW: Word Automatisation Beschleunigen

  Alt 12. Mär 2020, 11:59
... nein, die Word Instanz bleibt bis zum Ende geöffnet. Es wird immer nur wieder die selbe Worddatei geöffnet, editiert und dann gespeichert.
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#4

AW: Word Automatisation Beschleunigen

  Alt 12. Mär 2020, 11:59
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.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
213 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Word Automatisation Beschleunigen

  Alt 12. Mär 2020, 12:03
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.
  Mit Zitat antworten Zitat
GoTo0815

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

AW: Word Automatisation Beschleunigen

  Alt 12. Mär 2020, 12:39
... 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.
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Word Automatisation Beschleunigen

  Alt 12. Mär 2020, 12:51
Hallo,
ich werfe mal WPTools in die Runde.
Die können mittlerweise auch DOCX.
Heiko
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
294 Beiträge
 
Delphi 12 Athens
 
#8

AW: Word Automatisation Beschleunigen

  Alt 12. Mär 2020, 12:56
Word.Visible:= false;
Nicht DOCX, sondern dotx als Vorlage verwenden.

Bei Excel: ExcelApplication1.Visible[FLCID]:= false;
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Word Automatisation Beschleunigen

  Alt 12. Mär 2020, 13:56
Ich weiß nicht ob es noch mehr Geschwindigkeit bringt, jedenfalls gäbe es da noch WordApp.ScreenUpdating := False;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
GoTo0815

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

AW: Word Automatisation Beschleunigen

  Alt 12. Mär 2020, 14:27
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.
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      

 

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 07:45 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