Programmierung unter AOO/LO (StarBasic, Python, Java, ...)
Moderator: Moderatoren
Korny1986
**
Beiträge: 22 Registriert: Fr, 11.12.2009 13:09
Wohnort: Korneuburg, NÖ
Beitrag
von Korny1986 » Mo, 01.03.2010 17:49
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
Beitrag
von DPunch » Mo, 01.03.2010 18:28
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Ö
Beitrag
von Korny1986 » Mo, 01.03.2010 18:36
Super, danke funktioniert!
Korny1986
**
Beiträge: 22 Registriert: Fr, 11.12.2009 13:09
Wohnort: Korneuburg, NÖ
Beitrag
von Korny1986 » Mo, 01.03.2010 19:17
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
Beitrag
von Heinz Bär » Di, 02.03.2010 10:43
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Ö
Beitrag
von Korny1986 » Di, 02.03.2010 14:22
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
leider weiß ich nicht welches Object dort hineingeladen weden soll.
DPunch
*******
Beiträge: 1112 Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg
Beitrag
von DPunch » Di, 02.03.2010 16:09
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.