我想在列的末尾添加值,但是如果我运行该类,它将覆盖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都相同,我们需要在同一行中添加第二个地图数据
答案 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)
保存工作簿。