Seite 1 von 1

ist Zelle Teil einer Gruppierung?

Verfasst: Di, 03.04.2007 10:01
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

Re: ist Zelle Teil einer Gruppierung?

Verfasst: Mi, 21.11.2007 09:33
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!

Re: ist Zelle Teil einer Gruppierung?

Verfasst: Mi, 21.11.2007 12:53
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

Re: ist Zelle Teil einer Gruppierung?

Verfasst: Mi, 21.11.2007 16:00
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?