2013-03-04 40 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