Excel追加更新失败与Apache POI

我从URL中获取数据并尝试使用以下代码将行附加到现有的Excel文件中。

if (file.exists()) { in=new FileInputStream(new File(path)); workbook = new HSSFWorkbook(in); sheet = workbook.getSheetAt(0); in.close(); } else { workbook = new HSSFWorkbook(); sheet = workbook.createSheet(); row = sheet.createRow(0); row.createCell(0).setCellValue("keyTerm"); row.createCell(1).setCellValue("username"); row.createCell(2).setCellValue("Text"); row.createCell(3).setCellValue("Timestamp"); } 

接着

 int count = sheet.getLastRowNum(); for (int i = 0; i < tweets.length(); i++) { tweet = tweets.getJSONObject(i); count++; row = sheet.createRow(count); row.createCell(0).setCellValue(term); row.createCell(1) .setCellValue(tweet.getString("from_user")); row.createCell(2).setCellValue( tweets.getJSONObject(i).getString("text")); row.createCell(3).setCellValue( tweet.getString("created_at")); } 

该代码适用于新文件,但即使在以附加模式打开文件进行写入时也无法追加现有文件。

 out = new FileOutputStream(file, true); workbook.write(out); out.close(); 

write方法不会只写入您添加到电子表格的新增内容。 它将整个工作簿写入输出stream。 所以,如果你试图将整个新的工作簿附加到旧的工作簿,我可以看到它不会做你的想法。

写出工作簿到文件时,我从来没有附加到现有的文件。 您应该始终以(默认)覆盖模式打开stream,因此整个工作簿(除了整个工作簿外)都会转到stream和目标文件。

 out = new FileOutputStream(file); // or new FileOutputStream(file, false); 

您目前的代码仅在文件不存在时才起作用,因为没有任何内容可以附加到该文件。 总之,不要追加; 覆盖(或写入不同的文件)。