❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Makros zusammensetzen
Makros zusammensetzen
Mein Dokument enthält 13 Sheets.
1. Jedes Sheet enthält ein Makro welches das Blatt drucken oder als PDF speichern soll. Das klappt auch. Aber: Zuletzt kommt immer noch das Fenster mit den Druckereinstellungen. Geht es nicht auch ohne?
2. Ich möchte aus mehreren Sheets ein zusammenhängendes PDF abspeichern können. Kann ich einzelne Makros so zusammenhängen dass dies funktioniert?
3. Ein Sheet soll mehrere Druckbefehle für andere Sheets enthalten. Das heisst, das Sheet hat mehrere Tasten, welche den Druck anderer Sheets auslösen sollen.
Besten Dank für zielführende Bemerkungen
1. Jedes Sheet enthält ein Makro welches das Blatt drucken oder als PDF speichern soll. Das klappt auch. Aber: Zuletzt kommt immer noch das Fenster mit den Druckereinstellungen. Geht es nicht auch ohne?
2. Ich möchte aus mehreren Sheets ein zusammenhängendes PDF abspeichern können. Kann ich einzelne Makros so zusammenhängen dass dies funktioniert?
3. Ein Sheet soll mehrere Druckbefehle für andere Sheets enthalten. Das heisst, das Sheet hat mehrere Tasten, welche den Druck anderer Sheets auslösen sollen.
Besten Dank für zielführende Bemerkungen
Re: Makros zusammensetzen
Hallo,
die kurze Antwort: ja, das ist möglich.
Die spannende Frage ist, wo man ansetzen soll. Dazu wäre es sinnvoll erfahren
a) wie dein aktuelles Makro ausssieht
b) wie Nr. 2 und Nr. 3 konkret bedeuten (Welche Tabellen? Frei wählbar? ...)
die kurze Antwort: ja, das ist möglich.
Die spannende Frage ist, wo man ansetzen soll. Dazu wäre es sinnvoll erfahren
a) wie dein aktuelles Makro ausssieht
b) wie Nr. 2 und Nr. 3 konkret bedeuten (Welche Tabellen? Frei wählbar? ...)
Gruß,
mikele
mikele
Re: Makros zusammensetzen
Das Dokument enthält insgesamt 13 Sheets.
Whg01 bis Whg09 sind einzelne Sheets mit je einem Makro zum exportieren als pdf.
So sieht das einzelne Makro aus:
REM ***** BASIC *****
sub Whg01
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 = "ToPoint"
args1(0).Value = "$A$1:$T$40"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(3) as new com.sun.star.beans.PropertyValue
args2(0).Name = "URL"
args2(0).Value = "file:///Users/danielherrmann/Desktop/Whg01.pdf"
args2(1).Name = "FilterName"
args2(1).Value = "calc_pdf_Export"
args2(2).Name = "FilterData"
args2(2).Value = Array(Array("UseLosslessCompression",.........
args2(3).Name = "SelectionOnly"
args2(3).Value = false
dispatcher.executeDispatch(document, ".uno:ExportTo", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
end sub
Makro ENDE
Nun möchte ich eben die 9 (eigentlich gleichen) Makros zusammenhängen.
Ich müsste also in jedem Makroteil das entsprechende Sheet aufrufen können...
Re: Makros zusammensetzen
Hallo,
um die aktuelle Tabelle (mit ihrem Namen) als pdf zu exportieren genügt folgendes Makro:
Dieses kannst du an jede Schaltfläche auf den 9 Tabellen binden.
Um jetzt mehrere Tabellen als ein pdf zu exportieren, müssen deren Zellbereich gesammelt werden (mit ein paar Kommentaren versehen):
Probier' mal, ob es so läuft.
um die aktuelle Tabelle (mit ihrem Namen) als pdf zu exportieren genügt folgendes Makro:
Code: Alles auswählen
sub pdf_aktuelle_Tabelle
oDoc=ThisComponent
oTab=oDoc.CurrentController.ActiveSheet
sName=oTab.Name
Dim arg(2) as new com.sun.star.beans.PropertyValue
arg(0).Name = "URL"
arg(0).Value = "file:///Users/danielherrmann/Desktop/" & sName & ".pdf"
arg(1).Name = "FilterName"
arg(1).Value = "calc_pdf_Export"
dim aFilterData(0) as new com.sun.star.beans.PropertyValue
aFilterData(0).Name = "Selection"
aFilterData(0).Value = oTab
arg(2).Name = "FilterData"
arg(2).Value = aFilterData()
ThisComponent.storeToUrl(arg(0).value,arg())
end subUm jetzt mehrere Tabellen als ein pdf zu exportieren, müssen deren Zellbereich gesammelt werden (mit ein paar Kommentaren versehen):
Code: Alles auswählen
sub pdf_einzelne_Tabellen
odoc=thiscomponent
sVerzeichnis="C:\Users\danielherrmann\Desktop\"
sDateiname="wohnungen.pdf"
'Container für Mehrfachbereiche erstellen
obereiche = odoc.createInstance("com.sun.star.sheet.SheetCellRanges")
'Tabellennamen der zu exportierenden Tabellen, beliebig zu erweitern
aTabellen=array("Whg01", "Whg02")
for i=0 to ubound(aTabellen)
oTab=odoc.sheets.getbyname(aTabellen(i))
'Sind Druckbereiche definiert? Wenn ja, diese nehmen, ansonsten die ganze Tabelle
aDruckbereiche=oTab.printareas
if ubound(aDruckbereiche)<0 then
obereiche.addRangeAddress(oTab.getRangeAddress, 0) 'ganze Tabelle
else
for k=0 to ubound(aDruckbereiche)
obereiche.addRangeAddress(aDruckbereiche(k), 0)
next
end if
next
'Argumente festlegen
Dim arg(2) as new com.sun.star.beans.PropertyValue
arg(0).Name = "URL"
'vollständigen Dateiname, konvertiert URL-Format
arg(0).Value = convertToUrl(sVerzeichnis & sDateiname)
arg(1).Name = "FilterName"
arg(1).Value = "calc_pdf_Export"
dim aFilterData(0) as new com.sun.star.beans.PropertyValue
aFilterData(0).Name = "Selection"
aFilterData(0).Value = obereiche
arg(2).Name = "FilterData"
arg(2).Value = aFilterData()
'Datei schreiben
odoc.storetoUrl(arg(0).value,arg())
end subGruß,
mikele
mikele
Re: Makros zusammensetzen
Hallo,
das Ganze noch etwas komprimierter:
das Ganze noch etwas komprimierter:
Code: Alles auswählen
sub aktuelle_tabelle
oDoc=ThisComponent
oTab=oDoc.CurrentController.ActiveSheet
sPfad="file:///Users/danielherrmann/Desktop/"
sDateiname=oTab.Name & ".pdf"
pdf_export_Tabellen(,sPfad,sDateiname)
end sub
sub mehrere_tabellen
sPfad="file:///Users/danielherrmann/Desktop/"
sDateiname="tabellen.pdf"
aTabellen=Array("Tabelle1","Tabelle3")
pdf_export_Tabellen(Array(oTab.Name), sPfad, sDateiname)
end sub
function pdf_export_Tabellen(optional aTabellen, optional sPfad, optional sDateiname)
'aTabellen ... Array der Tabellennamen, Standard: aktuelle Tabelle
'sPfad ... String des Dateipfades (inkl. letzten Trennzeichen), Standard: Verzeichnis des aktuellen Dokuments
'sDateiname ... String des Dateinamens (inkl. .pdf), Standard: aktueller Dateiname.pdf
odoc=thiscomponent
if isMissing(aTabellen) then
oTab=oDoc.CurrentController.ActiveSheet
aTabellen=Array(oTab.Name)
end if
akt_url=split(oDoc.Url,"/")
akt_Name=akt_url(uBound(akt_url))
akt_url(uBound(akt_url))=""
if isMissing(sPfad) then
sPfad=join(akt_url,"/")
end if
if isMissing(sDateiname) then
sDateiname=left(akt_Name,len(akt_Name)-4) & ".pdf"
end if
'Container für Mehrfachbereiche erstellen
obereiche = odoc.createInstance("com.sun.star.sheet.SheetCellRanges")
for i=0 to ubound(aTabellen)
oTab=odoc.sheets.getbyname(aTabellen(i))
aDruckbereiche=oTab.printareas
if ubound(aDruckbereiche)<0 then
obereiche.addRangeAddress(oTab.getRangeAddress, 0) 'ganze Tabelle
else
for k=0 to ubound(aDruckbereiche)
obereiche.addRangeAddress(aDruckbereiche(k), 0)
next
end if
next
'der eigentliche pdf-Export
'
'Argumente festlegen
Dim arg(2) as new com.sun.star.beans.PropertyValue
arg(0).Name = "URL"
arg(0).Value = convertToUrl(sPfad & sDateiname)
arg(1).Name = "FilterName"
arg(1).Value = "calc_pdf_Export"
dim aFilterData(0) as new com.sun.star.beans.PropertyValue
aFilterData(0).Name = "Selection"
aFilterData(0).Value = obereiche
arg(2).Name = "FilterData"
arg(2).Value = aFilterData()
'Datei schreiben
odoc.storetoUrl(arg(0).value,arg())
end function
Gruß,
mikele
mikele
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.