Word Serienbrief

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Word Serienbrief

Beitrag von Rolf Ramacher »

Hallo zusammen,

ich steuere meine Listenausdrucke über Word. jetzt bin ich bei der Umsetzung von Reklamationen. Hierbei werden Anschreiben an Lieferanten erzeugt. dies können auch mehrere sein. Dann käme ein Serienbrief in Frage .

geht das überhaupt ?? kann ich mit ActiveX dies steuern. ich könnte natürlich auch jeden einzelnen Lieferanten ansteuern und eine Datei pro Lieferant schreiben und dann drucken.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Schubi
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 139
Registriert: Mi, 05. Okt 2005 15:10
Wohnort: Wiesloch
Hat sich bedankt: 5 Mal

Re: Word Serienbrief

Beitrag von Schubi »

Hallo Rolf,

klar geht das. Hier ein Beispiel von MS dazu:
http://support.microsoft.com/kb/181926

Man kann es mit DBF oder CSV als Steuerdatei tun.
Wir nehmen CSV, da es hier keine Probleme mit verschiedenen Codepages gibt (Umlaute usw.).

Zum Thema Word und Mailmerge findet man unter Google massenhaft Beispiele, die auch funktionieren.
Ich versuche das gleiche gerade unter Openoffice und bin kurz vorm Wahnsinn. :banghead:
Grüße Steffen
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Word Serienbrief

Beitrag von AUGE_OHR »

Rolf Ramacher hat geschrieben:dies können auch mehrere sein. Dann käme ein Serienbrief in Frage .

geht das überhaupt ?? kann ich mit ActiveX dies steuern.
das Beispiel c:\ALASKA\XPPW32\SOURCE\samples\activex\msword\feed.prg ist zwar für eine *.DOT ( Vorlage ) Datei aber das Prinzip ist das selbe mit einer *.DOCx Datei.

Frage : wenn du die "Serie" hast willst du die wirklich "drucken" ... oder FAX ... oder Email ... ?
gruss by OHR
Jimmy
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Word Serienbrief

Beitrag von Rudolf »

Hallo,
ich mache Serienbriefe über folgende Funktion (weiss nicht mehr woher). In der Wordvorlage muss ich nur die Felder definieren.
Grüsse
Rudolf

Code: Alles auswählen

FUNCTION WordFillDocument(cFile,aData,cSaveAs,nBearb)
  LOCAL oWord,oBM,oDoc,lWordFinished := .f.,x
  default nBearb to 0
  // Create a Word ActiveX component
  oWord := CreateObject("Word.Application")
  IF Empty( oWord )
    MsgBox( "Microsoft Word ist nicht installiert" )
  ENDIF
  oWord := oWord:dynamicCast(ActiveXObject())
  oWord:Quit := {||lWordFinished := .T.}
  oWord:visible := .T.
  lWordFinished := .f.

  // Open a Word document and retrieve the bookmarks
  // collection.
  oWord:documents:open( cFile )
  oDoc := oWord:ActiveDocument
  oBM  := oDoc:Bookmarks

  // Replace the Bookmark with a new value
  ReplaceBookmark(oBM , "COMPANY"     , aData[1] )
  ReplaceBookmark(oBM , "TO"          , aData[2] )
  ReplaceBookmark(oBM , "FAX"         , aData[3] )
  ReplaceBookmark(oBM , "FROM"        , aData[4] )
  ReplaceBookmark(oBM , "TOTAL_PAGES" , "1" )
  ReplaceBookmark(oBM , "CARBON_COPY" , "" )
  ReplaceBookmark(oBM , "SUBJECT"     , aData[5] )
  ReplaceBookmark(oBM , "SALUTATION"  , aData[6] )
  ReplaceBookmark(oBM , "TEXT"        , aData[7] )
  ReplaceBookmark(oBM , "DATE"        , DToC(Date()) )

  ReplaceBookmark(oBM , "NAME1"       , aData[15] )
  ReplaceBookmark(oBM , "NAME2"       , aData[16] )
  ReplaceBookmark(oBM , "STRASSE"     , aData[17] )
  ReplaceBookmark(oBM , "LKZ"         , aData[18] )
  ReplaceBookmark(oBM , "PLZ"         , aData[19] )
  ReplaceBookmark(oBM , "ORT"         , aData[20] )
  ReplaceBookmark(oBM , "Z_HD"        , aData[21] )
  ReplaceBookmark(oBM , "LAND"        , getland(aData[18]) )


  // Save the resulting Word document
  IF(ValType(cSaveAs)=="C")
    oDoc:saveas(cSaveAs)
  ENDIF

  // Optional print out of document to standard
  // printer
  IF nBearb = 2
    *oDoc:PrintOut()
  ENDIF

  // Close the document and destroy the ActiveX
  // object
  if nBearb # 1
     //oDoc:sendfax()
     oDoc:close()
     oWord:Quit()
  endif
  *Do WHILE !lWordFinished
    // Just wait
  *EndDo
  sleep(200)
  oWord:destroy()
    if nBearb = 2
     WinAPIPrint(cFile)
  endif

