2016-11-17 144 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。你有沒有例外? –