Mail Merge

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Korny1986
**
Beiträge: 22
Registriert: Fr, 11.12.2009 13:09
Wohnort: Korneuburg, NÖ

Mail Merge

Beitrag von Korny1986 »

Hi Leute!

Hab folgendes Problem: Ich will einen Serienbrief per Makro drucken. Klappt mit MailMerge soweit ganz gut nur habe ich keine Ahnung wie ich ihm den Drucker zuteile. Hab unten schon herum gebastelt jedoch kam nichts dabei raus! Es kommt keine Fehlermeldung, jedoch befolgt er auch nicht den Befehl den ich ihm gegeben habe sondern druckt weiterhin über "FreePDF XP" anstatt über den KONICA.

Vielleicht kann mir ja einer von euch einen Tipp geben was ich falsch mache

Danke
MFG
Korny

Code: Alles auswählen

	Dim oMailMerge as Object
	
	oMailMerge = createunoservice("com.sun.star.text.MailMerge")
	oMailMerge.DataSourceName = "Datenbank"
	oMailMerge.DocumentURL = ConvertToUrl("C:\Vorlagen\Serienbrief.ott")
	oMailMerge.CommandType = 3
	oMailMerge.Command = "SELECT Col1 FROM Tabelle WHERE Col2 = 'String'"
	oMailMerge.OutputType = 1
'	oMailMerge.OutputUrl = ConvertToUrl("C:\Test\")
'	oMailMerge.SaveAsSingleFile = True
	oMailMerge.SinglePrintJobs = False
'	oMailMerge.Model.Printer(0).Value= "FreePDF XP"
	oMailMerge.Model.Printer(0).Value = "KONICA MINOLTA 362/282/222 PS"
'	oMailMerge.FileNameFromColumn = True
'	oMailMerge.Filenameprefix = "Dateiname"
	Dim MyProps() as Object
	oMailMerge.execute(MyProps())
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Mail Merge

Beitrag von DPunch »

Aloha

Probier es mal so (ohne Garantie, kann auch im Moment nichts testen):

Code: Alles auswählen

       Dim oMailMerge as Object
       
       oMailMerge = createunoservice("com.sun.star.text.MailMerge")
       oMailMerge.DataSourceName = "Datenbank"
       oMailMerge.DocumentURL = ConvertToUrl("C:\Vorlagen\Serienbrief.ott")
       oMailMerge.CommandType = 3
       oMailMerge.Command = "SELECT Col1 FROM Tabelle WHERE Col2 = 'String'"
       oMailMerge.OutputType = 1
    '   oMailMerge.OutputUrl = ConvertToUrl("C:\Test\")
    '   oMailMerge.SaveAsSingleFile = True
       oMailMerge.SinglePrintJobs = False
     '*****************************************************************
       Dim myPrinter(0) as new com.sun.star.beans.PropertyValue
       myPrinter(0).Name = "Name"
       myPrinter(0).Value = "KONICA MINOLTA 362/282/222 PS"
       oMailMerge.Model.setPrinter(myPrinter)
     '*****************************************************************
    '   oMailMerge.Model.Printer(0).Value= "FreePDF XP"
    '   oMailMerge.Model.Printer(0).Value = "KONICA MINOLTA 362/282/222 PS"
    '   oMailMerge.FileNameFromColumn = True
    '   oMailMerge.Filenameprefix = "Dateiname"
       Dim MyProps() as Object
       oMailMerge.execute(MyProps())
Korny1986
**
Beiträge: 22
Registriert: Fr, 11.12.2009 13:09
Wohnort: Korneuburg, NÖ

Re: Mail Merge

Beitrag von Korny1986 »

Super, danke funktioniert!
Korny1986
**
Beiträge: 22
Registriert: Fr, 11.12.2009 13:09
Wohnort: Korneuburg, NÖ

Re: Mail Merge

Beitrag von Korny1986 »

Haha, zu früh gefreut!

Bin beim näheren betrachten drauf gekommen, dass er immer den selben Datensatz verwendet.

In der normalen Serienbriefvorlage funktioniert dies aber ohne Probleme, daran kann es also nicht liegen!

Was hab ich noch vergessen einzustellen??
Heinz Bär
****
Beiträge: 130
Registriert: Mo, 28.03.2005 11:20
Wohnort: CH-6467 Schattdorf

Re: Mail Merge

Beitrag von Heinz Bär »

Hallo korny1986

Probier es mit der folgenden Subroutine:

Code: Alles auswählen

Function SB_mail_merge(url_vorlage)

Dim MailMerge as object
Dim oRowSet As object
Dim sql as string


sql = "SELECT * FROM serienbrief WHERE sb_user = '" & global_Ben_Name & "' ORDER BY sb_name"

oRowSet = createUnoService("com.sun.star.sdb.RowSet")
oRowSet.setPropertyValue("DataSourceName", global_DB_Name)
oRowSet.CommandType = com.sun.star.sdb.CommandType.COMMAND
oRowSet.setPropertyValue("Command", sql)
oRowSet.execute()


Print_auf = "2"												' Druck in Datei   <------- wieder entfernen
 
MailMerge = createunoservice("com.sun.star.text.MailMerge")
MailMerge.ActiveConnection = oConn
MailMerge.DataSourceName = global_DB_Name
MailMerge.DocumentURL = url_vorlage
MailMerge.CommandType = com.sun.star.sdb.CommandType.TABLE
MailMerge.Command = global_DB_Name & ".serienbrief"
MailMerge.ResultSet = oRowSet

MailMerge.OutputType = Print_auf	 ' 1 = Drucker,  2 = Datei
if Print_auf = 2 then
   MailMerge.OutputType = com.sun.star.text.MailMergeType.FILE
   MailMerge.SaveAsSingleFile = True
   MailMerge.OutputUrl = global_dr_url
end if

MailMerge.execute(Array())

End Function
Allerdings ist dort die Druckerauswahl nicht enthalten, da ich diese nicht brauchte.

Gruss
Heinz
Korny1986
**
Beiträge: 22
Registriert: Fr, 11.12.2009 13:09
Wohnort: Korneuburg, NÖ

Re: Mail Merge

Beitrag von Korny1986 »

Danke für deine Antwort Heinz! Leider hat mir deine Funktion das selbe Ergebnis zurückgeliefert, das einzige was ich ausklammern habe müssen war

Code: Alles auswählen

MailMerge.ActiveConnection = oConn
leider weiß ich nicht welches Object dort hineingeladen weden soll.
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Mail Merge

Beitrag von DPunch »

Aloha

Erstmal folgendes:
oMailMerge.CommandType = 3
Siehe auch:
http://api.openoffice.org/docs/common/r ... dType.html

Wenn überhaupt müsste es 2 sein.

Bei mir (Windows XP, OOo 3.11) sind auf SQL-Abfragen basierende MailMerges allerdings gar nicht erst möglich.
Du könntest mal probieren, ob statt

Code: Alles auswählen

oMailMerge.CommandType = 3
oMailMerge.Command = "SELECT Col1 FROM Tabelle WHERE Col2 = 'String'"
vielleicht

Code: Alles auswählen

oMailMerge.CommandType = com.sun.star.sdb.CommandType.TABLE
oMailMerge.Filter = "Col2 = 'String'"
oMailMerge.Command = "Tabelle"
funktioniert.
Antworten