[Basic] Sortieren mit mehr als 3 Kriterien

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Bergwichtel
Beiträge: 3
Registriert: Fr, 02.11.2007 02:29

[Basic] Sortieren mit mehr als 3 Kriterien

Beitrag von Bergwichtel »

Hi,

Ich habe das Problem, das ich einen zusammenhängenden Bereich nach 4 Kritierien sortieren muß. Allerdings ignoriert calc mein 4. Kriterium.

Folgende Minimaltabelle:

Code: Alles auswählen

R	N	           V	  A	 F	 G
1	Anton			280	134	3	414
2	Bärbel	     289	142	2	431
3	Cäsar			280	134	1	414
4	Dora			 269	145	0	414
5	Emil			 280	134	3	414
Diese soll nach folgender Reihenfolge sortiert werden: Gdesc Adesc Fasc Rasc
Das Ergebnis muß also so aussehen:

Code: Alles auswählen

R	N	           V	  A	 F	 G
2	Bärbel	     289	142	2	431
4	Dora			 269	145	0	414
3	Cäsar			280	134	1	414
1	Anton			280	134	3	414
5	Emil			 280	134	3	414
Mein derzeitiger Code sieht so aus:

Code: Alles auswählen

Sub sortErgebnis
   Dim SortFeld(4) As new com.sun.star.table.TableSortField
   Dim SortProps(2) As new com.sun.star.beans.PropertyValue
   
   oDatei = ThisComponent
   oSheet = oDatei.Sheets.getByName("testtab")
   oBereich = oSheet.getCellRangeByName("Bereich")

    SortFeld(0).Field = 6
    SortFeld(0).IsAscending = false
    SortFeld(0).FieldType = com.sun.star.util.SortFieldType.NUMERIC
    SortFeld(1).Field = 4
    SortFeld(1).IsAscending = false
    SortFeld(1).FieldType = com.sun.star.util.SortFieldType.NUMERIC
    SortFeld(2).Field = 5
    SortFeld(2).IsAscending = true
    SortFeld(2).FieldType = com.sun.star.util.SortFieldType.NUMERIC

' begin ignorierter Teil
    SortFeld(3).Field = 1
    SortFeld(3).IsAscending = true
    SortFeld(3).FieldType = com.sun.star.util.SortFieldType.NUMERIC[/color]
' end ignorierter Teil

     SortProps(0).Name = "SortFields"
     SortProps(0).Value = SortFeld()
     SortProps(1).Name = "SortColumns"
     SortProps(1).Value = False
     SortProps(2).Name = "ContainsHeader"
     SortProps(2).Value = true
     oBereich.Sort(SortProps())
End Sub
Der markierte Bereich wird allerdings von calc ignoriert.
Wie bekomme ich es hin, daß das Makro nach allen 4 Kriterien sortiert bzw. wo liegt der Fehler in meinem Code?

