🍀 Das LibreOffice Forum braucht HEUTE Ihre Hilfe! 🍀
❤️ Spenden Sie jetzt und sichern Sie die Zukunft unseres LibreOffice-Forums ❤️
Ihre Spende hilft, die Community offen, werbefrei (bei Registrierung) und lebendig zu halten. Vielen lieben Dank!

🙏 DANKE >> << DANKE 🙏

>> Das LibreOffice-Forum lebt von Ihnen – und von vielen Experten, die freiwillig und kostenlos ihr Wissen teilen.<<
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: 7
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: 2046
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: 7
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:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das laufende.
Einfach per Kreditkarte oder PayPal. Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.



❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten