Hallo Welt,
in Calc möchte ich eine Tabelle mit Weinen nach Farbe, Land und Jahrgang von einem Python-Script sortieren lassen. Das Script läuft fehlerlos durch, sortiert wird aber nichts.
Hier ist die Tabelle:
| 1 | r | 2012 | SP |
|---|---|---|---|
| 2 | r | 2012 | SP |
| 3 | r | 2010 | I |
| 4 | r | 2022 | USA |
| 5 | r | 2022 | USA |
| 6 | r | 2012 | SP |
| 7 | r | 2012 | SP |
| 8 | r | 2013 | SP |
| 9 | r | 2012 | SP |
| 10 | r | 2024 | SP |
| 11 | r | 2012 | SP |
| 12 | w | 2012 | SP |
| 13 | w | 2012 | SP |
| 14 | w | 2020 | D |
| 15 | r | 2020 | D |
| 16 | rosé | 2022 | USA |
| 17 | r | 2022 | USA |
Hier ist das Script:
import uno
from loguru import logger
document = XSCRIPTCONTEXT.getDocument()
def sort_wein():
sheet = document.CurrentController.ActiveSheet
try:
# Sort range
sort_range = sheet.getCellRangeByPosition(0, 0, 3, 16)
sort_desc = sort_range.createSortDescriptor()
sort_fields = []
# Key1: Farbe
field1 = uno.createUnoStruct('com.sun.star.table.TableSortField')
field1.Field = 1
field1.IsAscending = True
field1.FieldType = 'ALPHANUMERIC'
sort_fields.append(field1)
# Key2: Land
field2 = uno.createUnoStruct('com.sun.star.table.TableSortField')
field2.Field = 3
field2.IsAscending = True
field2.FieldType = 'ALPHANUMERIC'
sort_fields.append(field2)
# Key3: Jahr
field3 = uno.createUnoStruct('com.sun.star.table.TableSortField')
field3.Field = 2
field3.IsAscending = True
field3.FieldType = 'NUMERIC'
sort_fields.append(field3)
for prop in sort_desc:
if prop.Name == "SortFields":
prop.Value = tuple(sort_fields)
elif prop.Name == "ContainsHeader":
prop.Value = False
sort_range.sort(sort_desc)
except Exception as e:
logger.error(f"Error in sort_wein: {e}")
Wo ist der Fehler?
Anbei sind Script und Tabelle (sort_wein.ods)
sort_wein.ods (12.2 KB)
Vielen Dank für Eure Kommentare!