App soll Daten an Word übergeben und drucken

Dieses Thema App soll Daten an Word übergeben und drucken im Forum "Microsoft Office Suite" wurde erstellt von MasterQ, 24. Juni 2009.

Thema: App soll Daten an Word übergeben und drucken Hallo, ich will realisieren, dass ein Programm Daten an Word sendet, um einen Bericht zu erstellen. Dazu soll eine...

  1. Hallo,

    ich will realisieren, dass ein Programm Daten an Word sendet, um einen Bericht zu erstellen. Dazu soll eine Vorlage mit diversen Textfeldern durch die Daten von der Anwendung gefüllt werden.

    Ich blicke es im Moment nicht wirklich, wie das gehen soll. Es gibt die Serienbrief-Funktion. Damit kann ich das per Hand tun, also Vorlage öffnen, Datenquelle anbinden, Datensatz auswählen und Drucken drücken.

    Das alles soll aber im Hintergrund ohne Zutun des Anwenders laufen. Mit meiner Anwendung kann ich Exceltabellen erzeugen. Damit kann ich schon mal meine Datenquelle bereitstellen, bzw. aktualisieren. Dann müsste meine Anwendung Word irgendwie aufrufen und die entsprechenden Aktionen anstoßen.

    Word geht doch auch als ActiveX oder?

    Ich hangele mich seit Stunden durch die ActiveX-Methoden von Word, finde da aber nix.

    Geht das mit ActiveX nicht direkt? Kann ich mit ActiveX Makros aufrufen?

    Kennt jemand das Prinzip mit dem man mein Anliegen umsetzen kann? Wo muss ich suchen, um Hinweise zu finden, wie ich das umsetzen kann? Ich rede bewusst nicht von konkreten Programmiersprachen. Ich will das Prinzip verstanden haben, dann komme ich auch mit meiner Programmiersprache hier zurecht.

    Gruß

    MQ
     
  2. Programmiersprachen brauchst Du dazu gar nicht. WinWord kann das von alleine. So geht's:

    Wenn möglich, veranlasse, dass Deine Anwendung die Datenquelle im Nur-Text-Format anlegt, vorzugsweise im Format Text-csv. Ich setze jetzt mal voraus, Du weisst, was das ist und kennst den internen Aufbau so einer Datei. Stelle auch sicher, dass Deine Anwendung die Datenquelle mit der Endung DOC im Dateinamen versieht; dass es sich dabei nicht um ein Word-Dokument handelt, ist in dem Zusammenhang unerheblich.

    Erstelle sodann das Word-Dokument, das Du mit den Daten aus der Anwendung befüllt haben willst. Dieses muss ein Serienbriefdokument und die oben genannte Datenquelle muss mit dem Dokument verbunden sein. Beachte für WinWord ab Version 2003, dass hier grundsätzlich die Anbindung einer echten Datenbank erwartet wird. Soll hingegen eine gewöhnliche Textdatei als Datenquelle verbunden werden und soll Word 2003 hinsichtlich der Serienbriefe so reagieren wie seine Vorgängerversionen, musst Du vor Erstellung des Word-Dokuments Hand an die Registry legen und einen neuen Schlüssel einfügen. Begib Dich hierzu an HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Word\Options, lege den neuen Schlüssel SQLSecurityCheck als DWORD-Wert an und versieh diesen mit dem Wert Null (meist schon voreingestellt beim Anlegen).

    Im Wesentlichen war's das auch schon. Jetzt fehlt nur noch der SHELL-Aufruf für WinWord mit besagtem Serienbrief-Dokument als Kommandozeilenparameter in Deiner Anwendung, und schon kann's losgehen.
     
  3. Moin,

    Ich meinte damit die Datengenerierung etc.

    csv - comma separated values - Kenn ich!

    Ich verwende Word 2003. Wenn ich das Seriendokument mit einer Quelle verbinde, dann habe ich verschiedene Auswahlmöglichkeiten. Ich kann auch normale Excel-Tabellen auswählen. Das ganze DB-Geraffel fällt weg, wenn man als Dateityp irgendetwas anderes auswählt. So wird auch csv angeboten. Zumindest mit Excel klappt das. CSV hab ich noch nicht ausprobiert, wäre aber mein bevorzugtes Format gewesen.

    Der Key in der Registry existiert bei mir noch nicht. Den brauch ich wohl aber auch nicht. -?-

    OK, damit krieg ich meine Daten in Word. So ungefähr habe ich es mir auch vorgestellt. Nur, wie krieg ich es hin, dass


    • [li]aus der Datendatei ein bestimmter Datensatz ausgewählt wird, [/li]
      [li]das so erstellte Dokument mit speziellem Namen gespeichert wird,[/li]
      [li]das so erstellte Dokument als PDF ausgedruckt wird,[/li]
      [li]das so erstellte Dokument physikalisch auf Papier ausgedruckt wird.[/li]

    Notfalls erzeuge ich eine temporäre Datendatei mit nur einem Eintrag, die ich danach wieder lösche. Das ist nicht das Problem.

    Notfalls kann ich auch auf das Speichern als Word-Dokument verzichten. Unverzichtbar ist aber das Erzeugen eines PDF und das Ausdrucken auf Papier.

    Prinzipiell ließe sich das durch ein Makro automatisieren, das ich per Kommandozeile in Word ausführe. Wenn das mit dem Makro klappt, dann bräuchte ich nur so was wie

    winword.exe -startemakro foo

    Dateinamen wären sowohl für die Wordvorlage die gefüllt werden soll, als auch für die Datendatei fix. Zum Abspeichern und zum PDF Erzeugen müsste ich allerdings im Makro auf einzelne Felder der Datendatei zurückgreifen. Sollte aber auch kein Problem sein. ASCII lesen kann VB ja.

    Wo sind denn die Kommandozeilenparameter von Word beschrieben?

    Gruß

    MQ
     
  4. Doch, leider. Ohne dem funktioniert die Seriendruck-Vorschau in WinWord 2003 nicht wie von früheren Versionen her gewohnt, wenn man Nicht-Datenbanken als Serienbrief-Datenquellen einsetzt. Diese Schaltfläche in der Seriendruck-Werkzeugleiste ist ohne Registry-Ergänzung entweder deaktiviert oder das Anklicken bewirkt nichts - im Dokument sieht man ohne Registry-Eintrag immer nur die Bezeichnungen der eingefügten Seriendruckfelder, aber niemals den Inhalt derselben.

    Das sollte eigentlich Deine App. besorgen in dem Sinne, dass der User einen bestimmten Datensatz in der App. auswählt, den Druckbefehl erteilt, die App. daraufhin die Datenquelle befüllt und WinWord mit dem gewünschten DOC startet.

    Soll Deine App. hingegen mehrere oder gar viele Datensätze auf einmal in die Datenquelle schreiben, muss der User den oder die gewünschten manuell auswählen, fürchte ich, und dann das DOC mit den gewünschten Daten drucken. Zur Datensatz-Auswahl hält WinWord in der Serienbrief-Werkzeugleiste ja eine Art Mini-Datensteuerelement vor (mit Vor- und Rücklaufbuttons), das zu diesem Zweck zu benutzen ist. Ich bezweifle, dass man das von außen durch eine externe Anwendung steuern kann.

    In dem Zusammenhang:
    Ich würde es so machen.

    Nicht nötig. Das VBA-Makro baust Du wahlweise in die Prozeduren Document_New() oder Document_Open() des oder der zu verwendenden DOCs ein, das bewirkt bereits deren automatische Ausführung, sobald das Dokument geöffnet oder ein neues Dokument nach dem Muster des genannten erzeugt wird. Kommandozeilenparameter sind diesbezüglich nicht erforderlich.

    Ganz genau. Das VBA-Statement ActiveDocument.MailMerge.DataSource.DataFields(Seriendruckfeld_Name).Value erlaubt das Auslesen des Inhalts der bezeichneten Seriendruck-Felder und deren Weiterverarbeitung im folgenden Makro-Code.

    Ich erspare es mir, sie hier aufzulisten, und bitte um Nachsicht. In meinem antiken WinWord 2000 zu finden in der WinWord-Hilfe nach Eingabe des Suchbegriffs starten und dem anschließenden Anklicken des Themas Steuern der Vorgänge beim Starten von Microsoft Word. Hoffe mal, Microsoft hat das in Version 2003 nicht allzusehr verändert.

    Davon abgesehen sieht der SHELL-Befehl, den Deine App. absetzen muss, um WinWord mit dem besagten Dokument zu öffnen, so aus:

    [Pfad][\]winword.exe [Pfad][\]dokumentname.doc.

    Aber das ahntest Du sicher schon.
     
  5. Hallo,

    Bei mir tut's!

    Ja, inzwischen hab ich das auch gelesen. Irgendwo stand, dass AutoExec und AutoOpen Überbleibsel aus alten Tagen sind und man heute über New und Open geht.

    Na ja, ich habe auch einige Zeit gebraucht, um dahinter zu kommen, dass das auch nur dann so geht, wenn man ein Dokument öffnet und nicht von einer Vorlage ein neues erzeugt.

    ein winword foo.doc ruft die Openroutine auf, ein winword -tfoo.dot nicht!! Aua.




    hab'se gefunden.

    Ich denke, ich krieg es jetzt hin.

    Meine App kann nun Word aufrufen und mit Hilfe der Makroaufzeichnung habe ich auch die Befehle rausgekriegt, mit denen ich die Dokumente öffne, die Datendatei anlinke, den Datensatz auswähle und speichere und drucke und den ganzen Rest auch.

    Danke für die Hilfe

    Gruß

    MQ
     
  6. Respekt!

    Open wird davon auch nur indirekt betroffen; an sich sollte ein neues Dokument nach dem Muster der Vorlage erstellt werden, und irgendwie geht das auch - schon seit längerer Zeit schnüffle ich der Masche hinterher, wie, aber ich komm' einfach nicht dahinter...

    Noch viel Erfolg und - - - gern geschehen!

    Ist ein interessantes Gebiet, mit dem Du dich beschäftigst, und v.a. der Schriftverkehr lässt sich damit unheimlich auf Effizienz pushen.
     
  7. Moin,

    Habe ich dafür nicht verdient. Bei mir tut es out of the böxle. Dafür habe ich andere Probleme, so habe ich (wichtige) Dokumente aus Word2000 übernommen und kann diese ohne Kniebeugen nicht mit Word2003 ausdrucken. Es schmiert einfach ab!

    Das Dokument wird aus der dot schon erstellt. Nur werden die Methoden nicht aufgerufen. Ich verstehe nicht warum die in diesem Fall nicht ausgeführt werden bzw. weiß ich nicht, welche in diesem Fall anstatt dieser aufgerufen werden.

    Yepp! Bei mir werden Messdaten erzeugt, die bisher per Hand in Excel übertragen wurden, aus dem dann (halbautomatisch) ein Messbericht erstellt wurde. Das soll sich ändern. Ich bastele ein Programm zu geführten Messung, Schritt für Schritt mit Datenaufnahme, übertragen der Daten in eine Datenbank bzw. Datendatei und dem Erstellen eines Berichts mit den Ergebnissen.

    Gruß

    MQ
     
  8. DAS ist genau der entscheidende Hinweis, den ich seit langem gesucht habe!!!

    Herzlichen Dank für den Hinweis, habe den Parameter zwar schon gekannt, bin aber stets gescheitert, weil ich zwischen /t und foo.dot immer ein Leerzeichen in meiner App. setzte, so dass WinWord die DOT öffnete, statt ein neues DOC zu erzeugen. Hab' wohl immer noch zu viel DOS-Tomaten auf den Augen gehabt. Zu DOS-Zeiten musste zwischen den einzelnen Parametern stets ein Leerzeichen sein.
     
  9. Hallo,

    Freut mich, wenn ich auch helfen konnte.

    Das mit dem Leerzeichen ist schon verwirrend. Ich frage mich, welcher Teufel die MS-Leute geritten hat, solch einen Blödsinn zu implementieren. Da wäre es doch sinnvoller eine neue Option einzuführen. Aber vielleicht hat deren Alphabet einfach weniger Buchstaben oder die Tastatur war kaputt.

    Es gibt auch noch andere Optionen von Word, die auf diese Art missbraucht werden.

    Gruß

    MQ
     
  10. Hallo, MQ,

    einen hab' ich noch:

    Sieh' Dir dazu die Sicherheitseinstellungen für Makros in WinWord an, im 2003er sollten diese immer noch via Menü Extras => Makro => Sicherheit erreichbar sein. Voreingestellt ist hier normalerweise Hoch, um die Ausführung von Makroviren zu verhindern. Kannst auf Mittel oder Niedrig heruntersetzen.

    Falls Du Deine App. zu verkaufen oder sonstwie zu distribuieren beabsichtigst, weise in der Dokumentation unbedingt auf diese Einstellmöglichkeit hin, sonst hagelt's Kunden-Mecker!
     
Die Seite wird geladen...

App soll Daten an Word übergeben und drucken - Ähnliche Themen

Forum Datum
"Wie soll dieser Datenträger verwendet werden ?" Windows 7 Forum 25. Nov. 2010
Kann keine Daten mehr vom USB-Stick lesen. Soll ihn formatieren (laut Windows) Datenwiederherstellung 22. Mai 2010
Firefox 3.5.. Soll man jetzt updaten? Web-Browser 16. Sep. 2009
Excel: Datenmaske soll beim Öffnen der Mappe automatisch erscheinen Windows XP Forum 19. Nov. 2007
sollte man schon auf IE7 updaten? Web-Browser 21. Nov. 2006