2016-11-17 6 views
1

Я только недавно начал использовать Apache POI для чтения и записи Excel, и у меня есть проблема. У меня есть кнопка отправки формы чтения текстовых полей и печать в файл 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; 
    } 

Это работает правильно, но мой вопрос пытается обновить таблицы первенствовать после этого. Это мой код обновления:

  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 

Append - если это правда, то байты будут записаны в конец файла , а не в начале

Кроме того, убедитесь, чтобы закрыть входной поток перед повторным использованием файла

inp.close(); 

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

Спасибо, но он, кажется, не исправил его. То, что я в основном пытаюсь сделать, - это заменить информацию в указанной ячейке (ячейке 1 в строке 1) новой информацией из другого текстового поля. –

+0

@ HunterChildress, вы должны переписать объект листа в файл в конце. Проверьте редактирование, я только заметил, что входной поток не был закрыт, и новый выходной поток открывается в том же файле. Вы получаете какие-то исключения? –