[gelöst] Sortierung Deckserie (Schießsport)
Moderator: Moderatoren
Re: Sortierung Deckserie (Schießsport)
Nach welchen Gesichtspunkten willst du die Schützen sortieren? Durchschnittliche Punkte pro Schuss? Summe aller Punkte?
Ansonsten wäre mein Vorschlag, alle erstmal so eintragen:
Startnummer | Name | Platzierung (berechnet) | Gesamtwertung (berechnet) | [einzelne Wertungen]
Das Sortieren dann per Macro, welches an einen Button gebunden ist. Für jeden Schützen innerhalb einer Zeile die Einzelwertungen sortieren (ich bilde mir ein, da gabs letztens hier im Macro-Forum den Bubblesort als Code zu lesen) und dann die Schützen (dafür sollte dann auch die Verwendung des Dispatchers ausreichen.
Oder:
Wenn du am Ende auf die (sortierte) Aufschlüsselung der Einzelwertungen verzichten kannst:
Erfassung grad hintereinander weg nach:
Startnummer | Name | Durchgang | Einzelwertung
Und die Auswertung kannst du dann mittels SUMMENPRODUKT() (siehe z.B. unter: http://www.online-excel.de/excel/singsel.php?f=53) oder Pivot-Tabelle (damit habe ich selbst noch nicht gearbeitet) fahren und könntest als Ergebnis sowas herausbekommen:
Platzierung | Startnummer | Name | Gesamtwertung
Das Ganze dann herkömmlich sortieren.
Ansonsten wäre mein Vorschlag, alle erstmal so eintragen:
Startnummer | Name | Platzierung (berechnet) | Gesamtwertung (berechnet) | [einzelne Wertungen]
Das Sortieren dann per Macro, welches an einen Button gebunden ist. Für jeden Schützen innerhalb einer Zeile die Einzelwertungen sortieren (ich bilde mir ein, da gabs letztens hier im Macro-Forum den Bubblesort als Code zu lesen) und dann die Schützen (dafür sollte dann auch die Verwendung des Dispatchers ausreichen.
Oder:
Wenn du am Ende auf die (sortierte) Aufschlüsselung der Einzelwertungen verzichten kannst:
Erfassung grad hintereinander weg nach:
Startnummer | Name | Durchgang | Einzelwertung
Und die Auswertung kannst du dann mittels SUMMENPRODUKT() (siehe z.B. unter: http://www.online-excel.de/excel/singsel.php?f=53) oder Pivot-Tabelle (damit habe ich selbst noch nicht gearbeitet) fahren und könntest als Ergebnis sowas herausbekommen:
Platzierung | Startnummer | Name | Gesamtwertung
Das Ganze dann herkömmlich sortieren.
System:
LibO 6 + LibO 7
LibO 6 + LibO 7
Re: Sortierung Deckserie (Schießsport)
Hallo
siehe angehängtes Dokument
Code: Alles auswählen
def sort_schuetzenliste(*_):
doc = XSCRIPTCONTEXT.getDocument()
sel = doc.CurrentSelection
data = sel.DataArray
out = []
for row in data:
tmp = []
tmp.append(row[0])
tmp.extend(sorted(row[1:],
key=lambda x: x or 0,
reverse=True))
out.append(tuple(tmp))
sel.DataArray = tuple(sorted(out,
reverse=True,
key=lambda x: [item or 0 for item in x[1:]]))
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Sortierung Deckserie (Schießsport)
sehr schöne Lösung!Karolus hat geschrieben: Mo, 20.03.2017 10:15 Hallo
siehe angehängtes Dokument Schützenfest.odsCode: Alles auswählen
def sort_schuetzenliste(*_): doc = XSCRIPTCONTEXT.getDocument() sel = doc.CurrentSelection data = sel.DataArray out = [] for row in data: tmp = [] tmp.append(row[0]) tmp.extend(sorted(row[1:], key=lambda x: x or 0, reverse=True)) out.append(tuple(tmp)) sel.DataArray = tuple(sorted(out, reverse=True, key=lambda x: [item or 0 for item in x[1:]]))
Gruß
Stephan
Re: Sortierung Deckserie (Schießsport)
Hallo Karolus,
Danke!
könntest du das mal bitte erläutern oder zu einer guten Erklärung linken (für jmd., der der eigentlich keine Ahnung von Python hat? Was macht das? Der restliche Code ist ja für mich gut verständlich.Karolus hat geschrieben: Mo, 20.03.2017 10:15Code: Alles auswählen
[...] key=lambda x: x or 0, [...]
Danke!
System:
LibO 6 + LibO 7
LibO 6 + LibO 7
Re: Sortierung Deckserie (Schießsport)
Hallo,
und noch eine Formellösung ...
und noch eine Formellösung ...
- Dateianhänge
-
- Unbenannt 1.ods
- (20.61 KiB) 145-mal heruntergeladen
Gruß,
mikeleb
mikeleb
Re: Sortierung Deckserie (Schießsport)
Oha… womit fang ich jetzt an?TrueColor hat geschrieben: Mo, 20.03.2017 11:04 Hallo Karolus,
könntest du das mal bitte erläutern oder zu einer guten Erklärung linken (für jmd., der der eigentlich keine Ahnung von Python hat? Was macht das? Der restliche Code ist ja für mich gut verständlich.Karolus hat geschrieben: Mo, 20.03.2017 10:15Code: Alles auswählen
[...] key=lambda x: x or 0, [...]
Danke!
das DatenArray enhält im konkreten Fall sowohl Zahlenwerte als auch Text, ( !die leeren Zellen enthalten einen Leerstring "" !)
python muss zum sortieren die jeweiligen Inhalte vergleichen (a grösser b), kann das aber nur mit vergleichbaren Typen, und würde dann beim Vergleich Zahl|Text mit einem Fehler abbrechen, daher der Ausdruck x or 0 der im Fall von x=="" eben 0*** statt dem Leerstring als Vergleichswert einsetzt.
lambda kreiert eine anonyme Funktion.
Code: Alles auswählen
key=lambda x: x or 0
Code: Alles auswählen
def compareKey(x):
return x or 0
Code: Alles auswählen
key=compareKey
https://docs.python.org/3.5/howto/sorti ... ght=sorted
https://docs.python.org/3.5/howto/funct ... expression
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Sortierung Deckserie (Schießsport)
Ah, jetzt wird's klar, danke dir!
Scheint 'ne gute Doku zu sein, was du da verlinkt hast, recht gut verständlich.
Scheint 'ne gute Doku zu sein, was du da verlinkt hast, recht gut verständlich.
System:
LibO 6 + LibO 7
LibO 6 + LibO 7
Re: Sortierung Deckserie (Schießsport)
Hallo
Der Ansatz von oben bereinigt von hässlichen lambdas und anderen Wiederholungen.
Dafür ist das in der Form nicht mehr kompatibel mit AOO und LO < 5.1 wegen der neuen slice-Syntax für Teil-Zellbereiche (#12),
und des Verzichts auf explizite tuple-Umwandlung (#13ff)
Der Ansatz von oben bereinigt von hässlichen lambdas und anderen Wiederholungen.
Dafür ist das in der Form nicht mehr kompatibel mit AOO und LO < 5.1 wegen der neuen slice-Syntax für Teil-Zellbereiche (#12),
und des Verzichts auf explizite tuple-Umwandlung (#13ff)
Code: Alles auswählen
from functools import partial
def compare(k):
if isinstance(k, tuple):
return [compare(item) for item in k[1:]]
return k or 0
def sort_schuetzenliste2(*_):
sort = partial(sorted, reverse=True, key=compare)
doc = XSCRIPTCONTEXT.getDocument()
sel = doc.CurrentSelection
series = sel[ : ,1:]
data = [sort(row) for row in series.DataArray ]
series.DataArray = data
sel.DataArray = sort(sel.DataArray)
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Sortierung Deckserie (Schießsport)
Soooo
Jetzt bin ich registriert.
Hab die Datei jetzt noch auf 250 Zeilen erweitert sollten mal mehr als 4 Teilnehmer dabei sein
Jetzt muss ich noch nach dem Namen noch einen Vereinsnamen rein basteln, aber das schaffe ich auch noch irgendwie.
*Edit*
Verein ist nun auch dabei
Möchte euch mein Ergebnis natürlich nicht vorenthalten!

Hab die Datei jetzt noch auf 250 Zeilen erweitert sollten mal mehr als 4 Teilnehmer dabei sein

Jetzt muss ich noch nach dem Namen noch einen Vereinsnamen rein basteln, aber das schaffe ich auch noch irgendwie.
*Edit*
Verein ist nun auch dabei

Möchte euch mein Ergebnis natürlich nicht vorenthalten!
- Dateianhänge
-
- SBCA_Deckserie_Bewerbe.ods
- (32.36 KiB) 132-mal heruntergeladen
Re: Sortierung Deckserie (Schießsport)
Hallo nochmals
Ich muss leider nochmals lästig sein, sorry dafür!!
Ich habe das File nun halbwegs fertig, aber auch einen Fehler gefunden
Sobald 2 Schützen das gleich Ergebnis haben (z.B. beide Schützen haben 2x 60 Punkte geschossen), wird mir nur Schütze 1 angezeigt und bei Schütze 2 ist ein Fehler.
Ich habe es mal abgespeichert und hier angehängt
.
Desweiteren würde ich es auch gerne so haben, wenn beide punktgleich sind, dass sie auch den selben Platz haben.
Also
Platz 1 60 60
Platz 2 60 40
Platz 3 59 59
Platz 3 59 59
Platz 5 58 30
Platz 6 57 50
Platz 6 57 50
Platz 8 56 50
usw
Ich muss leider nochmals lästig sein, sorry dafür!!
Ich habe das File nun halbwegs fertig, aber auch einen Fehler gefunden
Sobald 2 Schützen das gleich Ergebnis haben (z.B. beide Schützen haben 2x 60 Punkte geschossen), wird mir nur Schütze 1 angezeigt und bei Schütze 2 ist ein Fehler.
Ich habe es mal abgespeichert und hier angehängt
.
Desweiteren würde ich es auch gerne so haben, wenn beide punktgleich sind, dass sie auch den selben Platz haben.
Also
Platz 1 60 60
Platz 2 60 40
Platz 3 59 59
Platz 3 59 59
Platz 5 58 30
Platz 6 57 50
Platz 6 57 50
Platz 8 56 50
usw
- Dateianhänge
-
- SBCA_Deckserie_Bewerbe.ods
- (102.23 KiB) 212-mal heruntergeladen
Re: Sortierung Deckserie (Schießsport)
Hallo
Dir wurde bereits eine Lösung vorgeschlagen, die "ohne" diesen Fehler daherkommt…
Dir wurde bereits eine Lösung vorgeschlagen, die "ohne" diesen Fehler daherkommt…
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Sortierung Deckserie (Schießsport)
Hallo Karolus
Ich habe die Methode von mikeleb genommen, da es genau das ist, was ich gesucht habe.
Jetzt habe ich gestern Stunden dazu verbracht, es so weit zu bringen, wie meine zuletzt angehängte Datei.
Ich habe deine Version auch ausprobiert, aber im Excel wird mir da kein Button angezeigt. Nur ich verwende Open Office im Verein, alle anderen verwenden Excel.
Das von dir verstehe ich leider überhaupt nicht. Wo füge ich das ein usw usw
Das von mikeleb verstehe ich halbweg und es funktioniert ja jetzt tadelos (in Open Office und Excel), bis auf die "Kleinigkeit".
Wäre toll, wenn ihr mir hier noch für den letzten Schritt weiterhelfen könntet. Wenn nicht, muss ich leider ein Auswertungsprogramm um 250€ kaufen.
Sorry wenn ich mich so blöd anstelle, aber das ist absolut nicht mein Gebiet
lg
Tommy
Ich habe die Methode von mikeleb genommen, da es genau das ist, was ich gesucht habe.
Jetzt habe ich gestern Stunden dazu verbracht, es so weit zu bringen, wie meine zuletzt angehängte Datei.
Ich habe deine Version auch ausprobiert, aber im Excel wird mir da kein Button angezeigt. Nur ich verwende Open Office im Verein, alle anderen verwenden Excel.
Das von dir verstehe ich leider überhaupt nicht. Wo füge ich das ein usw usw
Das von mikeleb verstehe ich halbweg und es funktioniert ja jetzt tadelos (in Open Office und Excel), bis auf die "Kleinigkeit".
Wäre toll, wenn ihr mir hier noch für den letzten Schritt weiterhelfen könntet. Wenn nicht, muss ich leider ein Auswertungsprogramm um 250€ kaufen.
Sorry wenn ich mich so blöd anstelle, aber das ist absolut nicht mein Gebiet

lg
Tommy
Re: Sortierung Deckserie (Schießsport)
HalloDesweiteren würde ich es auch gerne so haben, wenn beide punktgleich sind, dass sie auch den selben Platz haben.
In sortiert.$N$2:$N$250 steht als Rang 1;1;3;4.....usw 2 fehlt, obwohl Vergleich() in deiner Formel danach sucht
Die beiden Zeilen 1;1; unterscheiden sich nicht, daher kannst du auch nicht nach beiden Zeilen suchen
Vorschlag: in Sortiert!N2
ersetze =RANG(M2;$M$2:$M$250) durch =RANG(M2;$M$2:$M$250)+ZEILE()/1000 (Kannst die Nachkommastellen ja ausblenden)
Runter kopieren, jetzt unterscheiden sich die Einträge ohne den Rang zu verändern und du kannst danach suchen
in Rangliste! B11 den Vergleich() ein wenig erweitert, das wars
=VERSCHIEBUNG(sortiert.$A$1;VERGLEICH(KKLEINSTE(sortiert.$N$2:$N$250;$A11);sortiert.$N$2:$N$250;0);SPALTE()-2)
in Excel heißt die Funktion =VERSCHIEBUNG() =BEREICH.VERSCHIEBEN(), daher würde ich INDEX() auch der VERSCHIEBUNG() vorziehen
=INDEX(sortiert.$A$2:$L$250;VERGLEICH(KKLEINSTE(sortiert.$N$2:$N$250;$A11);sortiert.$N$2:$N$250;0);SPALTE(A1))
LG Holger
Zuletzt geändert von echo am Di, 21.03.2017 13:01, insgesamt 6-mal geändert.
Re: Sortierung Deckserie (Schießsport)
Hallo echo
Danke! Ich werde mal versuchen das umzusetzen!
lg
Danke! Ich werde mal versuchen das umzusetzen!
lg
Re: Sortierung Deckserie (Schießsport)
Hallo
Mit Excel-kompatibilität kann ich dir nicht dienen, der Aufwand steht für mich in keinem vernünftigen Verhältnis zum "Aufwand" ein paar Vereinskollegen davon zu überzeugen kostenlos Libre|Apache -office zu installieren.
Mit Excel-kompatibilität kann ich dir nicht dienen, der Aufwand steht für mich in keinem vernünftigen Verhältnis zum "Aufwand" ein paar Vereinskollegen davon zu überzeugen kostenlos Libre|Apache -office zu installieren.
Wow - Ein stolzer Preis für eine derart triviale Aufgabe!Wenn nicht, muss ich leider ein Auswertungsprogramm um 250€ kaufen.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)