Seite 1 von 1
Makro, welches bestimmte Tabellen als pdf speichert
Verfasst: Fr 7. Feb 2025, 13:06
von Selters99
Hallo Forummitglieder,
ich versuche einen häufugen Arbeitsschritt zu automatisieren:
Gesamtes Dokument (Total.ods) unter seinem jetzigen Namen aktualisiert speichern + 2 der Tabellen des Dokuments als .pdf mit verschiedenen Namen (Total.pdf und Total-Mo.pdf) speichern
Ich habe schon einige VB-Makros aus dem Netz getestet, aber keines macht genau das, was ich gerne hätte. Kennt ihr Makros, die so etwas können - oder auch nur einen Teil meines Arbeitsschrittes erledigen?
Danke für die Antworten und viele Grüße,
Jens
Nach oben
Re: Makro, welches bestimmte Tabellen als pdf speichert
Verfasst: Fr 7. Feb 2025, 13:08
von mikele
Hallo,
hier mal eine Variante (ich hoffe, die Kommentare sind ausreichend)
Code: Alles auswählen
sub pdf_einzelne_Tabellen
odoc=thiscomponent
'aktuellen Pfad und Name in Array auslesen
'letztes Element enthält den Dateinamen
aPfad=split(oDoc.Url,"/")
'Speichern des Dokuments (wenn schon mal unter dem Namen gespeichert)
oDoc.store
'alternativ: Speichern unter Dateiname, dann die folgenden Zeilen entkommentieren
'dateiname="Total.ods"
'aPfad(ubound(aPfad))=dateiname
'url_neu=convertToUrl(join(aPfad,"/"))
'Dim dummy()
'odoc.storeAsURL(url_neu, dummy)
'pdf-Export
'Tabellennamen der zu exportierenden Tabellen und zugehöriger Dateiname -> entsprechend anpassen
aTabellen=Array(Array("Tabelle1", "Total.pdf"), Array("Tabelle2","Total-Mo.pdf"))
'Exportparameter vorbereiten
Dim arg(2) as new com.sun.star.beans.PropertyValue
arg(0).Name = "URL"
'Value später
arg(1).Name = "FilterName"
arg(1).Value = "calc_pdf_Export"
dim aFilterData(0) as new com.sun.star.beans.PropertyValue
aFilterData(0).Name = "Selection"
'Value später
arg(2).Name = "FilterData"
'Value später
for i=0 to ubound(aTabellen)
'Container für Mehrfachbereiche erstellen
obereiche = odoc.createInstance("com.sun.star.sheet.SheetCellRanges")
'Zugriff auf Tabelle
oTab=odoc.sheets.getbyname(aTabellen(i)(0))
'zur Sicherheit eine Unterscheidung, falls irgendwo Druckbereiche definiert sind
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) 'festgelegte Druckbereiche
next
end if
'Exportparamter vervollständigen
aPfad(ubound(aPfad))=aTabellen(i)(1)
arg(0).Value =convertToUrl(join(aPfad,"/"))
aFilterData(0).Value = obereiche
arg(2).Value = aFilterData()
'Export als pdf
odoc.storeToUrl(arg(0).value,arg())
next
end sub
Re: Makro, welches bestimmte Tabellen als pdf speichert
Verfasst: So 9. Feb 2025, 13:50
von Selters99
Danke mikele,
funktioniert gut. Ich habe es noch leicht angepasst, sodass es für die PDF-Dateien, den Namen des aktuellen Dokumentes + Extraendung verwendet:
Code: Alles auswählen
REM ***** BASIC *****
sub sapdf
odoc=thiscomponent
'aktuellen Pfad und Name in Array auslesen
'letztes Element enthält den Dateinamen
aPfad=split(oDoc.Url,"/")
aName=split(aPfad(UBound(aPfad)),".")
'die Namen der pdf-Dateien sollen dem des Dokumentes entsprechen bzw. +"-Mo" lauten
fName=aName(LBound(aName)) + ".pdf"
fName2=aName(LBound(aName)) + "-Mo.pdf"
'Speichern des Dokuments (wenn schon mal unter dem Namen gespeichert)
oDoc.store
'alternativ: Speichern unter Dateiname, dann die folgenden Zeilen entkommentieren
'dateiname="Total.ods"
'aPfad(ubound(aPfad))=dateiname
'url_neu=convertToUrl(join(aPfad,"/"))
'Dim dummy()
'odoc.storeAsURL(url_neu, dummy)
'pdf-Export
'Tabellennamen der zu exportierenden Tabellen und zugehöriger Dateiname -> entsprechend anpassen
aTabellen=Array(Array("Druck", fName), Array("DruckMo",fName2))
'Exportparameter vorbereiten
Dim arg(2) as new com.sun.star.beans.PropertyValue
arg(0).Name = "URL"
'Value später
arg(1).Name = "FilterName"
arg(1).Value = "calc_pdf_Export"
dim aFilterData(0) as new com.sun.star.beans.PropertyValue
aFilterData(0).Name = "Selection"
'Value später
arg(2).Name = "FilterData"
'Value später
for i=0 to ubound(aTabellen)
'Container für Mehrfachbereiche erstellen
obereiche = odoc.createInstance("com.sun.star.sheet.SheetCellRanges")
'Zugriff auf Tabelle
oTab=odoc.sheets.getbyname(aTabellen(i)(0))
'zur Sicherheit eine Unterscheidung, falls irgendwo Druckbereiche definiert sind
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) 'festgelegte Druckbereiche
next
end if
'Exportparamter vervollständigen
aPfad(ubound(aPfad))=aTabellen(i)(1)
arg(0).Value =convertToUrl(join(aPfad,"/"))
aFilterData(0).Value = obereiche
arg(2).Value = aFilterData()
'Export als pdf
odoc.storeToUrl(arg(0).value,arg())
next
end sub
Wie setzt man den Thread auf "gelöst" ?
Danke und viele Grüße,
Jens