Seite 1 von 2

Sortierlisteneintrag für ca 5000 Zeilen

Verfasst: Sa 6. Aug 2016, 15:17
von artun
Hallo,
ich habe eine Tabelle mit LO5x erstellt. Ich habe 13 Spalten (A bis M) und ca. 4200 Zeilen, jede Zeile ist eine eigenständige Datensatz. Ich muss die Zeilen auf- oder absteigend sortieren. Jede Zeile enthält nur Zahlen (Temperaturwerte: 1 bis 70). Gebe ich den Befehl zeilenweise Sortieren dann wird nur die erste Zeile (A1:M1) sortiert. Ich habe ein bisschen recherchiert und irgendwo gelesen, was man dafür zuerst einen Sortierlisteneintrag machen muss, was ich aber leider nicht machen konnte. Wie macht man das als Formel für mehrere Zeilen? Oder gibt es noch andere Lösungen? Vielen Dank!
Artun

Re: Sortierlisteneintrag für ca 5000 Zeilen

Verfasst: Sa 6. Aug 2016, 16:31
von mikele
Hallo,
muss du jede Zeile für sich sortieren?

Re: Sortierlisteneintrag für ca 5000 Zeilen

Verfasst: Sa 6. Aug 2016, 16:38
von artun
hi,
ja, jede Zeile für sich selbst.

Re: Sortierlisteneintrag für ca 5000 Zeilen

Verfasst: Sa 6. Aug 2016, 19:00
von mikele
Hallo,
dann wird es das sinnvollste, ein Makro zu schreiben.
Alternativ müsste jede Zeile einzeln gewählt und sortiert werden - das macht keinen Spaß.
Mal auf die Schnelle (mit Hilfe von Andrew Pitonyak, Listing 430) zusammengestrickt, sortiert dir folgendes Makro die ersten 5000 Zeilen auf Tabelle1 (zeilenweise) nach aufsteigenden Werten.

Code: Alles auswählen

Sub zeilen_sortieren
	Dim oSheet as object
	Dim oRange as object
	Dim oSortFields(0) as new com.sun.star.util.SortField
	Dim oSortDesc(1) as new com.sun.star.beans.PropertyValue
	oSheet = ThisComponent.Sheets(0)

	REM Sortiert wird über das erste Feld im Bereich.
	oSortFields(0).Field = 0
	oSortFields(0).SortAscending =true 'aufsteigende Werte
	
	REM Die zu nutzenden Sortierfelder.
	oSortDesc(0).Name = "SortFields"
	oSortDesc(0).Value = oSortFields()
	oSortDesc(1).Name = "IsSortColumns" 'Spalten werden sortiert
	oSortDesc(1).Value = True

	REM Der zu sortierende Bereich.

	for i= 0 to 5000
		oRange = oSheet.getCellRangeByPosition(0,i,12,i)
		REM Nun wird der Bereich sortiert!
		oRange.Sort(oSortDesc())
	next
End Sub

Re: Sortierlisteneintrag für ca 5000 Zeilen

Verfasst: Sa 6. Aug 2016, 19:05
von Pit Zyclade
Darf ich noch mal nachfragen
1. was Du und
2. in welcher Richtung Du sortieren möchtest?

Denn das was Du mit Sortierlisten ansprichst bezieht sich nicht primär auf die Richtung, sondern auf die Art dr Sortierung.

Wenn Du also in Spalten über die 5000 Datensätze (in Zeilen) sortieren möchtest, mußt Du nur
den Datensatz = Zeile angeben nach selchem die Daten, deren Beziehung in der Spalte erhalten bleibt, sortieren möchtest:
Deine Tabelle markieren und dann nach
Daten->sortieren->Richtung von links nach rechts ankreuzen...

Re: Sortierlisteneintrag für ca 5000 Zeilen

Verfasst: So 7. Aug 2016, 13:48
von artun
Hallo,
es hat zwar lange gedauert und bisschen nerven gekostet, am Ende hat es aber geklappt und zwar mit Makro; mit einfachen Sortierungsbefehl von links nach rechts wird immer nur die erste Zeile sortiert. Mit 68 habe ich wieder mal was schönes gelernt. (In einem Buch mit ca. 600 Seiten -Excxx Makros- ist so ein Makro nicht zu finden.)
Herzlichen vielen Dank an Mikele und Pit Zyclade!
Grüsse

Re: Sortierlisteneintrag für ca 5000 Zeilen

Verfasst: Fr 12. Aug 2016, 15:20
von mikele
Hallo,

nur so zum Spaß das Ganze mal in Python (läuft bei 5000 Zeilen erheblich schneller):

Code: Alles auswählen

def zeile_sortieren():
    oDoc = XSCRIPTCONTEXT.getDocument()
    oSheet = oDoc.Sheets.getByIndex(0)
    oCells = oSheet.getCellRangeByPosition(0,0,12,5000)
    sDaten=list(oCells.getDataArray())
    for n in range(len(sDaten)):
        sDaten[n]=tuple(sorted(list(sDaten[n])))
    oCells.setDataArray(tuple(sDaten))
Die Python-Profis kennen vielleicht noch eine optimalere Variante.

Re: Sortierlisteneintrag für ca 5000 Zeilen

Verfasst: Sa 13. Aug 2016, 11:51
von artun
Hallo,
wie kann ich denn diese "pythonartige Sätze" ganz konkret bei meinen Tabellen benutzen? Als Script oder als Makro oder....? wo und als was muss ich denn diese Zeilen speichern?
Ich habe/benutze xubuntu 16.04 und u.a. LO5x.
Grüße

Re: Sortierlisteneintrag für ca 5000 Zeilen

Verfasst: Sa 13. Aug 2016, 13:36
von mikele
Hallo,
du speicherst den Code in einer .py-(Text)datei (z. B. sortieren.py). Diese Datei legst du in deinem home-Verzeichis (müsste das gleiche sein, wie bei mir unter Ubuntu)
/home/...deinName.../.config/libreoffice/4/user/Scripts/python
(ggf. musst du /Scripts/python noch anlegen).
Anschließend kannst du es als Makro ausführen: ->Extras->Makros->Ausführen und ist dort in der Bibliothek "Meine Makros" zu finden.
Falls das nicht klappt (und unter ->Extras->Makros->Makros verwalten kein Python zur Verfügung steht) muss eventuell der libreoffice-script-provider-python nachinstalliert werden.
Ich hoffe, du kommst mit diesem Gewurschtel zurecht ...

Re: Sortierlisteneintrag für ca 5000 Zeilen

Verfasst: Sa 13. Aug 2016, 14:43
von artun
Hallo,
danke für die schnelle Antwort. Das Ganze aber kann ich erst am Montag versuchen zu testen. Ich werd' mich dann mit Sicherheit wieder melden.
Grüße