Apache POI / новая строка в Excel одним нажатием кнопки - PullRequest
0 голосов
/ 07 августа 2020

Я сейчас пытаюсь написать программу, которая может лучше организовать ваше рабочее время. Поэтому я использую 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());
}

спасибо за помощь :)

1 Ответ

1 голос
/ 07 августа 2020

Я думаю, вам следует проверить, существует ли уже файл, прежде чем создавать новую книгу и электронную таблицу

Вы можете использовать что-то вроде:

EDIT: Я изменил строку что было причиной проблемы

 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...