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