Calc: Zellbereich nach Überschrift

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

Moderator: Moderatoren

Berni
Beiträge: 3
Registriert: Sa, 14.05.2011 13:06

Calc: Zellbereich nach Überschrift

Beitrag von Berni »

Hallo allerseits!

Ich habe die armen Menschen im Calc Forum eben ziemlich (unnötig) maltretiert. Letztendlich konnte ich in meiner Calc-Datei zwei Probleme mit Makros isolieren, die ich lösen muss. Leider habe ich kaum Erfahrung mit Makros. Ich verstehe sie jetzt, aber ändern ist eine andere Sache.

Das erste Problem ist das automatische Entschützen und Schützen von Tabellen:

Code: Alles auswählen

	ThisComponent.isUndoEnabled = False 
	oCleaningDestinationSheet.unprotect("")
	
	oDestinationCellRange.setDataArray(oSourceCellRange.getDataArray())

	oCleaningDestinationSheet.protect("")
	ThisComponent.isUndoEnabled = True 
Das protect ist das Problem. Wenn die Tabelle zuvor manuell "entschützt" wurde (um etwas zu ändern) schlägt obiges Skript zu, und schaltet den Schutz ständig wieder ein. Zum Irre werden. Ich würde das gerne so ändern, dass das protect() nur aufgerufen wird, wenn vor dem unprotect() die Tabelle tatsächlich geschützt war.

Das zweite betrifft Zugriffe auf Spalten. Da gibt eines Anweisung der folgenden (oder ähnlicher) Art:

Code: Alles auswählen

	oDestinationCellRange = oCleaningDestinationSheet.getCellRangeByName("AO2:AP100")
Wenn neue Spalten eingefügt werden, gerät alles durcheinander, weil die Spaltennummer ("AO" und "AP") sich verschieben. Jede Spalte hat in der ersten Zeile aber eine Überschrift die eigentlich nie geändert wird (da sie in Serienbriefen benutzt wird). Ist es möglich statt der Spaltennummer die Überschrift in der ersten Zeile jeder Spalte zu verwenden? Wie?



Moderation,4: Betreff konkretisiert
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Calc: Zellbereich nach Überschrift

Beitrag von komma4 »

Berni hat geschrieben:Wenn die Tabelle zuvor manuell "entschützt" wurde (um etwas zu ändern) schlägt obiges Skript zu, und schaltet den Schutz ständig wieder ein. Zum Irre werden. Ich würde das gerne so ändern, dass das protect() nur aufgerufen wird, wenn vor dem unprotect() die Tabelle tatsächlich geschützt war.
In Beantwortung dieser ersten Frage:

Wie "schlägt" das Makro zu? Wie wird es aufgerufen?


Ansonsten kann man den Zustand des Blattschutzes auch abfragen:

Code: Alles auswählen

If oCleaningDestinationSheet.isProtected() Then 

Zur Vollständigkeit halber bitte bei Fragen auch immer OOo-Version und Betriebssystem angeben; Danke.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Calc: Zellbereich nach Überschrift

Beitrag von komma4 »

Berni hat geschrieben:Das zweite betrifft Zugriffe auf Spalten. Da gibt eines Anweisung der folgenden (oder ähnlicher) Art:

Code: Alles auswählen

	oDestinationCellRange = oCleaningDestinationSheet.getCellRangeByName("AO2:AP100")

In Beantwortung dieser zweiten Frage:

versorge vor dem Einfügen weiterer Spalten den Bereich AO2 bis AP100 mit einem Einfügen>Namen>Festlegen... eindeutigen Namen (bspw.: "Hugo"), und ändere die Basicanweisung in

Code: Alles auswählen

oCleaningDestinationSheet.getCellRangeByName( "Hugo" )
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Berni
Beiträge: 3
Registriert: Sa, 14.05.2011 13:06

Re: Calc: Zellbereich nach Überschrift

Beitrag von Berni »

Es sind zwei Makros, die mit protect arbeiten. Beide werden durch Listener aufgerufen, die auf die Änderung von Zellen reagieren.

Die OO Version ist 3.2.0 und das OS ist Win7.

Aha, dann müßte ich also sowas machen?

Code: Alles auswählen

	Dim sheetIsProtected As Boolean
	sheetIsProtected = oPaymentSheet.isProtected()

	If (sheetIsProtected) Then
		oPaymentSheet.Unprotect("")
	End If

	REM ..... diverse zugriffe .....

	If (sheetIsProtected) Then
		oPaymentSheet.Protect("")
	End If
Zuletzt geändert von Berni am So, 15.05.2011 12:15, insgesamt 2-mal geändert.
Berni
Beiträge: 3
Registriert: Sa, 14.05.2011 13:06

Re: Calc: Zellbereich nach Überschrift

Beitrag von Berni »

versorge vor dem Einfügen weiterer Spalten den Bereich AO2 bis AP100 mit einem Einfügen>Namen>Festlegen... eindeutigen Namen (bspw.: "Hugo"), und ändere die Basicanweisung in

Code: Alles auswählen

oCleaningDestinationSheet.getCellRangeByName( "Hugo" )
Ok, das kannte ich noch nicht. Klingt nach einer guten Lösung. Ich werde es probieren.

Die Überschrift verwenden geht nicht? Oder ist arg kompliziert?
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Calc: Zellbereich nach Überschrift

Beitrag von DPunch »

Aloha
Berni hat geschrieben:Die Überschrift verwenden geht nicht? Oder ist arg kompliziert?
Doch, geht natürlich auch und ist prinzipiell auch nicht kompliziert.

Siehe auch StarBasic FAQ: Wie kann man in Arbeitsblättern suchen?.
Antworten