Apache Poi - createCell() Methode akzeptiert keinen Index aus for-schleife als Parameter

JuriW

Aktives Mitglied
Ich will 2 Spalten aus einem bestehendem Excel Sheet in ein neues kopieren. Zuerst alle Zellen der ersten Spalte des alten sheets, dann alle Zellen der zweiten Spalte des alten sheets.

Java:
private static void createNewWorkBook(XSSFSheet oldSheet) {
    XSSFWorkbook newWorkbook = new XSSFWorkbook();

    XSSFSheet newSheet = newWorkbook.createSheet("test-sheet");
    for (int columnIndex = 0; columnIndex < 2; columnIndex++) {
        int rowIndex = 0;
        for (Row oldRow : oldSheet) {
            XSSFRow newRow = newSheet.createRow(rowIndex);
            XSSFCell newCell = newRow.createCell(columnIndex); 
            newCell.setCellValue("Hello"); // just for test purposes

            // newCell.setCellValue(oldSheet.getRow(rowIndex).getCell(columnIndex).getStringCellValue());

            rowIndex++;
        }

    }

    try {
        FileOutputStream fos = new FileOutputStream(new File("CreateExcelDemo.xlsx"));
        newWorkbook.write(fos);
        fos.close();
    } catch (
            IOException e) {
        e.printStackTrace();
    }
}

Leider funktioniert das so nicht. Die erste Spalte im neuen Excel-sheet wird freigelassen, und die zweite hat alle Werte. createCell() nimmt aus irgendeinem Grund meinen columnIndex nicht an, sondern verwendet immer nur den letzten Wert des index (also 1 in diesem Fall). Falls ich jedoch 0 händisch eingebe, wird die erste Spalte befüllt. Wo liegt mein Fehler?
 
was erwartest Du auch? Du erzeugst ja erst neue Rows für die erste Spalte ... wenn du damit durch bist, erzeugst du neue Rows für die zweite Spalte. Was soll Deiner Meinung nach passieren, wenn du eine neue erste Zeile erzeugst?
Das Pattern ist doch eigentlich einfach und logisch:
Für jede Zeile des Ursprungsdokumentes erzeugst Du eine neue Zeile im Ziel Dokument und fügst da alle Werte hinzu.
 
Danke, habs nun gelöst.

Java:
  private static void createNewWorkBook(XSSFSheet oldSheet) {
        XSSFWorkbook newWorkbook = new XSSFWorkbook();

        XSSFSheet newSheet = newWorkbook.createSheet("test-sheet");
        for (int columnIndex = 0; columnIndex < 2; columnIndex++) {
            int rowIndex = 0;
            for (Row oldRow : oldSheet) {

                XSSFRow newRow = newSheet.getRow(rowIndex);
                if (newRow == null) {
                    newRow = newSheet.createRow(rowIndex);
                }
                XSSFCell newCell = newRow.createCell(columnIndex);
                newCell.setCellValue("Hello"); // just for test purposes

                // newCell.setCellValue(oldSheet.getRow(rowIndex).getCell(columnIndex).getStringCellValue());

                rowIndex++;
            }

        }

        try {
            FileOutputStream fos = new FileOutputStream(new File("CreateExcelDemo.xlsx"));
            newWorkbook.write(fos);
            fos.close();
        } catch (
                IOException e) {
            e.printStackTrace();
        }
    }
 
Ok, wobei ich einfach die Schleifen getauscht hätte 🙂 Oder wenn es generell nur um 2 Zellen geht, dann wäre es sogar denkbar, da einfach zwei Zeilen draus zu machen a.la.
newRow.createCell(0).setCellValue(oldSheet.getRow(rowIndex).getCell(0).getStringCellValue());newRow.createCell(1).setCellValue(oldSheet.getRow(rowIndex).getCell(1).getStringCellValue());
 

Neue Themen


Zurück
Oben