🙏 Helfen Sie mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Makro, welches bestimmte Tabellen als pdf speichert

Alles zur Programmierung im LibreOffice.
Antworten
Selters99
Beiträge: 5
Registriert: Do 6. Feb 2025, 09:13

Makro, welches bestimmte Tabellen als pdf speichert

Beitrag von Selters99 » Fr 7. Feb 2025, 13:06

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

mikele
* LO-Experte *
Beiträge: 1929
Registriert: Mo 1. Aug 2011, 20:51

Re: Makro, welches bestimmte Tabellen als pdf speichert

Beitrag von mikele » Fr 7. Feb 2025, 13:08

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
Gruß,
mikele

Selters99
Beiträge: 5
Registriert: Do 6. Feb 2025, 09:13

Re: Makro, welches bestimmte Tabellen als pdf speichert

Beitrag von Selters99 » So 9. Feb 2025, 13:50

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


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.



Antworten