AGB  ·  Datenschutz  ·  Impressum  







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

WORD Seriendruckdatenquelle

Ein Thema von MPirnstill · begonnen am 11. Nov 2005 · letzter Beitrag vom 16. Nov 2005
Antwort Antwort
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#1

WORD Seriendruckdatenquelle

  Alt 11. Nov 2005, 10:30
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. 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.

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.

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.
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: WORD Seriendruckdatenquelle

  Alt 11. Nov 2005, 10:53
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.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#3

Re: WORD Seriendruckdatenquelle

  Alt 11. Nov 2005, 10:59
Zitat von Flocke:
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.
Erstmal danke für die schnelle Antwort.

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ß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: WORD Seriendruckdatenquelle

  Alt 11. Nov 2005, 11:40
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  ...
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#5

Re: WORD Seriendruckdatenquelle

  Alt 14. Nov 2005, 07:08
Hi!

Die Idee finde ich super. Und auch gut beschrieben.
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.

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. MS ist mir immer zu "schlau"! Und zu neugierig. 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'

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?
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: WORD Seriendruckdatenquelle

  Alt 14. Nov 2005, 19:25
Hallo

welchen Aufruf verwendest du denn?

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#7

Re: WORD Seriendruckdatenquelle

  Alt 15. Nov 2005, 09:21
Zitat von Keldorn:
welchen Aufruf verwendest du denn?
Hi Frank!

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:

aMsWord := CreateOleObject('Word.Basic'); Den Seriendruck starte ich dann mit folgender Routine:

Delphi-Quellcode:
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;
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
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.
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: WORD Seriendruckdatenquelle

  Alt 15. Nov 2005, 09:26
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.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#9

Re: WORD Seriendruckdatenquelle

  Alt 16. Nov 2005, 09:00
Zitat von Flocke:
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.
Hi Flocke!

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.

Danke noch mal.

Ich liebe dieses Forum. Manchmal die einzige Hilfe, die man als "Einzelkämpfer" hat.

Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:33 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