![]() |
WORD Seriendruckdatenquelle
Hi Leute,
ich weiß nicht, ob ich die Frage hier stellen darf, da es nur indirekt mit der Programmierung zu tun hat. Indirekt deshalb, da ich mit meinem Programm Steuerdateien (Datenquelle) für MS-WORD Serienbriefe erstelle. Wir benutzen hier Word 2003. Ich schicke den Seriendruck mit der entspr. Steuerdatei direkt vom Programm über Word zum Drucker. Dieser Teil funktioniert auch. :thumb: Jedoch biete ich dem Anwender die Möglichkeit die Steuerdatei nur zu Erstellen, damit der hinterher das Serienbrief-Dokument manuell mit Word öffnen kann, ändern kann und dann selbst zum Drucker schicken kann. Beim manuellen Öffnen des Serienbriefes fragt Word, ob es die Daten aus der Steuerdatei selektieren soll. Dabei wird die Steuerdatei mit absolutem Pfad angezeigt und natürlich auch an dem entspr. Ort erwartet. Die Steuerdatei schreibe ich immer in das gleiche Verzeichnis, wo auch das Serienbrief-Dokument liegt. Wenn das Programm und damit auch die Briefe auf den Rechnern in unterschiedlichen Verzeichnissen installiert wird, paßt diese Zuordung der Datenquelle nicht, da das Serienbrief-Dokument sich immer den absoluten Pfad merkt. :gruebel: Ich hatte schon eine Lösung mittel Autoopen-Makro gefunden, jedoch machen mir da unsere Systemadmins mit der Makro-Sicherheit einen Strich durch die Rechnung. :wall: Kann man Word irgendwie sagen, gibt es irgendwo eine Option oder einen Registry-Eintrag, daß Word sich nur den relativen Pfad merkt, da meine Steuerdatei immer im gleichen Verzeichnis liegt, in dem auch das Serienbrief-Dokument liegt? :?: Gruß P.S.: Oder kennt einer ein gutes Forum, wo man Word-Fragen los werden kann. |
Re: WORD Seriendruckdatenquelle
Habe hier gerade ein ähnliches Problem ... aber auch per Makro will Word die Steuerdatei erst öffnen (und findet sie natürlich nicht) - erst danach könnte ich den Pfad ändern.
Die Eigenschaft MailMerge.DataSource.ConnectString ist ein "normaler" Datenquellen-String, und mit MailMerge.OpenDataSource kann man auch mit einer ODBC-Datenquelle verbinden. Diese DSN würde dich dann unabhängig vom absoluten Pfad machen. |
Re: WORD Seriendruckdatenquelle
Zitat:
Das hört sich gut an. Weise ich darüber das Verzeichnis oder dirket die Steuerdatei zu? Wenn direkt die Steuerdatei würde das bedeuten, daß ich für jede Steuerdatei eine eigene DSN brauche? Gruß |
Re: WORD Seriendruckdatenquelle
Wenn du mehrere Datenquellendateien brauchst, dann wird es etwas schwieriger. Das Problem ist ja, dass du Einstellung in Word nicht ändern kannst (Makro kommt zu spät)
Dann könntest du unter "HKCU\Software\ODBC\ODBC.INI\<Deine DSN>\..." jeweils den aktuellen Pfad eintragen, BEVOR du Word aufrufst. Sprich: 1. Du richtest dir auf deinem Rechner eine ODBC-Datenquelle ein, die auf die Seriendruck-Datenquelle verweist (z.B. eine Access-Datei). 2. Du änderst die Word-Vorlage so ab, dass sie nur diese ODBC-Datenquelle benutzt. Das geht über "Datenquelle öffnen" (Toolbar) und dann den Button "Neue Quelle...". 3. BEVOR du Word startest, trägst du in die Registry die benötigten Daten ein (z.B. Pfad und Dateiname). Du kannst natürlich auch die DSN direkt komplett in die Registry eintragen, dann muss dies bei der Installation nicht geschehen.
Code:
HKEY_CURRENT_USER
Software ODBC ODBC.INI ODBC Data Sources <Deine DSN> REG_SZ "Microsoft Access-Treiber (*.mdb)" <Deine DSN> DBQ REG_SZ Kompletter Pfad zur MDB Description REG_SZ ... (siehe Registry) Driver REG_SZ ... FIL REG_SZ ... PWD REG_SZ ... UID REG_SZ ... |
Re: WORD Seriendruckdatenquelle
Hi!
Die Idee finde ich super. Und auch gut beschrieben. :thumb: Nur kann man sich beim Anwender nicht darauf verlassen, daß die nach dem Aufruf der Funktion "Erstellen" (nur Erstellen der Steuerdatei) auch gleich in Word gehen und das Serienbrief-Dokument aufrufen bzw. teilweise werden in einem Arbeitsablauf mehrere Steuerdateien erstellt und dann wäre in dem Fall nur die zuletzt erstellte zugewiesen. Wie gesagt, wenn ich Word direkt aus meinem Programm aufrufe übergebe ich dabei auch direkt den Steuerdateinamen mit kompletten Pfad. Das funktioniert auch super. :mrgreen: Ich glaube, ich muß wenn ich nur die Steuerdatei erstelle (hier wurde Word bislang noch nicht benötigt), trotz allem Word mit der Steuerdatei aufrufen und diese Einstellung in Word speichern. Damit hätte ich sichergestellt, daß Word egal in welchem Verzeichnis ich das Serienbrief-Dokument öffne. Ich hasse MS-WORD. :kotz: MS ist mir immer zu "schlau"! Und zu neugierig. :wiejetzt: z.B. frage ich mich wofür sich das blöde Word-Dokument auch weiterhin die alten Datenquellen merkt, wenn ich eine neue Datenquelle zuweise. Nur so als kleine Anmerkung. Naja, Danke nochmal. Bis denne' :cheers: P.S.: Mit welchem Befehl könnte ich den Word-Serienbrief starten, so daß der Drucken-Dialog angezeigt wird und auf eine Bestätigung durch den Anwender wartet. So hatte nämlich, die vorher installierte Version Wort 97 reagiert. Word 2003 jedoch rauscht mit dem gleichen Aufruf wie unter 97 gleich durch? |
Re: WORD Seriendruckdatenquelle
Hallo
welchen Aufruf verwendest du denn? Mfg Frank |
Re: WORD Seriendruckdatenquelle
Zitat:
Da ich bei diesem Projekt leider noch auf Delphi 2.0 festhänge, kann ich leider nicht diese tollen Application-Server-Komponenten verwenden. Also erzeuge ich ein OLE-Objekt:
Delphi-Quellcode:
Den Seriendruck starte ich dann mit folgender Routine:
aMsWord := CreateOleObject('Word.Basic');
Delphi-Quellcode:
Das paradoxe an der ganzen Sache ist, daß mit Word 2003 (aktuell im Einsatz befindliche Version) läuft das Programm wie es ursprünglich mal angedacht war. Nämlich "Drucken" klicken und ratzfatz raus damit. Dies hatte damals unter Word 97 merkwürdigerweise nicht funktioniert und es Word zeigt vor jedem Serienbrief den Druckdialog und wartete auf Bestätigung. Dies haben die Anwender genutzt, den Druckvorgang unterbrochen, Brief ändern und weiterdrucken. Daran haben sich die Anwender gewöhnt
procedure TfrmVorSel.starteSeriendruck(aMSWord: Variant; aDokument, aSteuerdatei: String);
var OLEFormat: Cardinal; OLEConfirmConversions: Variant; OLEReadOnly: Variant; OLELinkToSource: Variant; OLEAddToRecentFiles: Variant; OLEPasswordDocument: Variant; OLEPasswordTemplate: Variant; OLERevert: Variant; OLEWritePasswordDocument: Variant; OLEWritePasswordTemplate: Variant; OLEConnection: Variant; OLESQLStatement: Variant; OLESQLStatement1: Variant; begin try if Daten then begin aMSWord.Visible := False; //Word sichtbar aMSWord.Documents.Open(aDokument); //Dokument öffnen // Steuerdatei neu einbinden OLEFormat := $00000005;; //wdOpenFormatText OLEConfirmConversions := False; OLEReadOnly := False; OLELinkToSource := True; OLEAddToRecentFiles := False; OLEPasswordDocument := ''; OLEPasswordTemplate := ''; OLERevert := False; OLEWritePasswordDocument := ''; OLEWritePasswordTemplate := ''; OLEConnection := ''; OLESQLStatement := ''; OLESQLStatement1 := ''; aMSWord.ActiveDocument.MailMerge.OpenDataSource(aSteuerdatei, OLEFormat, OLEConfirmConversions, OLEReadOnly, OLELinkToSource, OLEAddToRecentFiles, OLEPasswordDocument, OLEPasswordTemplate, OLERevert, OLEWritePasswordDocument, OLEWritePasswordTemplate, OLEConnection, OLESQLStatement, OLESQLStatement1); //Destination hat 4 Konstanten zur Auswahl: // wdSendToNewDocument(0), // wdSendToPrinter(1), // wdSendToEmail(2), // wdSendToFax (3), aMSWord.ActiveDocument.MailMerge.Destination := 1; //wdSendToPrinter(1) aMSWord.ActiveDocument.MailMerge.Execute; end;//if Daten except on E:Exception do ShowMessage(LoadStr(isDruck)); end; end; und wollen es verständlicherweise gern wiederhaben. Das Ding ist, ich habe Aufruf nicht geändert, nur die Word-Version ist von 97 auf 2003 gestiegen. Und jetzt habe keine Ahnung wie ich es drehe, daß die ihren Dialog wiederbekommen. Wäre schön, wenn du mir da helfen könntest. Gruß P.S.: Ich hatte, daß heute alles schon mal geschrieben, mußte dann etwas anderes erledigen und als ich weitermachen wollte, bin ich aus dem 'Posting'-Modus oder wie man das nennen soll, rausgeflogen. |
Re: WORD Seriendruckdatenquelle
Du könntest zwei Dinge ausprobieren (hast du aber bestimmt schon gemacht):
1. Nimm "wdSendToNewDocument" und schließe dann das Ursprungsdokument wieder - die Anwender müssen dann nur noch auf "Drucken klicken". Allerdings müssen Sie die Änderungen dann in jedes Dokument einbauen. 2. Lass das "MailMerge.Execute" weg - das sollte denselben Effekt haben wie in Word den Abbrechen-Knopf zu drücken. |
Re: WORD Seriendruckdatenquelle
Zitat:
Danke für deine Tipps. Punkt 1 ist jedoch aus den von dir selbst genannten Punkt nicht praktikabel. :( Punkt 2 habe ich ausprobiert. Habe auch "Visible := True" gesetzt, damit man Word sieht. Das scheint zu funktionieren. Wenn ich den/die Serienbriefe anstoße, bleibt Word mit dem entspr. Dokument geöffnet (sofern mein closeWord entspr. steuere) und der Anwender kann schalten und walten. Und anschließend den Seriendruck in Word selbst starten. :thumb: Danke noch mal. :-D :cheers: Ich liebe dieses Forum. Manchmal die einzige Hilfe, die man als "Einzelkämpfer" hat. :cheers: :cheers: :cheers: :cheers: :cheers: :cheers: :cheers: :dancer: :dancer2: :dancer: :dancer2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz