Mehrere Spalten markieren [Calc]

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

Moderator: Moderatoren

Benutzeravatar
womolbo
**
Beiträge: 26
Registriert: So, 12.04.2020 12:43

Mehrere Spalten markieren [Calc]

Beitrag von womolbo »

Hallo,
wie kann ich in Calc mehrere [in meinem Fall zusammenhänge] Spalten markieren?

Mit ...

Code: Alles auswählen

oColumns = oSheet.getcolumns().getByIndex(iSpalte)
ThisComponent.CurrentController.Select(oColumns)
... geht leider nur eine.
Ein zweiter Parameter ist laut Xray nicht vorgesehen und wird auch tatsächlich ignoriert.

Danke und Gruß
Zuletzt geändert von womolbo am Sa, 23.05.2020 11:43, insgesamt 1-mal geändert.
LibreOffice Portable 6.3.5.2 (x86), Windows 7
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Mehrere Spalten markieren [Calc]

Beitrag von Stephan »

In dem speziellen Falle von Spalten würde ich VBA-Code verwenden, z.B.:

Code: Alles auswählen

Option VBASupport 1

sub Spalten_selektieren()
	Sheets("Tabelle2").Range("A:F,J:L").Select
end sub
weil ich mittels Starbasic auch nur den Weg benennen könnte wie mein Vorredner, ggf. auch für komplette Spalten, nur um die Notwendigkeit der Schleife(n) komme ich auch nicht rum:

Code: Alles auswählen

Sub Spalten_selektieren2()
	bereiche = ThisComponent.CreateInstance("com.sun.star.sheet.SheetCellRanges")
	For i = 0 To 6
		bereiche.addRangeAddress(ThisComponent.Sheets(1).columns(i).RangeAddress, False)
	Next i
	For i = 9 To 11
		bereiche.addRangeAddress(ThisComponent.Sheets(1).columns(i).RangeAddress, False)
	Next i
	ThisComponent.CurrentController.Select(bereiche)
End Sub 

Gruß
Stephan
Benutzeravatar
womolbo
**
Beiträge: 26
Registriert: So, 12.04.2020 12:43

Re: Mehrere Spalten markieren [Calc]

Beitrag von womolbo »

@Faol:
Danke für diese schnelle, enorm strukturierte und detaillierte Antwort. Ganz hervorragend aufbereitet. Alle Achtung.
Allerdings wollte ich Euch nicht so viel Arbeit machen. Ranges selektieren kann ich schon ganz gut, aber die zukünfitgen Generationen von Lesern dieses Threads haben ja dann auch was davon.
Selektionen verwende ich nur äußerst selten, meist kommt man ohne Selektion aus.
Richtig und sinnvoll. In diesem Fall geht es allerdings darum dem Anwender eine optische Orientierung innerhalb der Tabelle zu geben und da erscheint mir zwar das Markieren des betroffenen Zellbereichs am sinnvollsten. Im Falle dass aber der Bereich vom Anwender nicht ausreichend definiert wurde [Anzahl Zeilen] möchte ich nur die betroffenen 'Spalten' markieren. Das könnte ich zwar auch, wie vorgeschlagen, auf ein Range beschränken, da aber die Gesamtzahl der betroffenen Zeilen nicht ewig fix sein muß dachte ich einfach an die ganzen betroffenen Spalten, was auch mit ausrücken soll, dass der Anwender ungenau gearbeitet hat.
Ganze Spalten mit ca. 1,048 MIllionen Zeilen zu markieren kann zu erheblichen Performance-Einbußen
führen, zumal sich dies bei jeder weiteren markierten Spalte addiert.
Das entspricht nur teilweise meinen Erfahrungen. Beim interaktiven Markieren von Spalten bemerke ich keine nennenswerten Performanceeinbußen, beim Markieren aller Zellen in einer/mehrerer Spalten kommt es meiner Erfahrung nach [zumindest teilweise] zu extremen Timeouts/Hängern.
Mir scheint das Markieren einzelner Zellen ist verabeitungsintensiver implementiert als das Markieren ganzer Spalten. Ich rede natürlich nicht von Zugriffen auf die betroffenen Zellen des selektierten Ranges, sondern nur von der reinen Markierung zwecks Hervorhebung.
Aber ich mag da auch falsch liegen, da noch nicht allzu erfahren mit LibreOffice.

Gruß. Womolbo.
LibreOffice Portable 6.3.5.2 (x86), Windows 7
Benutzeravatar
womolbo
**
Beiträge: 26
Registriert: So, 12.04.2020 12:43

Re: Mehrere Spalten markieren [Calc]

Beitrag von womolbo »

@Stephan:
Auch dir vielen Dank für die kompetente und auch inspiriende Hilfe.
Wie oben schon beschrieben kann ich mit 'normalen' Ranges schon ganz umgehen aber addRangeAddress() kannte ich bisher noch nicht.
Das ist womöglich ganz interessant für mich. Das schaue ich mir nachher mal an.
Und die Variante mit VBA-Code zu arbeiten kannte ich zwar im Prinzip, hatte sie aber nicht recht im Bewußtsein. Dabei kann das immer mal hilfreich sein. Manchmal leidet man an Fantasielosigkeit.

Meine eigentliche Aufgabenstellung konnte ich schon vor der Fragestellung befriedigend lösen und nun durch euere Hilfe erst recht.
Die Frage war aber eher grundsätzlicher Natur und ist für mich immer noch offen. Aber dazu siehe nächstes Posting.

Gruß. Womolbo.
Zuletzt geändert von womolbo am Sa, 23.05.2020 12:39, insgesamt 1-mal geändert.
LibreOffice Portable 6.3.5.2 (x86), Windows 7
Benutzeravatar
womolbo
**
Beiträge: 26
Registriert: So, 12.04.2020 12:43

Re: Mehrere Spalten markieren [Calc]

Beitrag von womolbo »

Nochamls Danke für die tollen Antworten, aber für meine Problemstellung ist es letzlich relativ unerhebelich ob ich die ganze Spalte[n] oder ein Range darunter markiere. Ich will weniger ein konkretes Problem lösen, als viel mehr besser verstehen.
Es ging mir mehr darum die Objekte von LibreOffice kennenzulernen.
Wenn es schon ein Objekt für Spalten gibt und auch eine Methode um Spalten [man beachte die Mehrzahl] zu selektieren, dann verwirrt es mich dass nur eine Spalte möglich sein soll?!

Und diese Frage würde ich tatsächlich auch gerne noch klären und zwar unabhängig der Sinnhaftigkeit einer solchen Vorgehensweise.

Ist meine Annahme falsch, daß es eine Methode gibt um mehr oder weniger direkt Spalten zu selektieren/markieren, oder stehe ich auf der Leitung und sehe nicht wie?
LibreOffice Portable 6.3.5.2 (x86), Windows 7
Antworten