2013-08-15 19 views
7

Tworzę metodę zapisu i odczytu książki pracy z pliku, ale , kiedy tę metodę po raz drugi nazywam. błąd wystąpić maksymalnie: org.apache.xmlbeans.impl.values.XmlValueDisconnectedExceptionorg.apache.xmlbeans.impl.values.XmlValueDisconnectedException po dwukrotnym zapisaniu skoroszytu

public XSSFWorkbook GetUpdatedResult(XSSFWorkbook vmworkbookhelper) throws Exception 
{ 
    this.vmWorkbookHelper2 = vmworkbookhelper; 
    String tempName = UUID.randomUUID().toString()+".xlsx"; 
    File tempFile = new File(tempName); 
    fileOut = new FileOutputStream(tempFile); 
    this.vmWorkbookHelper2.write(fileOut); 
    fileOut.close(); 
    vmworkbookhelper = new XSSFWorkbook(tempFile); 
    if(tempFile.exists()) 
     tempFile.delete(); 
    return vmworkbookhelper; 
} 

Odpowiedz

2

Zgadzam się z Akokskis, pisząc dwa razy, powodując problem, ale po zapisaniu możesz spróbować ponownie załadować skoroszyt, wtedy wszystko będzie doskonale działać. Na przykład:

FileOutputStream fileOut = new FileOutputStream("Workbook.xlsx"); 
    wb.write(fileOut); 
    fileOut.close(); 
    wb = new XSSFWorkbook(new FileInputStream("Workbook.xlsx")); 
+1

Nie ładuj pliku przez InputStream, jest wolniejszy i zużywa więcej pamięci! [Otwórz bezpośrednio poprzez Plik zamiast] (http://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream), jak opisano w dokumentach – Gagravarr

+0

Gagravarr: Masz rację. Ale dałem odpowiedź w ten sam sposób, w jaki zadano pytanie. @niks: Sugestia podana przez Gagravarr jest naprawdę przydatna. Jeśli możesz odpowiednio zmienić swój kod, zrób to. W przypadku powyższego problemu wystarczy ponownie załadować skoroszyt przy użyciu tego samego i zaktualizowanego pliku. – Sankumarsingh

+0

Cześć, robię to samo, ale to nie działa dla mnie – Nikesh

0

Pisząc dwa razy do tej samej XSSFWorkbook może produkować tego błędu - to known bug.

Powiązane problemy