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
Seit Anfang des Jahrtausends absolut Linux-begeistert und Fan von Open Source. Raspberry Pi Bastler der ersten Stunde und nach wie vor begeistert von dem kleinen Stück Hardware, auf dem
er tolle Projekte umsetzt. Teilt hier seine Erfahrungen mit Nextcloud, Pi-hole, YubiKey und zu anderen spannenden IT-Themen. Nutzt
beruflich viel Excel. Sitzt vor einem riesen 49″ Monitor, nutzt Windows zum Arbeiten, Linux auf seinen Servern und virtuellen Maschinen und hört dabei Spotify und Musik über seinen RadioPi.