StarBasic FAQWissen, das weiterhilft.

Tabellen - Calc

Wie kann man die Zellen eines Ranges auswerten?

Es gibt zwei Wege. Über die Position im Arbeitsblatt oder die Position innerhalb des Ranges.

Erstmal die Position innerhalb des Arbeitsblattes.
Ein Zellrange besteht aus mehren Zellen in Zeilen und vielleicht Spalten.
Diese lassen sich natürlich auch gezielt ansprechen und auch mit Hilfe von zwei Schleifen einzeln nacheinander anspechen.

Eine Range hat unter der Rangeadresse die Eckpunkte des Ranges. Diese fragt man ab und lässt dann darüber eine verchachtelte For-Schleife laufen.

Basic
     oCalc = thisComponent
     oSheet = oCalc.sheets(0)
     oCellRange = osheet.getCellRangeByName("A1:B5")
'auslesen der Eckpunkte   
     iErsteSpalte = oCellRange.rangeAddress.startColumn
     iErsteZeile = oCellRange.rangeAddress.startRow
     iLetzteSpalte = oCellRange.rangeAddress.EndColumn
     iLetzteZeile = oCellRange.rangeAddress.EndRow
   
     'Schleife über die Zeilen im Sheet
      For i = iErsteZeile to iLetzteZeile
       For m = iErsteSpalte to iLetzteSpalte
         oCell=osheet.getCellByPosition(m,i)
         oCell.String=i
       next m
      next i    

Oder
Basic
     'Schleife über die Zeilen im Range
      For i = 0 to iLetzteZeile-iErsteZeile
       For m = 0 to iLetzteSpalte-iErsteSpalte
         oCell=oCellRange.getCellByPosition(m,i)
         oCell.String=i
       next m
      next i    





In dem Beispiel ist die Range fest angegeben. Dann kann man natürlich die Schleife direkt über die Werte laufen lassen.
Ideal ist die Lösung wenn man auf ein Markierung durch den Anwender reagieren will.

    oCellRange = osheet.getCurrentSelection()

Dann muss aber vorher geprüft werden ob es bei der Selektion eine Zelle, ein Bereich oder mehrere Bereiche sind.
Siehe Wie kann man prüfen ob Zellen oder Bereiche in der aktuellen Selektion sind?

Der zweite Weg geht direkt über die Position innerhalb des Ranges.
Dann erfolgt der Zugriff über Methode getCellByPosition die auch innerhalb eines Ranges zur Verfügung steht. Hier bei gehts es aber nur die relative Position.

Basic
     oCalc = thisComponent
     oSheet = oCalc.sheets(0)
     oCellRange = osheet.getCellRangeByName("A1:B5")
     oCell = oCellRange.getCellByPosition(0,0)

Mit 0,0 erreicht man die erste Zelle, mit 0,1 die erste Zelle in der zweite Spalten usw..
Aufpassen muss man hiebei das eine falsche Zeilen oder Spaltenangabe, die außerhalb des gewählten Ranges liegen, kommt es zu einer Fehlermeldung.