ist Zelle Teil einer Gruppierung?

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

Moderator: Moderatoren

Birdy27
**
Beiträge: 20
Registriert: Di, 20.02.2007 10:17

ist Zelle Teil einer Gruppierung?

Beitrag von Birdy27 »

Hallo,

ich versuche für eine Zellrange herauszufinden, ob Sie in einer Gruppierung liegt, da ich falls diese existiert ich Sie entfernen möchte. (OOo graut das Gruppierung entfernen ICON auch aus, wenn die Zelle in Keiner Gruppe liegt.)

Wenn ich nicht vorhandene Gruppierungen entferne hat das anscheinend den nebenefekt, das plötzlich alle Gruppierungen des Tabellendokuments verschwinden.

Grüße
Christoph
datensurfer
**
Beiträge: 49
Registriert: Mo, 15.05.2006 16:07
Kontaktdaten:

Re: ist Zelle Teil einer Gruppierung?

Beitrag von datensurfer »

Hallo,

konntest du eine Lösung für das Problem finden?
Mich interessiert auch wie ich per Makro heraus finde ob die gewählte Zelle bzw. Zellen ein Zellenverbund sind UND bei welcher Zelle dieser endet.
An den Anfang der verbundenen Zellen komme ich mit: ThisComponent.CurrentSelection.RangeAddress

Danke für eure Tipps!
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: ist Zelle Teil einer Gruppierung?

Beitrag von Toxitom »

Hallo datensurfer,
datensurfer hat geschrieben:ThisComponent.CurrentSelection.RangeAddress
Das kann man so nicht sagen! Die "CurrentSelection" kann nämlich diverse Zustände annehmen: Eine einzelne Zelle, einen einfachen, zusammenhängenden Zellbereich oder mehrere, nicht zusammenhängende Zellbereiche. Je nachdem, was es ist, musst du anders reagieren!

Also, zunächst prüfst du, ob die "CurrentSelection" den Service css.sheet.SheetCellRanges unterstützt - dann handelt es sich um eine Mehrfachselektion nicht zusammenhängender Bereiche. Hier kannst du mit der Methode getRangeAddresses() einen Array aller Zellbereichsadressen auslesen - und dann einzeln behandeln.
Ist es kein SheetCellRanges, dann prüfst du, ob die "CurrentSelection" den Service css.sheet.SheetCell unterstützt - dann handelt es sich um eine einzelne Zelle. Hier bekommst du die Adresse (das Adressobjekt ) mit der Methode getCellAddress()
Ist es auch kein SheetCell, dann ist es ein einfacher, zusammenhängender Zellbereich. Hier erhälst du das Adressobjekt mit getRangeAddress().

Hast du das Adressobjekt, kannst du Spalte und Zeile (jeweils als Index) auslesen:
startColumn, startRow, endColumn, endRow.

Frage beantwortet?

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
datensurfer
**
Beiträge: 49
Registriert: Mo, 15.05.2006 16:07
Kontaktdaten:

Re: ist Zelle Teil einer Gruppierung?

Beitrag von datensurfer »

Toxitom hat geschrieben: Frage beantwortet?
Ja und nein bzw. klingt logisch und ähnliche Wege bin ich schon gegangen allerdings bekomme ich NUR die Daten der Start-Zelle des "Zellenverbundes".
Start- & End-Row sind identisch OBWOHL der Verbund über 6 Rows geht. :-(

Was mir aktuell fehlt ist an sich die Möglichkeit heraus zu finden welche Zelle das Ende des Zellenverbundes ist, den Rest habe ich so gelöst:

Code: Alles auswählen

  currentSelection =  ThisComponent.getCurrentSelection
  if currentSelection.supportsService("com.sun.star.sheet.SheetCell") then
        'Der Cursor ist einer Zelle
'        MsgBox "Eine Zelle markiert"    
       elseif currentSelection.supportsService("com.sun.star.sheet.SheetCellRange") then
         ' Ein Bereich
        MsgBox "Ein Bereich wurde markiert, bitte eine Zelle auswählen!"
       elseif currentSelection.supportsService("com.sun.star.sheet.SheetCellRanges") then
        'Mehrere Bereiche
       MsgBox "Mehrere Bereiche wurden markiert, bitte eine Zelle auswählen!"
   end if

  oTargetRange			= currentSelection.getCellAddress
  oTargetRange.Column	= 0
  oController			= ThisComponent
  oSheet1 				= oController.Sheets.getByIndex(0)
  oSheet2 				= oController.Sheets.getByIndex(1)

  if currentSelection.getIsMerged() then
    MsgBox "Verbund"
  else
    MsgBox "zelle"
  end if
Ist nur ein Ausschnitt aus dem Gesamtcode, jetzt benötige ich an sich den Bereich des Merges.

Ein Versuch war mit

Code: Alles auswählen

xCursor = oSheet1.createCursorByRange(currentSelection)
xBereich =  currentSelection.getRangeAddress()
leider führt das nicht zum Ergebnis da nur die Werte der Anfangs-Zelle ausgelesen werden! :-(

Weitere Ideen?
Antworten