2016-11-17 145 views
1

我刚刚开始使用Apache POI来做一些优秀的读写操作,而且我遇到了一些问题。我有一个提交按钮阅读格式的文本字段,并打印出来到Excel文件:用Apache POI读/写

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

     Map<String, Object[]> data = new TreeMap<String, Object[]>(); 

     data.put("1", new Object[] {"Reservation ID", "NAME", "ARRIVAL DATE", "LENGTH OF STAY","HOME ADDRESS", "EMAIL", "PHONE NUMBER" ,"RESERVATION TYPE"}); 
     data.put("2", new Object[] {1, advanceLastField.getText(), arrivalDateForm.getText(), stayNum.getText(),advanceAddressForm.getText(), advanceEmailForm.getText(),advancePhoneForm.getText(),"D"}); 

     Set<String> keyset = data.keySet(); 
     int rownum = 0; 
     for (String key : keyset){ 
      Row row = sheet.createRow(rownum++); 
      Object [] objArr = data.get(key); 
      int cellnum = 0; 
      for (Object obj : objArr){ 
       Cell cell = row.createCell(cellnum++); 
       if(obj instanceof String) 
        cell.setCellValue((String)obj); 
       else if(obj instanceof Integer) 
        cell.setCellValue((Integer)obj); 
      } 

     } 
     try{ 
      FileOutputStream out = new FileOutputStream(new File("testSheet.xls"),true); 
      workbook.write(out); 
      out.close(); 
      System.out.println("Advance Reservation succesfully written"); 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 
    } 
    }catch(NumberFormatException e){ 
     parsable1=false; 
    } 

这是正常的,但我的问题是试图以后更新Excel工作表。这是我的更新代码:

  FileInputStream inp = new FileInputStream(new File("testSheet.xls")); 
     HSSFWorkbook wb = new HSSFWorkbook(inp); 
     HSSFSheet sheet = wb.getSheetAt(0); 
     if(idLookup.getText() == "1"){ 
      if(updateNameForm.getText()!= null){ 
       Row row = sheet.getRow(1); 
       Cell cell = row.getCell(1); 
       cell.setCellType(CellType.STRING); 
       cell.setCellValue(updateNameForm.getText()); 
      } 
     } 
FileOutputStream fileOut = new FileOutputStream("testSheet.xls",true); 
wb.write(fileOut); 
fileOut.close(); 

任何人都可以给我一些见解或指导吗?谢谢!

回答

1

您正在将数据追加到文件中。我假设你想重新创建表单。

public FileOutputStream(String name, boolean append) throws FileNotFoundException 

追加 - 如果为true,则将字节写入文件 而不是开头

而且年底,确保重用文件

之前关闭输入流
inp.close(); 

FileOutputStream fileOut = new FileOutputStream("testSheet.xls"); 
wb.write(fileOut); 
fileOut.close(); 
+0

谢谢,但它似乎并没有解决它。我基本上想要做的是将指定单元格(第1行的单元格1)中的信息替换为来自不同文本字段的新信息。 –

+0

@HunterChildress,您必须在最后覆盖工作表对象到文件。检查编辑,我只注意到inputstream没有关闭,并且在同一个文件上打开一个新的outputstream。你有没有例外? –