java解決poi導出excel使用SXSSF時“Attempting to write a row[?] in the range [0,?]that is already written to disk.”異常


SXSSFWorkbook  workbook = new SXSSFWorkbook();// 創建一個Excel文件  
Sheet sheet = workbook.createSheet(filename);// 創建一個Excel的Sheet
......
row = sheet.getRow(parDepRowIdx);
if (row == null) {
    row = sheet.createRow(parDepRowIdx);
}

row在前面已經create過,但在這里get到的值為null(不知道什么原因),再次使用create時報錯“Attempting to write a row[?] in the range [0,?]that is already written to disk”。

報錯原因:當前要創建的行小於等於最近已經創建的行時,就會拋出異常。SXSSFWorkbook其本身實現方式在於,不斷的將一定行數的表格寫入臨時文檔,最終將所有的臨時文檔合並起來,這種方式中保證了內存的占用數理想,並且導出的效率也比較理想。在這種實現中,如果一個行已經寫入臨時文檔了,就不能再修改了,因此在源代碼中直接限制了重復創建並寫同一欄,並在此拋出異常。

 

解決方法:

使用XSSFWorkbook替代SXSSFWorkbook,,然后直接用getRow獲取行

XSSFWorkbook workbook = new XSSFWorkbook();// 創建一個Excel文件
Sheet sheet = workbook.createSheet(filename);// 創建一個Excel的Sheet

 

轉相關文章:https://www.dazhuanlan.com/2019/12/05/5de8b4f10760f/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM