java解决poi导出excel使用SXSSF时“Attempting to write a row[?] in the range [0,?]that is already written to disk.”异常
SXSSFWorkbook workbook = new SXSSFWorkbook();// 創(chuàng)建一個(gè)Excel文件
Sheet sheet = workbook.createSheet(filename);// 創(chuàng)建一個(gè)Excel的Sheet
......
row = sheet.getRow(parDepRowIdx);
if (row == null) {
row = sheet.createRow(parDepRowIdx);
}
row在前面已經(jīng)create過(guò),但在這里get到的值為null(不知道什么原因),再次使用create時(shí)報(bào)錯(cuò)“Attempting to write a row[?] in the range [0,?]that is already written to disk”。
報(bào)錯(cuò)原因:當(dāng)前要?jiǎng)?chuàng)建的行小于等于最近已經(jīng)創(chuàng)建的行時(shí),就會(huì)拋出異常。SXSSFWorkbook其本身實(shí)現(xiàn)方式在于,不斷的將一定行數(shù)的表格寫入臨時(shí)文檔,最終將所有的臨時(shí)文檔合并起來(lái),這種方式中保證了內(nèi)存的占用數(shù)理想,并且導(dǎo)出的效率也比較理想。在這種實(shí)現(xiàn)中,如果一個(gè)行已經(jīng)寫入臨時(shí)文檔了,就不能再修改了,因此在源代碼中直接限制了重復(fù)創(chuàng)建并寫同一欄,并在此拋出異常。
解決方法:
使用XSSFWorkbook替代SXSSFWorkbook,,然后直接用getRow獲取行
XSSFWorkbook workbook = new XSSFWorkbook();// 創(chuàng)建一個(gè)Excel文件 Sheet sheet = workbook.createSheet(filename);// 創(chuàng)建一個(gè)Excel的Sheet
轉(zhuǎn)相關(guān)文章:https://www.dazhuanlan.com/2019/12/05/5de8b4f10760f/
總結(jié)
以上是生活随笔為你收集整理的java解决poi导出excel使用SXSSF时“Attempting to write a row[?] in the range [0,?]that is already written to disk.”异常的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android Studio下SQLit
- 下一篇: 本地运行vue项目webpack提示 C