Hallo Reinhard
ich sehe jetzt, was dein Problem ist.
myDoc=thiscomponent
dim arg(0) as New com.sun.star.beans.PropertyValue
arg(0).name="Name"
arg(0).value=printername
mydoc.setPrinter(arg())
Damit setzt du den Drucker nur für das Dokument, in dem der Makrocode
gespeichert ist
(wenn der Code in Meine Makros ist passiert gar nichts.)Mir fallen auf
die schnelle 2 mögliche Lösungen ein,
wobei ich nicht sicher bin, ob die erste funktioniert. die zweite sollte
jedoch sicher funktionieren.
1.
...
MyDialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
MyDialog.execute
filename=MyDialog.Files(0)
if filename="" then exit sub
Dim myProp(1) as new com.sun.star.beans.PropertyValue
myProp(0).name="MacroExecutionMode"
myProp(0).value = 0
myProp(1).name="Hidden"
myProp(1).value=True
oMergDocument = StarDesktop.loadComponentFromURL(filename,"_blank",0,myProp())
DialogLibraries.LoadLibrary( "Standard" )
dlgBeschreibung=DialogLibraries.Standard.Printdialog
...'Drucker auswählen Dialog
...
printdlg.Execute()
if printername<>"" and Filtertext<>"" then
dim arg(0) as New com.sun.star.beans.PropertyValue
arg(0).name="Name"
arg(0).value=printername
oMergDocument.setPrinter(arg()) 'hier setze ich in der original Datei, den Drucker
end if
oMergDocument.Store() 'Doc mit neuem Drucker als standard Speichern.
'(ich weis nicht, ob diese eigenschaft gespeichert wird.
oMergDocument.Close(False) 'Doc schließen
MailMerge=createUnoService("com.sun.star.text.MailMerge")
...
...
MailMerge.execute(Eigenschaften())
End sub
'2.Die Zweite Möglichkeit ist die, dass du den Serienbrief erst in eine
Datei Druckst, und dann diese Datei aufrufst,
den Drucker festlegst, Druckst und die Datei wieder Löscht. Das ist
meiner Ansicht nach eine Sichere Methode.:
Sub xxx
Dim myPrinter(0) as new com.sun.star.beans.PropertyValue
MyDialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
MyDialog.execute
filename=MyDialog.Files(0)
if filename="" then exit sub
oMailMerge = CreateUnoService("com.sun.star.text.MailMerge")
oMailMerge.DocumentURL = ConvertToURL(filename)
oMailMerge.DataSourceName = "Myelomodbc"
oMailMerge.CommandType = 1
oMailMerge.Command = "select * from myelomdata"
oMailMerge.OutputType = com.sun.star.text.MailMergeType.FILE
oMailMerge.OutputUrl =ConvertToURL(c:\Temp.odf) 'muss man anpassen und
gegebenenfalls schauen, ob FileNamePrefix gesetzt werde muß.
'oMailMerge.FileNamePrefix = "TempFile"
oMailMerge.SaveAsSingleFile=True
oMailMerge.execute(Array())
oMailMerge.dispose()
Dim myProp(1) as new com.sun.star.beans.PropertyValue
myProp(0).name="MacroExecutionMode"
myProp(0).value = 0
myProp(1).name="Hidden"
myProp(1).value=True
oMergDocument = StarDesktop.loadComponentFromURL("c:\Temp.odf","_blank",0,myProp())
DialogLibraries.LoadLibrary( "Standard" )
dlgBeschreibung=DialogLibraries.Standard.Printdialog
printdlg=CreateUnoDialog(dlgBeschreibung)
Formular = ThisComponent.DrawPage.Forms.getByIndex(0)
oPrintServer = CreateUnoService("com.sun.star.awt.PrinterServer")
oCore = CreateUnoService("com.sun.star.reflection.CoreReflection")
oClass = oCore.forName("com.sun.star.awt.XPrinterServer")
oMethod = oClass.getMethod("getPrinterNames")
aNames = oMethod.invoke(oPrintServer, Array())
printdlg.getControl("Printerliste").Model.StringItemList = aNames()
props=thisComponent.getPrinter()
printdlg.getControl("Printerliste").selectItem(props(0).value,true)
printdlg.Execute()
if printername<>"" and Filtertext<>"" then
dim arg(0) as New com.sun.star.beans.PropertyValue
arg(0).name="Name"
arg(0).value=printername
oMergDocument.setPrinter(arg())
end if
//
/ Dim printProp(4) as New com.sun.star.beans.PropertyValue/
//
oMergDocument/.Print(printProp()) 'Wenn du bestimmte Einstellungen willst
/'Oder
'oMergDocument/.Print(Array())/
oMergDocument.Kill 'Das erzeugte Dokument wieder Löschen.
End Sub
Gruß
Frieder
Am 06.11.2011 20:01, schrieb rh:
Mein Macro ist kein großes Geheimnis: zuerst wird das zu druckende
Dokument ausgewählt, danach mailmerge initialisiert. In dem
prindlg-Dialog wird ein Drucker aus der Liste der existierende Drucker
ausgewählt und danach mailmerge.execute zum Drucken aufgerufen.
Sub Serienbrief_erstellen
Dim MailMerge As Object
Dim Eigenschaften() As Object
Dim oTextDocument as Object
Dim URL As String
Dim outputpath as String
Dim filename as String
Dim Dummy()
Dim oPrintServer ' The print server service.
Dim oCore ' Get classes and other objects by name.
Dim oClass ' XPrinterServer class object.
Dim oMethod ' getPrinterNames method from the XPrinterServer class.
Dim aNames ' List of printer names.
dim props
Dim myPrinter(0) as new com.sun.star.beans.PropertyValue
Dim mydoc as object
MyDialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
MyDialog.execute
filename=MyDialog.Files(0)
if filename="" then exit sub
MailMerge=createUnoService("com.sun.star.text.MailMerge")
With MailMerge
.DataSourceName="Myelomodbc"
.DocumentURL=ConvertToURL(filename)
.CommandType=2
.Command="select * from myelomdata"
.Filter=FilterText
.OutputType=1
.SinglePrintJobs = False
End With
DialogLibraries.LoadLibrary( "Standard" )
dlgBeschreibung=DialogLibraries.Standard.Printdialog
printdlg=CreateUnoDialog(dlgBeschreibung)
Formular = ThisComponent.DrawPage.Forms.getByIndex(0)
oPrintServer = CreateUnoService("com.sun.star.awt.PrinterServer")
oCore = CreateUnoService("com.sun.star.reflection.CoreReflection")
oClass = oCore.forName("com.sun.star.awt.XPrinterServer")
oMethod = oClass.getMethod("getPrinterNames")
aNames = oMethod.invoke(oPrintServer, Array())
printdlg.getControl("Printerliste").Model.StringItemList = aNames()
props=thisComponent.getPrinter()
printdlg.getControl("Printerliste").selectItem(props(0).value,true)
printdlg.Execute()
if printername<>"" and Filtertext<>"" then
myDoc=thiscomponent
dim arg(0) as New com.sun.star.beans.PropertyValue
arg(0).name="Name"
arg(0).value=printername
mydoc.setPrinter(arg())
MailMerge.execute(Eigenschaften())
end if
if Filtertext="" then msgbox("Unzuläßige Auswahl '"+Filtertext+"'")
Reinhard
Am 2011-11-06 19:54, schrieb Frieder:
Am 06.11.2011 19:47, schrieb rh:
Das kann leider nicht funktionieren, weil es vor dem Aufruf von
/mailmerge.execute/ ja noch gar kein Dokument gibt, dem man
Eigenschaften zuweisen könnte.
Reinhard
Hallo
bevor du die Dokumente Drucken kannst, mußt du sie aber erst
erstellen. Dabei kannst du ihnen auch einen Drucker zuweisen.
es besteht die Möglichkeit, sie erst in eine Datei zu drucken, und
dann die Dateien per Makro zu Drucken.
wenn du nicht offenlegst , wie dein Makro funktioniert, dann kann dir
hier keiner helfen.
Gruß
Frieder
Am 2011-11-06 17:36, schrieb Frieder:
Am 06.11.2011 17:27, schrieb rh:
Ich habe einen Libreoffice-Basic Macro geschrieben um mit Adressdaten
aus einer Datenbank Serienbriefe zu drucken. Das funktioniert auch
wunderbar. Allerdings möchte ich gerne wählen können auf welchem
Drucker
die Serienbriefe tatsächlich gedruckt werden, also soetwas wie den
gewohnten Druckerdialog. Wie wird das gemacht? Ich habe trotz langem
Suchen leider keine Lösung finden können.
Hallo Reinhard
Hast du schon hier Geschaut?:
http://www.starbasicfaq.de/WiekannmandenDruckerwechseln..html
Gruß
frieder
--
Informationen zum Abmelden: E-Mail an users+help@de.libreoffice.org
Tips zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.