0

我从 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();
4

1 回答 1

3

write方法不会只写入您对电子表格所做的新添加。它将整个工作簿写入输出流。因此,如果您尝试将整个新工作簿附加到旧工作簿,我可以看到它不会按照您的想法进行。

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

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

您当前的代码仅在文件尚不存在时才有效,因为没有可附加的内容。总之,不要追加;覆盖(或写入不同的文件)。

于 2013-03-04T21:24:59.940 回答