Hallo,
kann mir jemand einen Hinweis geben, wie ich in Calc die Adresse des gerade markierten verbundenen Zellbereichs ermittle?
Letztlich brauche ich die Anzahl Zeilen und Spalten anklickbarer verbundener Bereiche.
Trotz Xray und zwei Stunden Suche habe ich selber leider keine direkte/elegante Lösung gefunden.
Vielen Dank und Gruß
[Gelöst] Zellbereich verbundener Zellen ermitteln
Moderator: Moderatoren
[Gelöst] Zellbereich verbundener Zellen ermitteln
Zuletzt geändert von womolbo am Fr, 22.05.2020 15:58, insgesamt 1-mal geändert.
LibreOffice Portable 6.3.5.2 (x86), Windows 7
Re: Zellbereich verbundener Zellen ermitteln
siehe "Sub mehrfachSelektion" auf Seite 24 in:
http://www.calc-info.de/files/Calc_StarBasic.pdf
Gruß
Stephan
http://www.calc-info.de/files/Calc_StarBasic.pdf
Gruß
Stephan
Re: Zellbereich verbundener Zellen ermitteln
@Stephan:
Vielen Dank für die enorm schnelle Hilfe.
Ich habe mir den Link/Code/Text gerade angesehen und nehme an, dass du mich mißverstanden hast.
Es geht nicht um Mehrfachauswahlen, sondern um verbundene Zellen.
Nehmen wir als Beispiel den Zellbereich A1 bis C4 und verbinden diese 4 Zeilen und 3 Spalten zu einer
einzelnen Fläche, die sich im Hintergrund über 12 Zellen erstreckt.
Wenn ein Anwender auf diese Fläche klickt und sie dann als ganzes markiert angezeigt wird, so liefert
getCurrentSelection() nur eine Referenz auf die erste Zelle dieses verbundenen Bereichs [hier also A1].
Entsprechend liefert getCurrentSelection().supportsService("com.sun.star.sheet.SheetCell") true,
da ja nur optisch mehre Zellen markiert scheinen. Man sieht ja auch im Adreßfeld, dass nur A1 als
selektiert betrachtet wird. Und auch .StartRow und Co. liefern nur die Daten einer einzigen Zelle
[also A1,der ersten Zelle].
Für mich stellt sich die Frage wie und ob man von der 'einen' markierten Zelle die Adresse des verbundenen
Zellbereichs zu dem die Zelle gehört kommt um die Anzahl der Zeilen und Spalten zu ermitteln.
Gruß.Vjeko.
Vielen Dank für die enorm schnelle Hilfe.
Ich habe mir den Link/Code/Text gerade angesehen und nehme an, dass du mich mißverstanden hast.
Es geht nicht um Mehrfachauswahlen, sondern um verbundene Zellen.
Nehmen wir als Beispiel den Zellbereich A1 bis C4 und verbinden diese 4 Zeilen und 3 Spalten zu einer
einzelnen Fläche, die sich im Hintergrund über 12 Zellen erstreckt.
Wenn ein Anwender auf diese Fläche klickt und sie dann als ganzes markiert angezeigt wird, so liefert
getCurrentSelection() nur eine Referenz auf die erste Zelle dieses verbundenen Bereichs [hier also A1].
Entsprechend liefert getCurrentSelection().supportsService("com.sun.star.sheet.SheetCell") true,
da ja nur optisch mehre Zellen markiert scheinen. Man sieht ja auch im Adreßfeld, dass nur A1 als
selektiert betrachtet wird. Und auch .StartRow und Co. liefern nur die Daten einer einzigen Zelle
[also A1,der ersten Zelle].
Für mich stellt sich die Frage wie und ob man von der 'einen' markierten Zelle die Adresse des verbundenen
Zellbereichs zu dem die Zelle gehört kommt um die Anzahl der Zeilen und Spalten zu ermitteln.
Gruß.Vjeko.
LibreOffice Portable 6.3.5.2 (x86), Windows 7
Re: Zellbereich verbundener Zellen ermitteln
Hallo,
mittels eines Cursors kommst du an den verbundenen Bereich:
mittels eines Cursors kommst du an den verbundenen Bereich:
Code: Alles auswählen
oDoc=ThisComponent
oSel=oDoc.CurrentSelection
oTab=oSel.Spreadsheet
oCur=oTab.createCursorByRange(oSel)
oCur.collapseToMergedArea()
Gruß,
mikeleb
mikeleb
Re: Zellbereich verbundener Zellen ermitteln
That's it. Vielen, vielen Dank.
LibreOffice Portable 6.3.5.2 (x86), Windows 7
Re: Zellbereich verbundener Zellen ermitteln
Das ist ein interessanter Code-Schnipsel(*), vor allem auch weil mir bei dem Thema verbundene Zellen deutlich wird das ich diesen Fall noch nie in Makros berücksichtigt habe, welche in Calc Zell-Selektionen analysieren, denn immer prüfe ich nur nach Cell, CellRange und CellRanges.mikeleb hat geschrieben: ↑Mi, 13.05.2020 20:32 Hallo,
mittels eines Cursors kommst du an den verbundenen Bereich:Code: Alles auswählen
oDoc=ThisComponent oSel=oDoc.CurrentSelection oTab=oSel.Spreadsheet oCur=oTab.createCursorByRange(oSel) oCur.collapseToMergedArea()
(*)
und natürlich auch eine interessante Lösung, die (zumindest) ich bisher garnicht kannte
Gruß
Stephan