2013-08-15 37 views
7

Tôi đang tạo phương thức để viết và đọc sổ làm việc từ tệp nhưng khi tôi gọi phương thức này lần thứ hai. lỗi occure: org.apache.xmlbeans.impl.values.XmlValueDisconnectedExceptionorg.apache.xmlbeans.impl.values.XmlValueDisconnectedException khi viết sổ làm việc hai lần

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; 
} 

Trả lời

2

Đồng ý với Akokskis, viết hai lần gây ra sự cố, nhưng bạn có thể thử tải lại sổ làm việc sau khi viết, sau đó nó sẽ hoạt động hoàn hảo. Ví dụ:

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

Không tải tệp qua luồng dữ liệu đầu vào, tốc độ chậm hơn và sử dụng nhiều bộ nhớ hơn! [Mở nó trực tiếp qua File thay vì] (http://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream), như được mô tả trong tài liệu – Gagravarr

+0

Gagravarr: Bạn nói đúng. Nhưng tôi đã đưa ra câu trả lời giống như câu hỏi đã được hỏi. @niks: Các gợi ý được đưa ra bởi Gagravarr là thực sự hữu ích. Nếu bạn có thể thay đổi mã của bạn cho phù hợp thì hãy làm điều đó. Đối với vấn đề trên, bạn chỉ cần tải lại bảng tính với cùng một tệp đã cập nhật. – Sankumarsingh

+0

Xin chào, tôi đang làm điều tương tự nhưng nó không hoạt động với tôi – Nikesh

0

Viết hai lần với cùng XSSFWorkbook có thể sản xuất lỗi - đó là một known bug.