BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> 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. 🤗

Calc-Makro Bastelhilfe

Alles zur Programmierung im OpenOffice.org
mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Calc-Makro Bastelhilfe

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

Re: Calc-Makro Bastelhilfe

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

Re: Calc-Makro Bastelhilfe

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

Code: Alles auswählen

'neuen Druckbereich setzen
		oTab.setPrintareas(aDruck)
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

Re: Calc-Makro Bastelhilfe

Beitrag von craig » Sa 24. Sep 2022, 21:44

Hallo,

die Variable aDruck ist als Array deklariert:

Code: Alles auswählen

Dim aDruck()
ganz korrekt wäre die Deklaration so:

Code: Alles auswählen

Dim aDruck() as Variant
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

Re: Calc-Makro Bastelhilfe

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

Re: Calc-Makro Bastelhilfe

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

Re: Calc-Makro Bastelhilfe

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

Re: Calc-Makro Bastelhilfe

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:
Druck-Makro II.ods
(459.76 KiB) 132-mal heruntergeladen
und eines der erzeugten PDF-Files:
Druck-Makro II.pdf
(101.36 KiB) 131-mal heruntergeladen
Die Frage zur Routine verstehe ich leider nicht.
  • Die Namen Deiner Sub-Routinen lauten:
    • Main
    • drucken
    • pdf-export
    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

Re: Calc-Makro Bastelhilfe

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

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » So 25. Sep 2022, 00:20

Hallo,
es liegt offensichtlich an der Deklaration des Arrays aDruck()
Anstelle von

Code: Alles auswählen

Dim aDruck()
besser

Code: Alles auswählen

aDruck=array()
Gruß,
mikele

Antworten