Export von PDF' s stoppt nach dem 2. Mal.

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Dimi
Beiträge: 5
Registriert: Di, 21.01.2025 12:25

Export von PDF' s stoppt nach dem 2. Mal.

Beitrag von Dimi »

Hallo zusammen,
ich versuche aus einer Liste mit einer Schleife Teilnahmebescheinigungen als PDF zu exportieren.
Das funktioniert aber nur zwei Mal.

Die erste PDF kommt ganz normal. Das Makro hängt sich dann bei: ThisComponent.storetoUrl(sUrl,myProps()) auf.

Danach kommt die Fehlermeldung:
Type: com.sun.star.lang.IllegalArgumentException
Message: sequence element is not assignable by given value!.

Die zweite PDF kann auch nicht geöffnet werden (Meldung: Die Datei ist beschädigt).

Ich bin Basic Anfänger und hoffe, dass mir jemand von Euch helfen kann.

Betriebssystem: OS X Monterey
Libre Office Version: 24.2.6.2

Hier mein Code:

myView.setActiveSheet(TBaktuell)
Bereich = TBOrange.getCellRangeByName("R3:R60")
for i = 2 to 60 ' 3. Zeile bis 60. Zeile (bezieht sich auf Spalte "R"
Druck = TBOrange.getCellByPosition(17,i) ' Zugriff auf Zelle R3

If Druck.string = ("?") Then
next
IF Druck.string = ("OK !") Then
Daten = TBOrange.getCellRangeByPosition(1,i,2,i) 'Name und Vorname
Werte = Daten.getDataArray
Ziel = TBaktuell.getCellRangeByPosition(10,2,11,2) '(K3:L3)
Ziel.setDataArray(Werte)
Daten1 = TBOrange.getCellRangeByPosition(6,i,8,i) 'PLZ, Ort, Straße
Werte1 = Daten1.getDataArray
Ziel1 = TBaktuell.getCellRangeByPosition(12,2,14,2) '(M3:O3)
Ziel1.setDataArray(Werte1)

'PDF Drucken
oCalc = thiscomponent
oSheet = oCalc.Sheets(16) 'das 16. Tabellenblatt (TN-Best PT)
'Markiere den Druckbereich
oCalc.CurrentController.Select(oBereich)
'Setze Dateinamen
Nachname = oSheet.getCellRangeByName("K3").String
Vorname = oSheet.getCellRangeByName("L3").String

DateiName = DateiPfad & Nachname("K3") & " " & Vorname("L3") & ".pdf"

Dim myProps(0) as New com.sun.star.beans.PropertyValue
oCalc = thiscomponent.currentController.activesheet
oBereich=oSheet.getcellrangebyname("$A$1:$H$43")
' Druckbereich(0)= oBereich.RangeAddress
oCalc.setprintareas(Druckbereich)
myProps(0).Name="FilterName"
myProps(0).Value = "calc_pdf_Export"
sUrl = converttourl(DateiName)
ThisComponent.storetoUrl(sUrl,myProps())
End if
next
mikeleb
*******
Beiträge: 1420
Registriert: Fr, 09.12.2011 16:50

Re: Export von PDF' s stoppt nach dem 2. Mal.

Beitrag von mikeleb »

Hallo,
wenn ich dich und den Code richtig verstehe, möchtest du Daten von einer Zeile eines Tabellenblatt (TBOrange) auf ein anderes (TBaktuell) kopieren, wenn in der Zeile in der Spalte "OK !" steht.
Dann soll der Bereich "$A$1:$H$43" des Tabellenblattes TBaktuell in eine pdf exportiert werden.
Ist das soweit richtig?
Interessanterweise schreibst du aber auch Dazen in die Spalten K, L, M, O - wobei diese dann nicht exportiert werden und beim nächsten Schleifendurchlauf gleich wieder überschrieben werden.
Welche Bedeutung hat das Tabellenblatt 16?
Die Zeile

Code: Alles auswählen

oCalc.CurrentController.Select(oBereich)
ist unklar, weil erst später

Code: Alles auswählen

oBereich=oSheet.getcellrangebyname("$A$1:$H$43")
definiert wird ...
Kurz: Was willst du mit deinem Makro erreichen?
Gruß,
mikeleb
Dimi
Beiträge: 5
Registriert: Di, 21.01.2025 12:25

Re: Export von PDF' s stoppt nach dem 2. Mal.

Beitrag von Dimi »

Hallo mikeleb,

erst mal, vielen Dank, für dein Rückmeldung!

Die Datei besteht aus etlichen Blättern, wo jeweils angemeldete Teilnehmer einer Veranstaltung erfasst werden (hier nur die Tabelle TBOrange)

Bei erfolgreicher Teilnahme wird ein "OK !" gesetzt, ansonsten ein "?". Dann sollen die erfolgreichen Teilnehmer der Liste eine Teilnahmebescheinigung bekommen. Die Grunddaten der Veranstaltung (Art, Datum usw.) werden in das TBaktuell kopiert. Dann werden Namen u. Adresse der Teilnehmer auf das TBaktuell kopiert (K-O), die dann von den entsprechenden Zellen im Druckbereich übernommen werden. Dann erfolgt Export des PDF und das PDF des nächsten Teilnehmers soll erstellt werden, bis die erste Zelle in der Spalte "R" leer ist (also kein OK ! oder ? enthält).
Das Tabellenblatt 16 ist identisch mit TBaktuell.