Da ich erst seit ein paar Tagen mich mit Makros in OOo beschäftige und deutschsprachige Informationen dazu doch relativ rar sind, hätte ich noch eine
Zusatzfrage:
Wie kann ich die Spaltenüberschrift SortFeld(?).Field angeben?
Try&Error mit SortFeld(?).FieldByName, SortFeld(?).FieldByTitle etc. scheiterten. ;(

Gruß vom Berge
Gruß vom Berge
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: [Basic] Sortieren mit mehr als 3 Kriterien

Beitrag von turtle47 »

Hallo Bergwichtel,

schau Dir mal diese Seite mal an.
Dort ist ganz unten angegeben wie man über zwei Felder sortiert. Das könnte man sicherlich auch auf vier Felder ausbauen.
Der Code weiter oben ist natürlich auch zu beachten. Habe es selber noch nicht ausprobiert weil die Arbeit ruft.

Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Bergwichtel
Beiträge: 3
Registriert: Fr, 02.11.2007 02:29

Re: [Basic] Sortieren mit mehr als 3 Kriterien

Beitrag von Bergwichtel »

Hi Jürgen,

tja, von der Seite habe ich mein bischen Code. Aber damit funktioniert die Erweiterung auf mehr als 3 Kriterien leider nicht.
Gruß vom Berge
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: [Basic] Sortieren mit mehr als 3 Kriterien

Beitrag von turtle47 »

Hi Bergwichtel,

Bei der Sortierlogik blicke ich ehrlich gesagt nicht so ganz durch. :oops:
Da war ich in der Schule bestimmt krank und könnte ein wenig Nachhilfe gebrauchen.

Code: Alles auswählen

/color
Was sollte das denn in Deinem Code?

Ich habe mal Deinen Code ausprobiert und da stimmte ja gar nichts mit dem von Dir aufgezeigten Ergebnis überein.
Das Makro habe ich mal nach meine Vorstellungen mal angepasst und die Sortierung stimmt schon wesentlich besser
mit dem erwarteten Ergebnis überein.

Bis auf
5 -> Emil
und
1 -> Anton
ist alles OK.

Entweder stimmt der Code immer noch nicht, oder das von Dir aufgezeigte Endergebnis ist falsch. Was ich aber nicht glaube.
Denn Du bist da mehr der Experte. Schau Dir die angehängte Tabelle einfach mal an.

Sortieren.zip -> Sortieren.ods
Sortieren.zip
(10.93 KiB) 52-mal heruntergeladen
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Bergwichtel
Beiträge: 3
Registriert: Fr, 02.11.2007 02:29

Re: [Basic] Sortieren mit mehr als 3 Kriterien

Beitrag von Bergwichtel »

turtle47 hat geschrieben:Bei der Sortierlogik blicke ich ehrlich gesagt nicht so ganz durch. :oops:
Ok, mit einfachen Worten.
Sortiere zuerst nach Spalte G absteigend, dann nach Spalte A absteigend, dann Spalte F aufsteigend und dann nach Spalte R aufsteigend.

Code: Alles auswählen

/color
Was sollte das denn in Deinem Code?
Ich wollte erst innerhalb des code-Blockes die Zeilen, die jetzt von 2 remarks umschlossen sind, farbig hervorheben. Bei der Vorschau habe ich gesehen, das dies nicht geht und das Stück UBB-Code übersehen mit rauszunehmen.

Ich habe mal Deinen Code ausprobiert und da stimmte ja gar nichts mit dem von Dir aufgezeigten Ergebnis überein.
Die Tabelle ist nur ein Teil von der wirklichen Tabelle. Evtl. habe ich die Spalten falsch im Beispiel gesetzt. Jedenfalls sind die beiden Tabellenausschnitte copy und paste vor und nach dem Lauf des Makros (nur ein paar Spalten dabei entfernt und Emil mit Anton vertauscht). Muß ich morgen meinen geposteten Code testen.
Das Makro habe ich mal nach meine Vorstellungen mal angepasst und die Sortierung stimmt schon wesentlich besser
mit dem erwarteten Ergebnis überein.

Bis auf
5 -> Emil
und
1 -> Anton
ist alles OK.
Genau. Da liegt der Haken. Die ersten 3 Kritierien werden beachtet, das vierte Kriterium nicht.
Übrigens, wirft der Debugger keine Fehlermeldung aus, wenn ich Dim SortFeld(4) As new com.sun.star.table.TableSortField auf 3 setze, ohne SortFeld(3).* zu entfernen. Setze ich es hingegen auf 2, kommt die entsprechende Fehlermeldung.
Daraus ziehe ich die Befürchtung, das basic nicht mehr als 3 Kriterien akzeptiert.
Entweder stimmt der Code immer noch nicht, oder das von Dir aufgezeigte Endergebnis ist falsch. Was ich aber nicht glaube.
Oder, was ich fast glaube, das nach dieser Form nur nach 3 Kriterien sortiert werden können.
Schau Dir die angehängte Tabelle einfach mal an.
Mache ich morgen, wenn ich mehr Zeit habe. Ich melde mich dann wieder.
Gruß vom Berge
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: [Basic] Sortieren mit mehr als 3 Kriterien

Beitrag von turtle47 »

Guten Morgen Bergwichtel,

es ist leider nicht möglich mehr als 3 Sortierfelder anzugeben. :(
Lese dazu bitte den Mail-reader.
Mail-Reader hat geschrieben:Leider nein, die Sortierung ist wirklich auf 3 Felder, die Filterung auf
8 Kriterien beschränkt. Fehler von mir.
Ich werde das mal an Michael weitergeben, vielleicht nimmt er den Hinweis in seine Internetseite mit auf.

Trotzdem schönes Wochenende.

Jürgen


Edit: Ich habe mir mal ein Workaround ausgedacht.
Kriterium Fasc wird ja als letztes sortiert.
Jetzt habe ich in Zelle "G2" Fasc und Rasc mit folgender Formel verkettet:

Code: Alles auswählen

=VERKETTEN(E2;A2)
und die Formel für die anderen Zeilen nach unten gezogen.

Anstelle von Fasc habe ich nun die Hilfsspalte Fasc & Rasc sortieren lassen und siehe da, Anton und Emil sind in der richtigen Reihenfolge. :D
Das funktioniert aber nur wenn Rasc im Einerbereich liegt. Also grösser als 9 geht nicht!

Die Hilfsspalte kann man z.B. auch ausblenden.
Schau es Dir einfach mal an.

Hilft das weiter?

Sortieren_Neu.zip -> Sortieren_Neu.ods
Dateianhänge
Sortieren_Neu.zip
(11.78 KiB) 63-mal heruntergeladen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Antworten