RETURN NIL
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Word Serienbrief

Beitrag von Herbert »

Ja, das geht, aber nur bis etwa 20 Felder, weil das Ganze extrem langsam ist.
Weiter sind die Einschränkungen, dass kein Feldname gleich heissen darf, was bei verwenden derselben Variablen auf z.B. mehreren Seiten verteilt mühsam wird.
Auch kann keine Kopf- oder Fusszeile bedient werden.

Ich bin daher wieder von Word weg und bediene den Drucker direkt mit reinen Textdokumenten als Basis. Die Druckersteuerung erfolgt über eigene Steuerzeichen. Hat den Vorteil, dass das Ganze sehr schnell ist und zugleich auch eine PDF in derselben Geschwindigkeit erstellt werden kann.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Word Serienbrief

Beitrag von AUGE_OHR »

Herbert hat geschrieben:... weil das Ganze extrem langsam ist.
das liegt an der activeX Schnittstelle von Xbase++.
wenn man nur einige "Calls" macht fällt das kaum auf, aber bei einer Serie addieren sich 0.02 Sec. dann doch gewaltig auf.

Wenn man das nun ganze mit Xbase++ und der DispHpr.DLL macht ist es 400%-500% "schneller".
gruss by OHR
Jimmy
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Word Serienbrief

Beitrag von Rudolf »

Hallo,
ich verwende es auch nur für einzelne Seiten, az.B. für FAX. Alles ander mache ich mit FastReports und Frax, das funktioniert perfekt. Und meine Kunden haben weit weniger Probleme mit FastReporst als mit Word
Grüsse
Rudolf
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:

Re: Word Serienbrief

Beitrag von brandelh »

Hallo,

für CGI Programme speichere ich HTML Code mit eigener Syntax für Platzhalter.
Beispiel:

... <b> {NAME} ...

Genauso könnte man ein Word-Dokument im XLS Format speichern, eventuell halt mehr Klammern verwenden ...
{[NAME]}

und mit StrTran() die Texte austauschen, speichern und dann mit Word drucken oder ändern lassen.
Mit Excel mache ich sowas häufiger, Word habe ich einmal so bedient, bleibe aber bei meinem Druckprogram oder PDF direkt. Auf jeden Fall ist das SAUSCHNELL :D
Gruß
Hubert
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:

Re: Word Serienbrief

Beitrag von Koverhage »

Jimmy,

hast Du dafür ein Beispiel wie man das mit DispHpr.DLL macht ?
Gruß
Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Word Serienbrief

Beitrag von AUGE_OHR »

Koverhage hat geschrieben:hast Du dafür ein Beispiel wie man das mit DispHpr.DLL macht ?
siehe dir mal http://www.xbaseforum.de/viewtopic.php? ... 8&start=25 an.
Das Attachment DHOL2DBF.ZIP enthält eine DH Version mit Kommentar.

bei Pablo im news.xbwin.com Forum findet ihr unter xfree.public den Thread "BCC55 OBJ for Xbase++ ?",5. März 2011 dazu.

Es gibt auch ein Excel (Office97 !!!) File mit einer DH Version die Pablo in "dem" Thread als Attachment angehängt hat.
gruss by OHR
Jimmy
Antworten