gelöst: nur (Druck)-Bereich eines sheets für Makro nutzen
Verfasst: Mi, 22.08.2012 11:07
Hallo Experten,
ich habe mit einem Bekannten (hauptsächlich er) ein Makro1 geschrieben, das nur den Druckbereich aus einem Tabellenblatt mit Namen versehen und als pdf an einen vorgegebenen Speicherpfad/Ort speichern soll.
Was funktioniert: den Namen übernimmt das Makro aus Zelle u16=string2 und den Speicherpfad aus u19=string1 und erzeugt ein pdf.
Was nicht funktioniert: Als pdf werden alle 8 Tabellenblätter komplett gespeichert. Der Befehl aus dem aktuellen/mit Namen benannten Tabellenblatt nur den Druckbereich zu speichern klappt nicht.
Der Druckbereich wurde per Hand "Format-Druckbereiche-festlegen" oder über ein Namenfeld (im Makro="druck_best1") mit Druckbereich C1:O54 angelegt/markiert, bevor das Makro ausgeführt wird.
Nutze oo3.3 unter Apple Leopard. Habe Datei idR als .xls vorliegen aber auch als .ods ausprobiert.
Ein anderes Makro2 habe ich im Forum gefunden, dass das gleiche bewirken soll aber auch daran scheitert, nur den Druckbereich des Tabellenblattes zu speichern.
Hätte jemand eine Idee, wie/wo man eine Änderung anbringen muss, damit immer nur der Druckbereich des aktiven Tabellenblattes als pdf gespeichert wird?
Für Vorschläge wäre ich dankbar!
Grüße
wasty
Nachfolgend das Makro1 mit übernahme des Speicherpfades aus der Tabelle
und das Makro2, welches ich hier im Forum gefunden habe.
ich habe mit einem Bekannten (hauptsächlich er) ein Makro1 geschrieben, das nur den Druckbereich aus einem Tabellenblatt mit Namen versehen und als pdf an einen vorgegebenen Speicherpfad/Ort speichern soll.
Was funktioniert: den Namen übernimmt das Makro aus Zelle u16=string2 und den Speicherpfad aus u19=string1 und erzeugt ein pdf.
Was nicht funktioniert: Als pdf werden alle 8 Tabellenblätter komplett gespeichert. Der Befehl aus dem aktuellen/mit Namen benannten Tabellenblatt nur den Druckbereich zu speichern klappt nicht.
Der Druckbereich wurde per Hand "Format-Druckbereiche-festlegen" oder über ein Namenfeld (im Makro="druck_best1") mit Druckbereich C1:O54 angelegt/markiert, bevor das Makro ausgeführt wird.
Nutze oo3.3 unter Apple Leopard. Habe Datei idR als .xls vorliegen aber auch als .ods ausprobiert.
Ein anderes Makro2 habe ich im Forum gefunden, dass das gleiche bewirken soll aber auch daran scheitert, nur den Druckbereich des Tabellenblattes zu speichern.
Hätte jemand eine Idee, wie/wo man eine Änderung anbringen muss, damit immer nur der Druckbereich des aktiven Tabellenblattes als pdf gespeichert wird?
Für Vorschläge wäre ich dankbar!
Grüße
wasty
Nachfolgend das Makro1 mit übernahme des Speicherpfades aus der Tabelle
Code: Alles auswählen
REM ***** BASIC *****
sub best_dr_2
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 3 rem hier 3.Tabellenblatt (von ca 8Stk)
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "druck_best1" rem Bereich festlegen und Namen vergeben zB druck_best1; hier C1:O54
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(2) as new com.sun.star.beans.PropertyValue
oDoc = thisComponent
otable=oDoc.Sheets(2) rem mail=0 !!!! zählt 0,1,2 ...
ocell=otable.getCellbyPosition(20, 15) 'Feld mit Dateiname u16 1.=0 !!!
oString2 = ocell.String
oDoc = thisComponent
otable=oDoc.Sheets(2)
ocell=otable.getCellbyPosition(20, 18) 'Feld mit Pfad zum speichern (bei Mac zB.string1="/users/bka/desktop/"+ string2=1974 Meier,Gerd
oString1 = ocell.String
args3(0).Name = "URL"
args3(0).Value = "file:///" & oString1 & oString2 & ".pdf"
rem args3(0).Value = "/users/bka/desktop/...string2...pdf"
args3(1).Name = "FilterName"
args3(1).Value = "calc_pdf_Export"
args3(2).Name = "FilterData"
rem ich denke mal der folgende Absatz ist nicht so wichtig (aber sehr lang!)
args3(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,false,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("EmbedStandardFonts",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("AllowDuplicateFieldNames",0,false,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("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPermissionPassword",0,Array(),com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Selection",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))
dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args3())
end sub
und das Makro2, welches ich hier im Forum gefunden habe.
Code: Alles auswählen
Sub Store_to_PDF1
oCalc = thisComponent
oSheet = oCalc.sheets().getByName("RuV") 'Tabellennamen anpassen (speichert allerdings alle Tabellenblätter)
Filename = oSheet.getCellRangeByName("q17").string 'Zellinhalt auslesen für Dateinamen
myView = oCalc.CurrentController
myView.setActiveSheet(oSheet)
oZellRange = oSheet.getCellRangeByName("$c$1:$o$44") 'Bereich anpassen (speichert allerdings alle Tabellenblätter)
oCursor = oSheet.createCursorByRange(oZellRange)
oAdress = oCursor.RangeAddress
Dim aDruckbereich(0)
aDruckbereich(0) = oAdress
oSheet.setPrintAreas(aDruckbereich())
Dim myProps(0) as New com.sun.star.beans.PropertyValue
sUrl= "file:///C:/drucktest/" & Filename & ".pdf" 'Speicherort anpassen
myProps(0).Name="FilterName"
myProps(0).Value = "calc_pdf_Export"
oCalc.storetoUrl(sUrl,myProps())
oSheet.setprintareas(Array())'Druckbereich löschen
End Sub