2013-03-04 102 views
0

我从URL获取数据,并尝试将行追加到现有Excel文件下面的代码..Excel中添加更新失败的Apache POI

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(); 

回答

3

write方法不会只写入您添加到电子表格的新增内容。它将整个工作簿写入输出流。因此,如果您尝试将整个新工作簿添加到旧工作簿中,我可以看到它不会执行您的想法。

将工作簿写出到文件时,我从未附加到现有文件。您应该始终以(默认)覆盖模式打开流,以便整个工作簿(除了整个工作簿外)都进入流和目标文件。

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

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

+0

谢谢。但是,从长远来看,这并不昂贵,比如说我有30K记录,并且几乎没有添加10-12条记录。 – MalTec 2013-03-04 22:00:20

+0

是的,但不能提供帮助。 'write'方法是输出电子表格的唯一方法,它会写入所有内容。 – rgettman 2013-03-04 22:07:48