Jump to content

eine Tabelle aufgrund einer Spalte sortieren

From The Document Foundation Wiki
This page is a translated version of the page Macros/Calc/ba023 and the translation is 100% complete.


Zusammenfassung

Diese Seite zeigt ein LibreOffice Basic Makro, das eine Tabelle aufgrund der Daten in einer Spalte sortiert. Es ist ein Beispiel aus Kapitel 13 ("Calc als Datenbank") aus dem Handbuch zu Calc 7.0.

Beschreibung

In einem Calc Makro werden Daten in einem Bereich mit der Methode sort() auf dem Objektbereich sortiert. Wenn eine Sortieroperation auf einem Bereich ausgeführt wird, wird der sort Methode ein Eigenschaftenfeld namens Sortierbeschreibung übergeben. In den Eigenschaften dieser Beschreibung sind Sortierfelder. Diese Strukturen sagen Calc, wie der Bereich nach den Daten aus den beiden Zeilen oder Spalten zu sortieren sind.

Als Beispiel sortiert das folgende Makro ein Notenblatt in den Zellen $Tabelle1.A1:H11 nach der Durchschnittsnote in absteigender Folge. Das verlinkte Tabellenblatt enthält ein solches Notenblatt. Achtung: Der Indexwert Field aus der Variable Sortierfeld startet relativ zum ausgewählten Bereich. Wenn im Beispiel der ausgewählte Bereich C1:H11 ist, hat die Spalte C den Feldindex 0.


Code

Sub SortAverageGrade
  Dim oSheet
  Dim oRange
  Dim oSortFields(0) as new com.sun.star.util.SortField
  Dim oSortDesc(0) as new com.sun.star.beans.PropertyValue

  oSheet = ThisComponent.Sheets(0)
  REM den zu sortierenden Bereich bestimmen
  oRange = oSheet.getCellRangeByName("A1:H11")

  REM nach dem Durchschnittswert in absteigender Reihenfolge sortieren
  oSortFields(0).Field = 7
  oSortFields(0).SortAscending = FALSE

  REM die zu verwendenden Sortierfelder bestimmen
  oSortDesc(0).Name = "SortFields"
  oSortDesc(0).Value = oSortFields()
  
  REM Den Bereich jetzt sortieren!
  oRange.Sort(oSortDesc())
End Sub

Dieses Calc Tabellenblatt enthält den obigen LibreOffice Basic Code.