# POI Excel sortieren



## schlaubie (25. Nov 2009)

Hallo Zusammen,

gibt es mit POI eine elegante Methode das Excel-Sheet nach mehreren Spalten zu sortieren.

Z.B Spalte 4 Aufwärts, 3 Abwärts, ...

Bis jetzt hab ich es mit shiftRow gemacht aber da muss es doch eigentlich was besseres geben oder?


----------



## faetzminator (25. Nov 2009)

Ich würde einfach Row[] durch Arrays.sort() mit einem selber implementierten Comparator hauen und danach von 0 an wieder manuell einfügen. Wär zumindest der einfachste (und wohl auch schnellste Weg -> Sortfunktion ist schnell implementiert).


----------



## schlaubie (26. Nov 2009)

Kanst du mir ein Beispiel schreiben wie dies mit POI gehen soll. Eine HSSFSheet getrows() Methode gibt es leider nicht! nur getRow(int rownummer) und die Row implementiert schon das Comparable interface. Die Implementierung sortiert aber leider nach der rownummer.


----------



## faetzminator (26. Nov 2009)

Das sollte folgendermassen funktionieren (ungetestet):

```
List<HSSFRow> sortedRows = new ArrayList<HSSFRow>();
for (HSSFRow row : hssfSheet) {
    sortedRows.add(row);
}
sortedRows = Collections.sort(sortedRows, new Comparator<HSSFRow>() {
    public int compare(HSSFRow row1, HSSFRow row2) {
        // dein code
    }
});
```


----------



## schlaubie (7. Dez 2009)

Hallo zusammen.

Erstmal einen herzlichen Dank an den faetzminator. 
Ich habe einen separaten ExcelComparator geschrieben undmir die Zeilen durch ihn sortieren lassen.

Dies hat wunderbar und vorallen performant funktioniert. Im nachhinein kann ich nur sagen man sollte die Methode shiftRow nicht in einer Schleife benutzen, da diese sehr unperformant ist. 3 Sekunden um 3000 Zeilen um eine Zeile nach oben zu verschieben. --> Immer schön einen eigen Comarator schreiben und dann funzt es auch!


----------

