Java更改单元格内容,而不是创建新的单元格

时间:2019-02-11 09:56:37

标签: java excel apache-poi

我在excel文件中有一个变量列表,用作在线应用程序的输入并生成结果。但是,当我尝试通过添加新列和单元格将输出保存到同一文件中时,会成功发生,该文件的原始内容将被删除。我只想将信息添加到同一文档中,但是通过谷歌搜索发现的唯一选择是创建另一个文件。

只是为了澄清:Variables for input 而不是仅添加信息,而是Changed document

如何在不添加更多参数和重新添加信息的情况下进行修复?

@Keyword
public void demoKey(String name) throws IOException{
    FileInputStream fis = new FileInputStream("C://Users/i2srsm/Desktop/New Microsoft Excel Worksheet.xlsx");
    XSSFWorkbook workbook = new XSSFWorkbook(fis);
    XSSFSheet sheet = workbook.getSheet("Data for full set");
    int columnNumber = sheet.getRow(0).getLastCellNum();
    int firstRow = sheet.getFirstRowNum();
    int lastRow = sheet.getLastRowNum();
    sheet.createRow(firstRow).createCell(columnNumber).setCellValue('Proposta');
    for (int rn=(firstRow); rn<=lastRow; rn++){
        Cell cell = sheet.createRow(rn).createCell(columnNumber+1)
        cell.setCellType(cell.CELL_TYPE_STRING);
        cell.setCellValue(name);
        FileOutputStream fos = new FileOutputStream("C://Users/i2srsm/Desktop/New Microsoft Excel Worksheet.xlsx");
        workbook.write(fos);
        fos.close();
    }
}

}

1 个答案:

答案 0 :(得分:0)

请勿使用sheet.createRow(row index)更新现有的excel文件。这将创建一个新行。如果要更新工作表中的现有行,请首先获取相关的现有行,然后创建一个新单元格。

获取现有行

Row row = sheet.getRow(row index);

在现有行上方创建新单元格

Cell cell = row.createCell(cell index);

尝试

sheet.getRow(firstRow).createCell(columnNumber).setCellValue("Proposta");

for (int i=(firstRow+1); i<=lastRow; i++){
    Row row = sheet.getRow(i);
    Cell cell = row.createCell(columnNumber);
    cell.setCellType(cell.CELL_TYPE_STRING);
    cell.setCellValue(name);
}

FileOutputStream fos = new FileOutputStream("C:/Users/LifeStyle/Documents/output.xlsx");
workbook.write(fos);
fos.close();