OpenOffice.org – Drucken mit Makros

In diesem Beispiel wird gezeigt, wie man mit Makros eine Tabelle in ein

  • PDF-Dokument druckt
  • und dieses automatisch in einem definierten Verzeichnis speichert
  • und mit einer definierten Namen versieht
  • .

1. Schritt: Makro erstellen

Extras –> Makros –> Makros verwalten –> OpenOffice.org Basic

Wählen Sie ihr Makro aus und Klicken Sie auf Bearbeiten.
Ein neues Fenster öffnet sich.

Code

Kopieren Sie den Code und fügen Sie ihn in das soeben aufgegangene Fenster ein.

REM  *****  BASIC  *****

Sub Drucken_Windows


rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
dim o_sheets as object
dim o_file as object
rem ----------------------------------------------------------------------
rem get access to the document
oCalc = thiscomponent
Sheet = oCalc.Sheets(Tabelle1)
cell = sheet.getCellRangeByName("B4")
cell1 = sheet.getCellRangeByName("B5")
o_file       = thiscomponent
o_sheets   = o_file.sheets
Nachname = Cell.String
Vorname = cell1.string
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")



rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///C:/Pfad_zum_Verzeichnis/"& "VD_631_" & Nachname & "_" & Vorname & "_" & format(now(),"yyyymmdd") & ".pdf"
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
args1(2).Name = "FilterData"
args1(2).Value = Array(Array("UseLosslessCompression",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Quality",0,90,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ReduceImageResolution",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTaggedPDF",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenBookmarkLevels",0,-1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FormsType",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportFormFields",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerToolbar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialView",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Magnification",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Zoom",0,100,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageLayout",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Changes",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableCopyingOfContent",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableTextAccessForAccessibilityTools",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportLinksRelativeFsys",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ConvertOOoTargetToPDFTarget",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DocumentOpenPassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PermissionPassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageRange",0,"1,2",com.sun.star.beans.PropertyState.DIRECT_VALUE))
args1(3).Name = "SelectionOnly"
args1(3).Value = false

dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args1())



End Sub

Anschließend den Code abspeichern –> Klick auf die Diskette

2. Schritt: Code bearbeiten

Es gilt nun den Code an die eigene Tabelle anzupassen. Die zu ändernden Passagen sind bereits im oberen Abschnitt rot markiert:

Der nachfolgende Code bewirkt

  • Export ins PDF-Format
  • Speicherung der Datei im Pfad_zum_Verzeichnis
  • Dateibenennung: VD_631_Nachname_Vorname_yyyyddmm

Sheet = oCalc.Sheets(VD631)

  • VD631 ist durch den Namen der Tabelle zu ändern, die die Daten enhält

cell = sheet.getCellRangeByName(“E7”)
cell1 = sheet.getCellRangeByName(“E8”)

  • E7 in Tabelle VD631 enthält den Nachnamen
  • E8 in Tabelle VD631 enthält den Vornamen

Nachname = Cell.String
Vorname = cell1.string

  • Nachname = Variable für Dateibenennung
  • Vorname = Variable für Dateibenennung

args1(0).Value = “file:///C:/Pfad_zum_Verzeichnis/”& “VD_631_” & Nachname & “_” & Vorname & “_” & format(now(),”yyyymmdd”) & “.pdf”

  • C:/Pfad_zum_Verzeichnis ist abzuändern. Geben Sie den Ort an, wo die PDF-Dokumente gespeichert werden sollen. Bei Linux lautet der Pfad z.B. file:///home/benutzer/Dokumente
  • Ausgabeformat der Datei
    format(now(),”yyyyddmm”) gibt das Datum aus, an dem das Dokument gedruckt wird. y = Jahr; m = Monat; d = Tag

Ablauf

Der Code sucht in der Tabelle VD631 in der Zelle E7 nach dem Nachnamen und in Zelle E8 nach dem Vornamen. Diese beiden Werte werden für die Dateibenennung benötigt.
Nun wird die Datei im PDF-Format in das Verzeichnis Pfad_zum_Verzeichnis mit der Benennung VD631_<Wert_aus_E7>_<Wert_aus_E8>_20102709.pdf ausgegeben.

Testlauf

Testlauf starten –> BASIC-Programm ausführen anklicken

Schauen Sie in ihrem definierten Verzeichnis nach, ob Sie dort eine neue PDF-Datei finden.

3. Schritt: Button zum Drucken einfügen

Zum Einfügen eines Buttons muss die Symbolleiste “Zeichnen” aktiviert sein –> Menüleiste –> Ansicht –> Symbolleisten –> Zeichnen. Wählen Sie “Rechteck” aus und erstellen Sie ein Feld irgendwo in ihrere Tabelle.

Wählen Sie “Rechteck” aus und erstellen Sie ein Feld irgendwo in ihrere Tabelle. Mit [F2] können Sie Text einfügen. Klicken Sie dann mit der Rechtenmaustaste auf das Feld un wählen “Makro zuweisen …

Hangeln Sie sich bis zum neu erstellten Makro “Drucken” durch und klicken auf “Zuweisen”. Danach können Sie das Fenster über den “OK“-Button verlassen.

Ein Klick auf den neu erstellten Button erzeugt nun ein PDF-Datei in dem definierten Verzeichnis mit der definierten Benennung.

Problemlösung

Zwar wurde im Code "PageRange",0,"1,2" definiert, dass nur die 1. und 2. Seite der Tabelle VD631 gedruckt werden sollen. Funktioniert das nicht. Kann man über ein kleines Workaround behelfen.
Menüleiste –> Druckbereiche
In dem Bereich einfach die Tabelle definieren, die gedruckt werden soll, die Einstellungen sind auch im Makro gültig, ohne dieses zu ändern oder weiter anzupassen..

Weitere Möglichkeit

Anstatt wie im obigen Code die Zellen mit ihrem “Namen” anzuwählen, z.B. E7, kann man sie auch über die Koordinaten auswählen.
Der nachfolgende Code hat die gleichen Funktionen wie der obige, jedoch werden die Zellen anders angesprochen.

sub Drucken
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object

dSheet=ThisComponent.sheets.getByName("Tabelle1") 
Nachname=dSheet.getCellByPosition(4,3).string 
Lieferant=dSheet.getCellByPosition(4,18).string 

document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///C:/Pfad_zum_Verzeichnis/" & "VD_631_" & Nachname & "_" & Vorname & "_" & format(now(),"yyyyddmm") & ".pdf"
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
args1(2).Name = "FilterData"
args1(2).Value = Array(Array("UseLosslessCompression",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Quality",0,90,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ReduceImageResolution",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTaggedPDF",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenBookmarkLevels",0,-1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FormsType",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportFormFields",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerToolbar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialView",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Magnification",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Zoom",0,100,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageLayout",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Changes",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableCopyingOfContent",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableTextAccessForAccessibilityTools",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportLinksRelativeFsys",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ConvertOOoTargetToPDFTarget",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DocumentOpenPassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PermissionPassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageRange",0,"1,2",com.sun.star.beans.PropertyState.DIRECT_VALUE))
args1(3).Name = "SelectionOnly"
args1(3).Value = false

dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args1())



end sub

Quelle: http://www.ooo-portal.de/index.php?module=pnForum&func=viewtopic&topic=4529&start=0

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.