Export von PDF' s stoppt nach dem 2. Mal.
Moderator: Moderatoren
Export von PDF' s stoppt nach dem 2. Mal.
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
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
Re: Export von PDF' s stoppt nach dem 2. Mal.
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
ist unklar, weil erst später
definiert wird ...
Kurz: Was willst du mit deinem Makro erreichen?
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)
Code: Alles auswählen
oBereich=oSheet.getcellrangebyname("$A$1:$H$43")
Kurz: Was willst du mit deinem Makro erreichen?
Gruß,
mikeleb
mikeleb
Re: Export von PDF' s stoppt nach dem 2. Mal.
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.
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.

Re: Export von PDF' s stoppt nach dem 2. Mal.
Hallo mikeleb,
wo man den Entwurfsmodus ein-/ausschaltet hab ich endlich gefunden.
Gruß
Dimi
wo man den Entwurfsmodus ein-/ausschaltet hab ich endlich gefunden.
Gruß
Dimi
Re: Export von PDF' s stoppt nach dem 2. Mal.
Hallo,
ich habe mal ein bisschen gebastelt:
Da man den Bereich der als pdf exportiert werden soll auch als Paramter mit übergeben kann, entfällt die ganze Druckbereichsgeschichte.
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
Dann steht dem Button ja nichts mehr im Weg.wo man den Entwurfsmodus ein-/ausschaltet hab ich endlich gefunden
- Dateianhänge
-
- export_pdf.ods
- (28.29 KiB) 286-mal heruntergeladen
Gruß,
mikeleb
mikeleb
Re: Export von PDF' s stoppt nach dem 2. Mal.
Hallo mikeleb,
ganz herzlichen Dank erst mal. Ich meld mich wieder. . .
Gruß
Dimi
ganz herzlichen Dank erst mal. Ich meld mich wieder. . .
Gruß
Dimi
Re: Export von PDF' s stoppt nach dem 2. Mal.
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
vielen Dank, dass Du Dir Zeit für mein Problem genommen hast.
Es funktioniert genauso, wie ich es haben wollte. Toll.
Gruß
Dimi