在Excel工作表的列末尾写入Excel数据

时间:2019-06-20 15:52:41

标签: java apache-poi

我想在列的末尾添加值,但是如果我运行该类,它将覆盖excel

JAVA和Apache POI:

    // Blank workbook
    XSSFWorkbook workbook = new XSSFWorkbook();
    // Create a blank sheet
    XSSFSheet sheet = workbook.createSheet("MyPolicies");
    // Iterate over data and write to sheet
    Set<Integer> keyset = data.keySet();
    int rownum = 0;
    for (Integer key : keyset) {
        // this creates a new row in the sheet
        Row row = sheet.createRow(rownum++);
        Object[] objArr = data.get(key);
        int cellnum = 0;
        for (Object obj : objArr) {

            // this line creates a cell in the next column of that row
            Cell cell = row.createCell(cellnum++);
            if (obj instanceof String) {
                cell.setCellValue((String) obj);
            }

            else if (obj instanceof Integer)
                cell.setCellValue((Integer) obj);
        }
    }
    try {
        // this Writes the workbook
        FileOutputStream out = new FileOutputStream(new File("extract.xlsx"));
        workbook.write(out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

每次都会覆盖Excel,并且仅添加新数据。 注意:如果两个ID都相同,我们需要在同一行中添加第二个地图数据

1 个答案:

答案 0 :(得分:2)

每次替换文档的原因是您的workbook为空白。 workbook.write(out)意味着您将工作簿中的所有内容都写入一个位置(extract.xlsx),而不是将工作簿中的数据写入文件中!

您应该做的是打开您要编辑的工作簿:

FileInputStream xlsFile = new FileInputStream("extract.xls");
XSSFWorkbook workbook = new XSSFWorkbook(xlsFile);

...获取最后一行或最后一列

XSSFSheet sheet = workbook.getSheetAt(0);
int lastRow = sheet.getLastRowNum();

...,然后从那里写入数据。 然后,和以前一样,您可以使用workbook.write(out)保存工作簿。