Apache-POI / Java /写入Excel文件时忽略行

问题描述

所以我想将我写到Excel文件中的一些数字加在一起。在文件的末尾,我想写入结果,但是我的问题是,每次创建Excel文件时,我都可以写两行,但是第二行会被跳过,因此没有写入任何内容。在第三行之后,一切继续正常运行。我尝试自己解决问题,但很遗憾,我无法解决任何问题。

这是我写入ExelFile的代码

try {
        boolean fileExists = new File("Stundenabrechnung" + test + ".xlsx").exists();
        XSSFWorkbook workbook;
        XSSFSheet sheet;

        if (fileExists) {

            workbook = new XSSFWorkbook(new FileInputStream(new File("Stundenabrechnung" + test + ".xlsx")));
            sheet = workbook.getSheetAt(0);


            Map<String,Object[]> data = new TreeMap<>();
            data.put("3",new Object[]{datum,ergebnis + "0",LHabg.getText(),über,taBes.getText()});

            Set<String> keyset = data.keySet();
            int rownum = sheet.getPhysicalNumberOfRows();
            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:","ÜBERSTUNDEN:"," BESCHREIBUNG:"});
            data.put("2",Lueber.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" + test + ".xlsx");
                workbook.write(outputStream);
                workbook.close();

            } catch (Exception e) {
                e.printstacktrace();
            }
            System.out.println("ExcelFile is created succsessfully");

这是结果的代码

XSSFRow rowTotal = sheet.createRow(24);
        XSSFCell totalText = rowTotal.createCell(2);
        totalText.setCellValue("Überstunden:");
        XSSFCell totalValue = rowTotal.createCell(3);
        totalValue.setCellFormula("SUM(D2:D20)");

我尝试将ResultCode放入if-else语句中,但是没有用。

这是ExcelFile的样子:

ExcelFile

我希望有人可以帮助我,因为这是我必须解决的最后一个问题。完成此程序后。

谢谢!

解决方法

我认为您从第3行开始,尝试从getPhysicalNumberOfRows()更改getLastRowNum()。