Apache POI Filtern nach bestimmten Kriterium

Hey zusammen!

In meinem jetzigen Projekt erstelle ich eine Pivot Tabelle mit Hilfe von Apache POI.
Das funktioniert auch alles, jedoch möchte ich noch ein paar Optimierungen vornehmen.
Ich erstelle einen Filter aus einer Spalte, welche die vier Himmelrichtungen besitzt.
Mit der Funktion addReportFilter(); kann ich zwar manuell in Excel nach den Himmelsrichtungen sortieren,
jedoch möchte ich Im Code schon ein Standardwert wie bspw. "Süd" festlegen.
Immer wenn ich die Excel-Tabelle öffne, soll mir die Pivot-Tabelle also die gefilterten Daten nach "Süd" aufzeigen.
Ist das möglich und wenn ja wie?
Unten meinen bisherigen Code:
Code:
public static void CreatePivotTable() {

        
        String fileNameRead = Path.INTERN_PATH + "\\" + "Intern.xlsx";
        String fileNameWrite = Path.ERGEBNIS_PATH+ "\\" + "VTD.xlsx";
try {
            FileInputStream internExcelTable = new FileInputStream(new File(fileNameRaed));

            //Erzeugen eines Workbooks und der Basis-Tabelle
            XSSFWorkbook wb = new XSSFWorkbook(internExcelTable);

            //Erzeugen eines neuen Sheets
            XSSFSheet pivotSheet = wb.createSheet("My-Sheet");
            XSSFSheet sheet = wb.getSheetAt(0);

            //Festlegen des relevanten Bereiches für die Pivot-Tabelle
            AreaReference a = new AreaReference("A1:P721", SpreadsheetVersion.EXCEL2007);

            //Festlegen des Startbereiches der Pivot-Tabelle
            CellReference b = new CellReference("A1");

            //Erzeugen der Tabelle
            XSSFPivotTable pivotTable = pivotSheet.createPivotTable(a,b,sheet);          
           
            //Erzeugen der verschied. Filter
            pivotTable.addReportFilter(15);        //Filtern der Himmelsrichtungen
            pivotTable.addRowLabel(14);
            pivotTable.addRowLabel(1);
           
            pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 5);
            pivotTable.addColumnLabel(DataConsolidateFunction.COUNT, 5);
           
           
            OutputStream os = new FileOutputStream(fileNameWrite);
           
            wb.write(os);
            internExcelTable.close();
           
        } catch (FileNotFoundException e) {
            e.printStackTrace();
           
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
Zuletzt bearbeitet:
Hallo Sweetmuffin98,

bitte, bitte, für die Augen von jedem, der Java benutzt, bitte camelCase deine Methodennamen richtig. Dies ist createPivotTable() und nicht CreatePivotTable(), wobei letzteres eine C# -Konvention ist.

Gebe deinem FileInputStream internExcelTable außerdem einen besseren Namen, um anzuzeigen, dass es sich um einen Stream handelt, z. B. sheetInputStream.

Ich empfehle, deine Methode mit einigen Argumenten zu versehen, um sie OOP-freundlicher und wiederverwendbarer zu machen.
Erstelle Argumente wie originalSheetId
übergeben es an wb.getSheetAt(originalSheetId);

Wenn du also das nächste Mal ein Blatt (payload) hast, das nicht das 0. (1.) Blatt ist, kannst du die Methode erneut verwenden.

Erläutere bitte auch, welche Ergebnisse du derzeit erhältst und welche Ergebnisse du erwartest. Ich gehe davon aus, dass du nach dieser ganzen Spalte filterst, sie aber auf etwas beschränken möchtest, das mit Süd markiert ist.

Lade das Excel-Beispiel-Blatt, das du in "Intern.xlsx", in deine Variable "fileNameRead", verwendest, hoch. Dies ist wahrscheinlich nicht die beste Art, deine Variable zu benennen.

Übrigens empfehle ich das Buch "Clean Code".


Grüße
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben