BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗
Alles zur Programmierung im OpenOffice.org
-
mikele
- Beiträge: 771
- Registriert: Sa 23. Jul 2011, 22:09
Beitrag
von mikele » Sa 24. Sep 2022, 17:25
Hallo,
der pdf-Export verhält sich offensichtlich doch anders, als ich bisher glaubte - wieder etwas gelernt.
Man kann über die Eigenschaft "Selection" nicht sinnvoll verschiedene Bereiche verschiedener Tabellen übergeben.
Also Plan B: So ähnlich wie beim Drucken, müssen die Druckbereiche der einzelnen Tabellen angepasst werden und dann der pdf-Export gestartet. Ohne zusätzlichen Parameter wird hier automatisch das ganze Dokument betrachtet. Am Ende müssen die ursprünglichen Druckbereiche wieder hergestellt werden.
Code: Alles auswählen
sub pdf_export
oDoc=ThisComponent
'alle Tabellen durchsuchen
'ursprüngliche Druckbereiche merken
'nur die Druckbereiche setzen, die in der ersten Zelle eine 1 haben
n=oDoc.Sheets.Count-1
DIM aDruckbereiche(n)
for i=0 to n
oTab=oDoc.Sheets(i)
oPA=oTab.Printareas
if ubound(oPa)>-1 then
aDruckbereiche(i)=oPa
else
aDruckbereiche(i)=array()
end if
Dim aDruck()
z=0
for k=0 to ubound(oPA)
if oTab.getcellbyposition(oPA(k).StartColumn,oPA(k).StartRow).value=1 Then
ReDim aDruck(z)
adruck(z)=oPA(k)
z=z+1
end if
next
'neuen Druckbereich setzen
oTab.setPrintareas(aDruck)
next
'Pfad und Name der aktuellen Datei auslesen und Endung ändern
sPdf=left(odoc.Url,len(oDoc.Url)-3) & "pdf"
'Paramter für pdf-Export anlegen
Dim arg(1) as new com.sun.star.beans.PropertyValue
arg(0).Name = "URL"
arg(0).Value = sPdf
arg(1).Name = "FilterName"
arg(1).Value = "calc_pdf_Export"
'Exportieren als pdf
oDoc.storeToUrl(arg(0).value,arg())
'Druckbereiche zurücksetzen
for i=0 to n
oTab=oDoc.Sheets(i)
oTab.setPrintareas(aDruckbereiche(i))
next
end sub
Gruß,
mikele
-
mikele
- Beiträge: 771
- Registriert: Sa 23. Jul 2011, 22:09
Beitrag
von mikele » Sa 24. Sep 2022, 17:28
Hallo,
ich vergaß: auch beim Druckmakro war ein Fehler, der insbesondere dann auftritt, wenn auf einer Tabelle kein Druckbereich existiert. Beim pdf-Export habe ich es bereits beachtet.
Code: Alles auswählen
sub drucken
oDoc=ThisComponent
'globale Einstellung: alle Tabellen drucken?
oSettings = createunoservice("com.sun.star.sheet.GlobalSheetSettings")
'merken der ursprünglichen Einstellung
alt=osettings.PrintAllSheets
'setzen auf alle Tabellen drucken
osettings.PrintAllSheets=true
'alle Tabellen durchsuchen
'ursprüngliche Druckbereiche merken
'nur die Druckbereiche setzen, die in der ersten Zelle eine 1 haben
n=oDoc.Sheets.Count-1
DIM aDruckbereiche(n)
for i=0 to n
oTab=oDoc.Sheets(i)
oPA=oTab.Printareas
if ubound(oPa)>-1 then
aDruckbereiche(i)=oPa
else
aDruckbereiche(i)=array()
end if
Dim aDruck()
z=0
for k=0 to ubound(oPA)
if oTab.getcellbyposition(oPA(k).StartColumn,oPA(k).StartRow).value=1 Then
ReDim aDruck(z)
adruck(z)=oPA(k)
z=z+1
end if
next
'neuen Druckbereich setzen
oTab.setPrintareas(aDruck)
next
'Drucken
oDoc.print(Array())
wait(1000)
'Druckbereiche zurücksetzen
for i=0 to n
oTab=oDoc.Sheets(i)
oTab.setPrintareas(aDruckbereiche(i))
next
'globale Druckeinstellung zurücksetzen
osettings.PrintAllSheets=alt
end sub
Gruß,
mikele
-
Xaiorn
- Beiträge: 45
- Registriert: Fr 22. Apr 2022, 19:17
Beitrag
von Xaiorn » Sa 24. Sep 2022, 21:28
Hallo,
Xaiorn hat geschrieben: ↑Sa 24. Sep 2022, 08:53
Das Druckmakro hat jedes Mal einen Fehler in der Zeile
Wenn man das Makro mehrmals laufen lässt, ändert sich der Druckbereich mehrmals, bis es endlich durchläuft
Das ist leider immer noch der Fall, nun auch für das PDF-Makro (was logisch ist, da sie ja jetzt sehr ähnlich sind).
Hier mal zum Testen die Tabelle mit allen zu druckenden Seiten (auf einem Blatt kommt noch eine hinzu, die gibt's aber noch nicht). Dazu kommen noch weitere 15 Tabellenblätter ohne Druckbereiche (die zu groß sind, um sie hier anzuhängen). Evtl. hilft das...
Zuletzt geändert von
Xaiorn am So 25. Sep 2022, 15:16, insgesamt 1-mal geändert.
Gruß,
Xaiorn
-
craig
- Beiträge: 318
- Registriert: Sa 14. Mai 2016, 12:36
Beitrag
von craig » Sa 24. Sep 2022, 21:44
Hallo,
die Variable aDruck ist als Array deklariert:
ganz korrekt wäre die Deklaration so:
Die Fehlertoleranz des Basic-Interpreters erkennt bei der einfahcne Schreibweise den Datentyp "Variant" automatisch.
Da aDruck nun ein Array ist, muss man das Array auch als solches übergeben:
STATT:
Code: Alles auswählen
'neuen Druckbereich setzen
oTab.setPrintareas(aDruck)
SO, mit zusätzlichen Klammern:
Code: Alles auswählen
'neuen Druckbereich setzen
oTab.setPrintareas(aDruck())
Gruß
Craig
Nie die Sicherungskopie vergessen!
═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)
-
Xaiorn
- Beiträge: 45
- Registriert: Fr 22. Apr 2022, 19:17
Beitrag
von Xaiorn » Sa 24. Sep 2022, 22:52
Hallo,
die Erklärung finde ich gut und informativ, aber den Fehler behebt es leider nicht. Auch mit den Klammern das gleiche Problem wie vorher.
Gruß,
Xaiorn
-
craig
- Beiträge: 318
- Registriert: Sa 14. Mai 2016, 12:36
Beitrag
von craig » Sa 24. Sep 2022, 23:00
Hallo,
nach dem ich bei mir die Klammern in "sub pdf_export" gesetzt hatte,
wurde bei mir das Makro ohne Fehlermeldung abgearbeitet und die
PDF's erstellt.
Vorher kam die Fehlermeldung "Objektvariable" nicht belegt.
aber den Fehler behebt es leider nicht. Auch mit den Klammern das gleiche Problem wie vorher.
- Welches Problem?
- Wie wird welche Routine aufgerufen?
Erbitte genaue Beschreibung.
Gruß
Craig
Nie die Sicherungskopie vergessen!
═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)
-
Xaiorn
- Beiträge: 45
- Registriert: Fr 22. Apr 2022, 19:17
Beitrag
von Xaiorn » Sa 24. Sep 2022, 23:10
Hallo,
es kommt (trotz der gesetzten Klammern) der Fehler "Objektvariable nicht belegt", immer noch bei der Zeile
Code: Alles auswählen
'neuen Druckbereich setzen
oTab.setPrintareas(aDruck())
in beiden Makros.
Die Frage zur Routine verstehe ich leider nicht.
Gruß,
Xaiorn
-
craig
- Beiträge: 318
- Registriert: Sa 14. Mai 2016, 12:36
Beitrag
von craig » Sa 24. Sep 2022, 23:31
Hallo,
ich habe nach der Änderung bei mir den PDF-Druck aufgerufen = alles OK ohne Fehler.
Hier die geänderte Datei:
und eines der erzeugten PDF-Files:
Die Frage zur Routine verstehe ich leider nicht.
- Die Namen Deiner Sub-Routinen lauten:
Wie startest/ triggerst Du die einzelnen Routinen?
Gruß
Craig
Nie die Sicherungskopie vergessen!
═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)
-
Xaiorn
- Beiträge: 45
- Registriert: Fr 22. Apr 2022, 19:17
Beitrag
von Xaiorn » So 25. Sep 2022, 00:07
Hallo,
ich starte sie über Extras->Makros->Makros verwalten->Open basic->pdf-export->ausführen
Auch in dem PDF, das du ausgegeben hast, fehlen Seiten.
Wie ich bereits sagte, laufen die Makros beim 3. Versuch, allerdings werden die Druckbereiche beim 1. und 2. reduziert (ursprünglich 13 Seiten, nach dem 1. fehlerhaften Versuch noch 11, nach dem 2. noch 9).
Die ersten beiden Male kommt der von mir genannte Fehler.
Eigentlich soll das Makro die Seiten drucken, in deren Druckbereich oben links eine 1 steht. Das sind zusätzlich zu denen in deinem PDF noch eine Seite vom Blatt "Fähigkeiten" und eines vom Blatt "Magie".
Natürlich brauche ich die Makros für alle 13 (bzw demnächst 14) Seiten, nicht nur für willkürliche 9 davon.
Gruß,
Xaiorn
-
mikele
- Beiträge: 771
- Registriert: Sa 23. Jul 2011, 22:09
Beitrag
von mikele » So 25. Sep 2022, 00:20
Hallo,
es liegt offensichtlich an der Deklaration des Arrays aDruck()
Anstelle von
besser
Gruß,
mikele