Das hatte ich in Excel mit Hilfe des Offset-Befehls auch hinbekommen, aber bei Basic steh ich noch voll auf dem Schlauch. Deshalb auch die For-Schleife. Ich kriegs mit Basic (noch) nicht hin, in der Spalte R eine Zelle weiter nach unten zu springen und dann die Teilnehmerdaten der gleichen Zeile zu übertragen und bei leerer Zelle das Makro zu beenden.

Außerdem hätte ich gern einen Button auf dem TBOrange, mit dem das Makro dann ausgelöst werden kann. Auch da weiß ich nicht weiter, da die Schaltfläche immer ausgebaut ist. Wenn ich auf Entwurfsmodus klicke, verschwindet die Symbolleiste wieder. Bei Mr. Google hab ich auch nichts gefunden...

Das sich der Umstieg von VBA auf Basic für mich so schwierig gestaltet, hatte ich nicht erwartet. :)
Dimi
Beiträge: 5
Registriert: Di, 21.01.2025 12:25

Re: Export von PDF' s stoppt nach dem 2. Mal.

Beitrag von Dimi »

Hallo mikeleb,

wo man den Entwurfsmodus ein-/ausschaltet hab ich endlich gefunden.

Gruß
Dimi
mikeleb
*******
Beiträge: 1420
Registriert: Fr, 09.12.2011 16:50

Re: Export von PDF' s stoppt nach dem 2. Mal.

Beitrag von mikeleb »

Hallo,
ich habe mal ein bisschen gebastelt:

Code: Alles auswählen

Sub Main
	'Zugriff auf das Dokument
	oDoc=ThisComponent
	'Zugriff auf die beiden relevanten Tabellenblätter
	TBOrange=oDoc.Sheets.getByName("Tabelle2")
	TBaktuell=oDoc.Sheets.getByName("Tabelle1")
	'Setze Dateipfad, hier: nimm den Pfad der aktuellen Datei
	akt_pfad=split(oDoc.url,"/")
	akt_pfad(ubound(akt_pfad))=""
	Dateipfad=join(akt_pfad,"/")
	'Setze Parameter für pdf-Export
	Dim arg(2) as new com.sun.star.beans.PropertyValue
	arg(0).Name = "URL"	
	'der Wert für arg(0).Value wird später gesetzt
	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=TBaktuell.getcellrangebyname("$A$1:$H$43")
	arg(2).Name = "FilterData"
	arg(2).Value = aFilterData()

	'durchlaufe die Liste
	i=2 'Anfangszeile Nr. 3
	'Lese String in Spalte R
	druck=TBOrange.getCellByPosition(17,i).string 
	do while druck <>""
		If druck = ("OK !") Then
			Daten = TBOrange.getCellRangeByPosition(1,i,2,i) 'Name und Vorname
			Werte = Daten.getDataArray
			Ziel = TBaktuell.getCellRangeByPosition(10,2,11,2) '(K3:L3)
			Ziel.setDataArray(Werte)
			Daten1 = TBOrange.getCellRangeByPosition(6,i,8,i) 'PLZ, Ort, Straße
			Werte1 = Daten1.getDataArray
			Ziel1 = TBaktuell.getCellRangeByPosition(12,2,14,2) '(M3:O3)
			Ziel1.setDataArray(Werte1)
		
			'Setze Dateinamen
			Nachname = Werte(0)(0)
			Vorname = Werte(0)(1)
			DateiName = DateiPfad & Nachname & " " & Vorname & ".pdf"
			'Setze offenen Parameter
			arg(0).Value = convertToUrl(DateiName)
			'PDF export	
			oDoc.storeToUrl(arg(0).Value,arg)
		End if
		i=i+1
		druck=TBOrange.getCellByPosition(17,i).string 
	loop
End Sub
Da man den Bereich der als pdf exportiert werden soll auch als Paramter mit übergeben kann, entfällt die ganze Druckbereichsgeschichte.
wo man den Entwurfsmodus ein-/ausschaltet hab ich endlich gefunden
Dann steht dem Button ja nichts mehr im Weg.
Dateianhänge
export_pdf.ods
(28.29 KiB) 286-mal heruntergeladen
Gruß,
mikeleb
Dimi
Beiträge: 5
Registriert: Di, 21.01.2025 12:25

Re: Export von PDF' s stoppt nach dem 2. Mal.

Beitrag von Dimi »

Hallo mikeleb,

ganz herzlichen Dank erst mal. Ich meld mich wieder. . .

Gruß
Dimi
Dimi
Beiträge: 5
Registriert: Di, 21.01.2025 12:25

Re: Export von PDF' s stoppt nach dem 2. Mal.

Beitrag von Dimi »

Hallo mikeleb,

vielen Dank, dass Du Dir Zeit für mein Problem genommen hast.
Es funktioniert genauso, wie ich es haben wollte. Toll.

Gruß
Dimi
Antworten