Serie Druck eines office Document

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Word nutzt beim Druck -sofern nichts anderes angegeben - den augenblicklich in Windows gesetzten Standarddrucker.

Um einen anderen Drucker zu setzten, kann innerhalb von Word ein anderer Standarddrucker temporär gesetzt werden:

cOldPrinter := oWord:Activeprinter
oWord:Activeprinter := cPrinter
.....
Vor Beendigung von Word sollte der ursprüngliche Drucker wieder gesetzt werden:

oWord:Activeprinter := cOldPrinter


Gruß, Olaf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Lewi hat geschrieben:cOldPrinter := oWord:Activeprinter
oWord:Activeprinter := cPrinter
oWord:Activeprinter := cOldPrinter
das ist ja interessant.

Kann man für cPrinter den String von XbpPrinter():list()[?] nutzen ?

Wenn ja ist das ja eine geniale Lösung.
Gruß
Hubert
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Yep!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Hubert.
Kann man für cPrinter den String von XbpPrinter():list()[?] nutzen ?
Ja.
Herzlich,
Tom
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Ich habe das Beispiel mit JazeAge für xBase 1.9 adaptiert:

Code: Alles auswählen

Procedure RunSerienBrief( cDoc, cDat)

   Local oWord
   Local oDoc
   Local wdFormLetters := 0


   oWord := CreateObject("Word.Application")
   IF Empty( oWord )
      MsgBox( "Microsoft Word ist nicht installiert" )
   ENDIF

   oWord:visible := .T.
   oWord:Documents:Add(cDoc )

   oDoc := oWord:ActiveDocument
   oDoc:MailMerge:MainDocumentType := wdFormLetters

   oDoc:MailMerge:OpenDataSource(cDat)
// Natürlich könnte an dieser Stelle jetzt auch automatisch der Druck angestoßen werden
// und anschließend Word beendet werden.
// Ist oWord:visible := .F., kann der Druck auch im Hintergrund erfolgen

   // Ein Sleep() ist an dieser Stelle unbedingt erforderlich
   // falls der Anwender in Word verbleiben soll!
   sleep(200)

//  sollte nach dem Druck die Word beendet werden ..
   // oDoc:close()
   //oWord:quit()

   // trennen der ActiveX-Verbindung
   oWord:destroy()
   oWord := NIL
Return
Ein kompletes Serienbriefbeispiel inkl. Daten und Formatvorlage kann herunter geladen werden:
hier
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo zusammen,

ich möchte mich mal bedanken für Euren Einsatz.
So viele Infos und richtige Beispiele bekommt man nur bei Euch.
Auch Tom hat mir ein sehr reichhaltigen Report gegeben.

Olaf hat das was ich suchte.Genial.

Frage an Olaf hab ich doch noch:
Hast da noch ein Typ?
Wenn ich den Seriendruck starte aus Word hab ich folgendes Makro:

Code: Alles auswählen

    With ActiveDocument.MailMerge
          .Destination = wdSendToPrinter
         .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
    ActiveWindow.Close
Da wird der Drucker für Serie angesprochen.

So muss der Anwender nur noch den Drucker wählen, für den Seriendruck.

Gruss Thomas
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Hallo Thomas,

wollte Dir das per E-Mail schicken, aber leider ist bei Dir keine hinterlegt.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Klaus,
wie Du sehen kannst, ist bei Thomas eine Mailadresse hinterlegt - darum sieht man unter seinen Postings auch das email-Symbol.
Allerdings wird die email-Adresse nie angezeigt. Man sagt also, dass man eine email senden will und kann diese dann ganz normal (wie bei einer PN) eingeben - nur mit dem Unterschied, dass sie an die hinterlegte Mailadresse geschickt wird.
Attachments kann man dadurch allerdings immer noch nicht senden.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Antworten