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 3 von 3     123   
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#21

AW: Word Automatisation Beschleunigen

  Alt 13. Mär 2020, 15:06
Ja, die Serienbrieffunktion hatte ich auch bereits im Blick. Problematisch wird es halt mit dem Einfügen von unterschiedlich großen Preistabellen.
Sagen wir ein Artikel wäre Kies. Den es in 10 verschiedenen Körnungen gäbe und in Gebinden von 25kg bis hin zu mehreren Tonnen.
Der nächste Artikel wäre ein T-Shirt in 4 Größen und 3 Mengenstaffeln.
Will sagen die Tabellen haben unterschiedliche Mengen an Spalten und Reihen.
Vielleicht übersehe ich da auch etwas, aber ich konnte mir bisher keinen Weg vorstellen, das in einem Serienbrief abzubilden.
Schon auf der Seite der Quelldaten..
Tja Deine Quelldaten kenne ich nicht.... der Rest sollte mit einem makro zu erledigen sein (insert table....)
Das ist ja der Vorteil daß es da Standdardaufrufe Beim erstellen eines Dokumentes aus einer Vorlage gibt.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
GoTo0815

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

AW: Word Automatisation Beschleunigen

  Alt 14. Mär 2020, 12:50
Tiger Lilly: Das werde ich mir mal anschauen.
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#23

AW: Word Automatisation Beschleunigen

  Alt 14. Mär 2020, 13:27
Code:
Sub TBrange()
    Dim bRange As Range
    '
    If ActiveDocument.Bookmarks.Exists("F1") Then
        Set bRange = ActiveDocument.Bookmarks("F1").Range
        bRange.Text = "der Text"
    End If
    '
    ' Textmarke recykeln
    With ActiveDocument.Bookmarks
        .Add Range:=bRange, Name:="F1"
    End With
End Sub
Wir haben das gleiche Prinzip in einem alten Delphiprojekt genutzt. Also Ranges über Bookmarks definiert und neu befüllt, gesetzt. Wenn ich mich richtig erinnere war es das beste/schnellste Ergebnis von verschiedenen Varianten / Versuchen (und damals nicht selbstverständlich, es war robust).
Das war allerdings ohne Exists Prüfung, sondern eine Iteration in einem gegebenen Dokument durch die Liste der definierten Bookmarks.
Auf die Art konnte man beliebig große Feldinhalte befüllen und das Ganze auch bei mehrseitigen Dokumenten so schnell, dass man mit einem System/Mitarbeiter mehrere Hochleistungsdrucker in Betrieb halten kann.
Man muss nur aufpassen, dass man sich bei der Arbeit mit den Dokumenten nicht unbemerkt die Bookmarks zerstört. Aber vielleicht kann man das mit neueren Wordversionen auch besser sehen und bedienen.
Drumrum war noch eine Gesamtseitenkontrolle, um Fehldrucke/Fehlbefüllung zu erkennen und einseitig/mehrseitiges vorbedrucktes Papier nicht falsch zu bedrucken.
Gruß, Jo
  Mit Zitat antworten Zitat
GoTo0815

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

AW: Word Automatisation Beschleunigen

  Alt 16. Mär 2020, 21:33
Ich versuche das gerade umzusetzen. Bei einfachen Textersetzungen klappt das auch gut, aber wenn die Textmarke mit einer Tabelle gefüllt ist, dann habe ich Probleme, dass immer mehr Tabellen in einer Textmarke entstehen und nicht wie gewünscht nur eine neue Tabelle in der Textmarke.


Delphi-Quellcode:
  var ovBookmark, ovBRange : OleVariant;
      iRows, iCols : Integer;

  ovBookmark := 'NameDerTextmarke';
  ovBRange := WordApp.ActiveDocument.Bookmarks.Item(ovBookmark).Range;
  WordTable := WordApp.ActiveDocument.Tables.Add(ovBRange, iRows, iCols);
  // Dann wird die Tabelle mit Inhalt gefüllt.
  // ....
  // Später dann noch
  // Hier hatte ich auch schon versucht noch einmal nach dem Befüllen der Tabelle noch einmal ovBRange neu zu setzen.
  // Wenn ich ovBRange := WordApp.ActiveDocument.Bookmarks.Item(ovBookmark).Range; setze ändert das das Problem nicht. Es werden immer mehr Tabellen im Inneren der Bookmark.
  // Wenn ich ovBRange := WordTable.Range; setze, dann erhalte ich beim erneuten erstellen einer Tabelle die Meldung: "Der Bereich kann nicht gelöscht werden".
  WordApp.ActiveDocument.Bookmarks.Add(ovBookmark, ovBRange);
Also der erste Durchgang mit der frischen Vorlage funktioniert. Die Tabelle kann einwandfrei eingesetzt werden. Nur ab dem zweiten Durchgang werden es immer mehr Tabellen innerhalb einer Bookmark und es wird immer langsamer. Was klar ist.
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!

Geändert von GoTo0815 (16. Mär 2020 um 21:36 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#25

AW: Word Automatisation Beschleunigen

  Alt 17. Mär 2020, 12:29
Ich krieg leichtes Hirnsausen mit Blick auf VB, aber ich glaube Du musst die Table der Range zuweisen und nicht eine Table mit Hilfe der Range anlegen.
Gruß, Jo
  Mit Zitat antworten Zitat
GoTo0815

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

AW: Word Automatisation Beschleunigen

  Alt 17. Mär 2020, 12:45
Das kann ich gut verstehen.
Ich habe jetzt den Weg gewählt die Tabellen zu löschen, bevor ich neue einfüge.
Dazu merke ich mir die Bookmarks in denen eine Tabelle erstellt wird in einer StringList.

Delphi-Quellcode:

if aListOfBookmarksWithTables.Count > 0 then
begin
  for iCounter2 := aListOfBookmarksWithTables.Count-1 downto 0 do
  begin
    WordTable:= WordApp.ActiveDocument.Bookmarks.Item(aListOfBookmarksWithTables[iCounter2]).Range.Tables.Item(1);
    WordTable.Delete;
    aListOfBookmarksWithTables.Delete(iCounter2);
  end;
end;
Scheint zumindest zu funktionieren.
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#27

AW: Word Automatisation Beschleunigen

  Alt 17. Mär 2020, 22:03
Wenn in dem Dokument im Leerzustand keine Tabellen sind, könntest du doch einfach pauschal alle Tabellen im Dokument löschen und musst das nicht so kompliziert mit Merkliste machen, oder?
Ralph
  Mit Zitat antworten Zitat
GoTo0815

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

AW: Word Automatisation Beschleunigen

  Alt 19. Mär 2020, 10:32
Danke Jumpy,
Man muss dem User der die Vorlage gestaltet auch die Möglichkeit geben Tabellen anderweitig zu ergänzen, ohne dass das System dann diese auch löscht. Ergo komme ich am Merken der mit temporären Tabellen befüllten Bookmarks nicht vorbei.
Z.B. werden für die Positionierung der Elemente (Bilder, Beschreibung, Preistabelle) auch Tabellen in unserer aktuellen Vorlage verwendet, daher konnte ich den Weg nicht gehen.

Wir haben das ganze jetzt so im Betrieb und es funktioniert. Allerdings nicht wesentlich schneller als vorher mit dem Neuöffnen der Vorlagen.
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   

 

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 05:24 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