Seite 1 von 1

spezielle sheets auswählen und als pdf speichern

Verfasst: So 4. Dez 2016, 14:26
von paulderfinne
Hallo liebe LO-Gemeinde,

ähnliche Themen sind hier bestimmt schon besprochen worden, ich habe auch ähnliche Themen gefunden, werde aber nicht klug daraus. Mein Problem steht schon in der Überschrfit. Bisher habe ich pdf-Dateien nur aus dem Writer heraus als pdf exporiert:

Code: Alles auswählen

sub SpeichernAlsPDF
   Dim myProps(0) as New com.sun.star.beans.PropertyValue
   myDoc = thisComponent
   oldUrl=myDoc.url
   sUrl=Left(oldUrl, Len(oldUrl) - 3) + "pdf" 
   myProps(0).Name="FilterName" 
   myProps(0).Value = "writer_pdf_Export"
   myDoc.storetoUrl(sUrl,myProps())
end Sub
Wie man sieht wird hier der vorhandenen Dateinamen mit .pdf ersetzt. Nun möchte ich aber das ganze aus Calc heraus machen und zwar so, dass zwei sheets, deren Namen durch die aktuelle Kalenderwochennummer + die darauf folgende festgelegt sind als eine pdf gespeichert werden.

Zusammengefasst:
1. Wie bekomme ich im Makro die aktuelle Wochennummer (im Sheet ist das die Funktion: =KALENDERWOCHE(C3;21))
2. Wie wähle ich zum Exportieren zwei genau definierte sheets aus (Sie heißen auch beispielsweise KW48 und KW49)
3. Wie mache ich aus einem writer-export einen calc-export?

Es wäre schrecklich lieb, wenn mir da einer helfen könnte.

Re: spezielle sheets auswählen und als pdf speichern

Verfasst: So 4. Dez 2016, 15:57
von gogo
Hallo Paul

die aktuelle Kalenderwoche bekommst Du mit

Code: Alles auswählen

format(date, "ww")
Einzelne Seiten des pdfs ist schwierig, da die "PageRange" Properties Funktion nicht funktionert.

normalerweise würde:

Code: Alles auswählen

sub storeToPDF()

 oDoc   = ThisComponent
 oController = oDoc.getCurrentController()

 dim aMediaDescriptor(1) as new com.sun.star.beans.PropertyValue
 aMediaDescriptor(0).Name = "FilterName"
 aMediaDescriptor(0).Value = "calc_pdf_Export"
 
 aMediaDescriptor(1).Name = "PageRange"
 aMediaDescriptor(1).Value = ("1,3")

 oDoc.storeToURL("file:///tmp/test.pdf", aMediaDescriptor())

end sub
ausreichen, aber das funktioniert nicht, es werden immer alle Seiten der Datei exportiert.

Wenn Du genau weisst welche Seiten Du brauchst, kannst Du unter Linux mit einem shell-Kommando nachhelfen:

Code: Alles auswählen

sub storeToPDF()

 oDoc   = ThisComponent
 oController = oDoc.getCurrentController()

 dim aMediaDescriptor(0) as new com.sun.star.beans.PropertyValue
 aMediaDescriptor(0).Name = "FilterName"
 aMediaDescriptor(0).Value = "calc_pdf_Export"
 
 oDoc.storeToURL("file:///tmp/test.pdf", aMediaDescriptor())

'holt die Seiten 1 und 3 aus /tmp/test.pdf und speichert sie unter /tmp/Dokument.pdf
shell("pdftk /tmp/test.pdf cat 1 3 output /tmp/Dokument.pdf")

end sub

Re: spezielle sheets auswählen und als pdf speichern

Verfasst: So 4. Dez 2016, 16:26
von paulderfinne
Vielen Dank gogo,

das mit dem shell-Befehl ist ja eine Superidee. Ich wollte über die Shell die Dateien in's nternet schieben (scp...). Du hast mir echt geholfen. Ich werde mich sofort dranmachen.

Edit: @gogo: bist du sicher, dass der Kalenderwochenbefehl die europäische Woche ausgibt?

Re: spezielle sheets auswählen und als pdf speichern

Verfasst: So 4. Dez 2016, 17:13
von mikele
Hallo,
im folgenden Makro kannst du die gewünschten Tabellen auswählen, die dann als pdf exportiert werden.

Code: Alles auswählen

sub pdf_einzelne_Tabellen
	odoc=thiscomponent
	'Auswahl der Tabellen
	obereiche = odoc.createInstance("com.sun.star.sheet.SheetCellRanges")
	do 
		tabelle=inputbox ("Welche Tabelle soll exportiert werden?")
		if odoc.sheets.hasbyname(tabelle) then 
			obereiche.addRangeAddress(odoc.sheets.getbyname(tabelle).getRangeAddress, 0)
		else
			If tabelle>"" then msgbox "Diese Tabelle existiert nicht"
		end if
	loop until tabelle="" 'Abbruch der Abfrage nach leerer Eingabe

	'der eigentliche pdf-Export
	'
	'Argumente festlegen
	Dim arg(2) as new com.sun.star.beans.PropertyValue
	arg(0).Name = "URL"	
	arg(0).Value = Left(odoc.url, Len(odoc.url) - 3) + "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 = obereiche
	arg(2).Name = "FilterData"
	arg(2).Value = aFilterData()

	'Datei schreiben
	odoc.storetoUrl(arg(0).value,arg())
	
end sub

Re: spezielle sheets auswählen und als pdf speichern

Verfasst: Mo 5. Dez 2016, 08:27
von paulderfinne
Vielen Dank, auch an dich Mikele. Scheint ja doch mit BASOIC-Mitteln zu funzen. Habe jetzt aber erstmal mit gogos Idee gespielt.

Re: spezielle sheets auswählen und als pdf speichern

Verfasst: Mo 5. Dez 2016, 11:30
von gogo
Be mir ist's die europäische Woche:

Code: Alles auswählen

print "1.1.2016" & " KW:" & format("1.1.2016","ww = nnnn")
print "1.1.2016" & " KW:" & format("1.1.2015","ww = nnnn")
Im allgemeinen hält sich LO an ISO-Standards, anders als Firmen die glauben, dass sie's besser wissen...

Es würde mich nicht wundern, wenn auf einem US-Rechner die US-Woche angezeigt würde.

Re: spezielle sheets auswählen und als pdf speichern

Verfasst: So 11. Dez 2016, 13:29
von paulderfinne
Vielen Dank euch Beiden. Ich habe eure Anregungen benutzt und das gewünschte erreicht. (Bin erst heute zum Programmieren gekommen)

Cool wäre noch, wenn ich es schaffen könnte, dass LO dieses Makro nach jedem Speichern ausführt. Es also an den "Speichern"-Knopf anhängt.

Re: spezielle sheets auswählen und als pdf speichern

Verfasst: So 11. Dez 2016, 16:10
von mikele
Hallo,
Es also an den "Speichern"-Knopf anhängt.
Binde es an das Ereignis "Dokument wurde gespeichert".
->Extras->Anpassen->Ereignisse

Re: spezielle sheets auswählen und als pdf speichern

Verfasst: Mo 12. Dez 2016, 09:21
von paulderfinne
Danke Michele, ja das funktioniert sogar einwandfrei. Richtig cool ist diese Ereignisanpassung.

Ich beuge mein Haupt in Ehrfurcht und Dankbarkeit. Ihr habt mir sehr geholfen.