使用Apache POI附加Excel文件

时间:2014-03-20 18:51:25

标签: java excel apache-poi

我有一个java程序,每次运行它都会输出1000个整数值。我想在每次运行程序时将输出复制到excel文件。我想在excel文件的第一列中输出第一次运行,然后在同一个excel文件的后续列中复制下一次运行。例如:

运行:1 值1 值2 。 。 value1000 兼营:2 值1 值2 。 。 value1000 我想要excel文件的第一列中的第一个输出和第二列中的第二个输出

这是我的代码:

  int rownum=1;
  int cellnum=1;
  File file; 
  HSSFWorkbook workbook;
  HSSFSheet sheet;
  HSSFRow row;
  HSSFCell cell;

  HSSFWorkbook workbook = new HSSFWorkbook();
  HSSFSheet sheet = workbook.createSheet("Sample sheet");

  public void writeOutput(double meandispersion) {    

      String dispersion = Double.toString(meandispersion);

      HSSFRow row = sheet.createRow(rownum++);
      HSSFCell cell = row.createCell(cellnum);    
      cell.setCellValue("dispersion");

      try {
          FileOutputStream out = new FileOutputStream("newFile.xls");
          workbook.write(out);
          out.close();
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
       }   

  }

主代码中总共有1000个时间步,并且在每个时间步中调用此方法并将meandispersion的值传递给它。它在第一列中打印1000行的1000个值。问题是,当我第二次运行程序时,我想复制第二列中的1000个值,第三个运行第三列,依此类推。目前它没有追加值,它会覆盖整个文件。有谁可以指出这个问题?

2 个答案:

答案 0 :(得分:2)

您必须阅读现有文件,自己将新输出附加到现有数据(在正确的列中,然后将其写入文件。

现在你根本没有读取文件,这会覆盖现有内容。

希望这有帮助。

答案 1 :(得分:2)

POI' Quick Guide又名"忙碌的开发者' HSSF和XSSF功能指南"包含许多代码片段,包括一个讨论打开现有工作簿,以及读取和编写并保存修改后的工作簿的代码片段(从该页面逐字复制的示例,添加了一些注释):

InputStream inp = new FileInputStream("workbook.xls");
// notice how the Workbook must be constructed from the existing file
Workbook wb = WorkbookFactory.create(inp);
// Navigating in POI always follows the same logic:
// 1. grab a sheet
// 2. grab a row from that sheet
// 3. grab a cell from that row
Sheet sheet = wb.getSheetAt(0);
Row row = sheet.getRow(2);
Cell cell = row.getCell(3);
// a condition like the one that follows will be needed to know in what column
// you have to write your data:   
if (cell == null)
    cell = row.createCell(3);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("a test");

// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();

那个,以及该页面上的其他示例可以让您快速上手。