Java Apache POI/Excel中的新行,只需按一个按钮

Java Apache POI/Excel中的新行,只需按一个按钮,java,javafx,apache-poi,Java,Javafx,Apache Poi,我目前正试图写一个程序,可以更好地组织你的工作时间。所以我使用ApachePOI创建了一个Excel文件。我已经走得比较远了,但我一点也走不远了。我的问题是,您输入每天的小时数,程序会将其写入相应的Excel文件中。但是,如果我想进入第二天,程序将覆盖Excel文件并删除前一天。 所以我的问题是,我不知道如何在下面的行中书写。 我已经尝试过FileInputStream,但它没有真正起作用,因为我每个月都创建一个新文件 这是我创建和编写Excel文件的代码 public void speiche

我目前正试图写一个程序,可以更好地组织你的工作时间。所以我使用ApachePOI创建了一个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());
}
public void speichen(ActionEvent事件)引发异常{
LocalDate LocalDate=date.getValue();
datum=String.valueOf(localDate);
做{
if(btnNextMon.isArmed()){
monClick++;
System.out.println(monClick);
}
if(btnSave.isArmed()){
saveClick++;
}
试一试{
XSSFWorkbook工作簿=新XSSFWorkbook();
XSSFSheet sheet=workbook.createSheet(“Stundenabrechnung”);
活页宽度(18);
映射数据=新树映射();
data.put(“1”,新对象[]{“数据:”,“INS.ABG.STUNDEN:”,“ABGR.STUNDEN:”,“BESCHREIBUNG:”});
put(“2”,新对象[]{datum,ergbnis+“0”,LHabg.getText(),taBes.getText()});
Set keyset=data.keyset();
int rownum=0;
用于(字符串键:键集){
XSSFRow row=sheet.createRow(rownum++);
Object[]objArr=data.get(key);
int-cellnum=0;
用于(对象对象对象:对象对象对象){
XSSFCell cell=row.createCell(cellnum++);
CellStyle CellStyle=workbook.createCellStyle();
cellStyle.setAlignment(水平对齐.中心);
室柱。垂直排列(垂直排列。顶部);
cell.setCellStyle(cellStyle);
if(字符串的obj实例){
cell.setCellValue((字符串)obj);
}else if(obj instanceof Integer){
cell.setCellValue((整数)obj);
}
}
}
FileOutputStream outputStream=新的FileOutputStream(“Stundenabrechnung”+monClick+“.xlsx”);
workbook.write(outputStream);
workbook.close();
}捕获(例外e){
e、 printStackTrace();
}
System.out.println(“成功创建Excel文件”);
}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();
}
试试看{
boolean fileExists=新文件(“Stundenabrechnung”+monClick+“.xlsx”).exists();
XSSF工作手册;
XSSF表;
如果(文件存在){
工作簿=新XSSF工作簿(新文件输入流(新文件(“Stundenabrechnung”+monClick+“.xlsx”));
工作表=工作簿。getSheetAt(0);
映射数据=新树映射();
put(“3”,新对象[]{datum,ergbnis+“0”,LHabg.getText(),taBes.getText()});
Set keyset=data.keyset();
int rownum=sheet.getLastRowNum()+1;
用于(字符串键:键集){
XSSFRow row=sheet.createRow(rownum++);
Object[]objArr=data.get(key);
int-cellnum=0;
用于(对象对象对象:对象对象对象){
XSSFCell cell=row.createCell(cellnum++);
CellStyle CellStyle=workbook.createCellStyle();
cellStyle.setAlignment(水平对齐.中心);
室柱。垂直排列(垂直排列。顶部);
cell.setCellStyle(cellStyle);
if(字符串的obj实例){
cell.setCellValue((字符串)obj);
}else if(obj instanceof Integer){
cell.setCellValue((整数)obj);
}
}
}
}否则{
工作簿=新XSSFWorkbook();
sheet=workbook.createSheet(“Stundenabrechnung”);
活页宽度(18);
映射数据=新树映射();
data.put(“1”,新对象[]{“数据:”,“INS.ABG.STUNDEN:”,“ABGR.STUNDEN:”,“BESCHREIBUNG:”});
put(“2”,新对象[]{datum,ergbnis+“0”,LHabg.getText(),taBes.getText()});
Set keyset=data.keyset();
int rownum=0;
用于(字符串键:键集){
XSSFRow row=sheet.createRow(rownum++);
Object[]objArr=data.get(key);
int-cellnum=0;
用于(对象对象对象:对象对象对象){
XSSFCell cell=row.createCell(cellnum++);
CellStyle CellStyle=workbook.createCellStyle();
cellStyle.setAlignment(水平对齐.中心);
室柱。垂直排列(垂直排列。顶部);
cell.setCellStyle(cellStyle);
if(字符串的obj实例){
cell.setCellValue((字符串)obj);
}else if(obj instanceof Integer){
cell.setCellValue((整数)obj);
}
}
}
}
FileOutputStream outputStream=新的FileOutputStream(“Stundenabrechnung”+monClick+“.xlsx”);
workbook.write(outputStream);
workbook.close();
}捕获(例外e){
e、 printStackTrace();
}

嘿,丹尼尔,谢谢你的帮助。我理解你的解决方案,但它仍然覆盖