2016-11-17 3 views
1

Ich habe gerade erst begonnen Apache POI zu verwenden, um einige Excel-Lesen und Schreiben zu machen, und ich habe ein bisschen ein Problem. Ich habe eine Schaltfläche Lese Form Textfelder vor und macht ihn in eine Excel-Datei zu drucken:Lesen/Schreiben mit 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; 
    } 

Dies funktioniert korrekt, aber mein Problem versucht, das Excel-Blatt danach zu aktualisieren. Das ist mein Aktualisierungscode:

  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(); 

Kann mir jemand ein bisschen Einblick oder Anleitung geben? Vielen Dank!

Antwort

1

Sie fügen Daten an die Datei an. Ich nehme an, dass Sie das Blatt neu erstellen möchten.

public FileOutputStream(String name, boolean append) throws FileNotFoundException 

append - wenn sie wahr ist, dann wird Bytes bis zum Ende der statt Anfangs

Auch Datei geschrieben wird, stellen Sie sicher, dass der Eingangsstrom zu schließen, bevor die Datei Wiederverwendung

inp.close(); 

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

Danke, aber es scheint nicht behoben zu haben. Was ich im Grunde versuche zu tun, ist, die Information in der spezifizierten Zelle (Zelle 1 in Reihe 1) durch die neue Information aus einem anderen Textfeld zu ersetzen. –

+0

@HunterChildress, Sie müssen das Blattobjekt zu einer Datei am Ende überschreiben. Überprüfen Sie die Bearbeitung, ich habe gerade festgestellt, dass der Eingangsstrom nicht geschlossen wurde und ein neuer Ausgabestrom für die gleiche Datei geöffnet ist. Erhalten Sie irgendwelche Ausnahmen? –