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 [email protected]
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

Antwort per Email an