一键按下 Apache POI / Excel 中的新行

Apache POI / new row in Excel with one button press

我目前正在尝试编写一个可以更好地安排您的工作时间的程序。所以我使用 Apache POI 创建了一个 Excel 文件。我已经比较远了,但我无法在某一点上进一步。我的问题是您输入每天的小时数,程序将它们写入相应的 Excel 文件中。但是,如果我想进入第二天,程序会覆盖 Excel 文件,并且删除前一天。 所以我的问题是我不知道如何在下面的行中书写。 我已经尝试过 FileInputStream,但它并没有真正起作用,因为我每个月都会创建一个新文件。

这是我创建和编写 Excel 文件的代码。

public void speichern(ActionEvent event) throws Exception {

        LocalDate localDate = date.getValue();
        datum = String.valueOf(localDate);

        do {
            if(btnNextMon.isArmed()){
                monClick++;
                System.out.println(monClick);
            }
            if (btnSave.isArmed()){
                saveClick++;
            }

            try {
                XSSFWorkbook workbook = new XSSFWorkbook();
                XSSFSheet sheet = workbook.createSheet("Stundenabrechnung");
                sheet.setDefaultColumnWidth(18);


                Map<String, Object[]> data = new TreeMap<>();
                data.put("1", new Object[]{"DATUM:", " INS. ABG. STUNDEN:", " ABGR. STUNDEN:", " BESCHREIBUNG:"});
                data.put("2", new Object[]{datum, ergbnis + "0", LHabg.getText(), taBes.getText()});


                Set<String> keyset = data.keySet();
                int rownum = 0;
                for (String key : keyset) {
                    XSSFRow row = sheet.createRow(rownum++);
                    Object[] objArr = data.get(key);
                    int cellnum = 0;
                    for (Object obj : objArr) {

                        XSSFCell cell = row.createCell(cellnum++);
                        CellStyle cellStyle = workbook.createCellStyle();
                        cellStyle.setAlignment(HorizontalAlignment.CENTER);
                        cellStyle.setVerticalAlignment(VerticalAlignment.TOP);
                        cell.setCellStyle(cellStyle);
                        if (obj instanceof String) {
                            cell.setCellValue((String) obj);
                        } else if (obj instanceof Integer) {
                            cell.setCellValue((Integer) obj);
                        }


                    }

                }
                FileOutputStream outputStream = new FileOutputStream("Stundenabrechnung" + monClick +".xlsx");
                workbook.write(outputStream);
                workbook.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("ExcelFile is created succsessfully");
        }while (btnNextMon.isPressed());
}

感谢您的帮助:)

我认为您应该在创建新书和电子表格之前检查该文件是否已经存在

您可以使用类似的东西:

编辑: 我更改了导致问题的行

 try {
    boolean fileExists = new File("Stundenabrechnung" + monClick +".xlsx").exists();
        XSSFWorkbook workbook;
        XSSFSheet sheet;
    if (fileExists) {
        workbook = new XSSFWorkbook(new FileInputStream(new File("Stundenabrechnung" + monClick +".xlsx")));
        sheet = workbook.getSheetAt(0);
        
        Map<String, Object[]> data = new TreeMap<>();
        data.put("3", new Object[]{datum, ergbnis + "0", LHabg.getText(), taBes.getText()});

        Set<String> keyset = data.keySet();
        int rownum = sheet.getLastRowNum() + 1;             
        for (String key : keyset) {
            XSSFRow row = sheet.createRow(rownum++);
            Object[] objArr = data.get(key);
            int cellnum = 0;
            for (Object obj : objArr) {

                XSSFCell cell = row.createCell(cellnum++);
                CellStyle cellStyle = workbook.createCellStyle();
                cellStyle.setAlignment(HorizontalAlignment.CENTER);
                cellStyle.setVerticalAlignment(VerticalAlignment.TOP);
                cell.setCellStyle(cellStyle);
                if (obj instanceof String) {
                    cell.setCellValue((String) obj);
                } else if (obj instanceof Integer) {
                    cell.setCellValue((Integer) obj);
                }
            }
        }
    } else {
        workbook = new XSSFWorkbook();
        sheet = workbook.createSheet("Stundenabrechnung");
        sheet.setDefaultColumnWidth(18);

        Map<String, Object[]> data = new TreeMap<>();
        data.put("1", new Object[]{"DATUM:", " INS. ABG. STUNDEN:", " ABGR. STUNDEN:", " BESCHREIBUNG:"});
        data.put("2", new Object[]{datum, ergbnis + "0", LHabg.getText(), taBes.getText()});

        Set<String> keyset = data.keySet();
        int rownum = 0;
        for (String key : keyset) {
            XSSFRow row = sheet.createRow(rownum++);
            Object[] objArr = data.get(key);
            int cellnum = 0;
            for (Object obj : objArr) {

                XSSFCell cell = row.createCell(cellnum++);
                CellStyle cellStyle = workbook.createCellStyle();
                cellStyle.setAlignment(HorizontalAlignment.CENTER);
                cellStyle.setVerticalAlignment(VerticalAlignment.TOP);
                cell.setCellStyle(cellStyle);
                if (obj instanceof String) {
                    cell.setCellValue((String) obj);
                } else if (obj instanceof Integer) {
                    cell.setCellValue((Integer) obj);
                }
            }
        }
    }
    FileOutputStream outputStream = new FileOutputStream("Stundenabrechnung" + monClick +".xlsx");
    workbook.write(outputStream);
    workbook.close();

} catch (Exception e) {
    e.printStackTrace();
}