項目中遇到數據導入、導出用excle操做的問題,數據量在W級別,因03版有6W+的限制,系通通一採用07版excel來作,採用POI進行處理,在導入、導出的時候都遇到的內存溢出的問題,導入方面主要參考下面的文章處理 網絡
http://blog.csdn.net/lishengbo/article/details/40711769(感謝做者分享) 測試
導出部分採用官方提供的例子,採用SXSSFWorkbook進行導出。可參考如下文章: spa
http://blog.csdn.net/wangweiyan89/article/details/8863975 .net
單獨作這兩部分功能都能解決內存溢出的問題,那麼問題來了,系統中存在一種操做,須要將導出的文件再次進行導入,這裏就是用SXSSFWorkbook導出的文件在採用SAX解析的方式進行讀取,這時出現讀不到數據的狀況,前一步生成的excel能夠正常打開查看,但沒法經過程序再次讀取,考慮過網絡下載文件存在保護視圖的等權限的問題,但讀的權限是能夠的,換思路。。。奇怪的是excel文件打開後,隨便點擊哪裏,不進行修改,再關閉的時候就提示須要保存修改,保存修改後在次用程序讀取就能夠正常讀取數據了。考慮是否是寫文件的時候出現差錯,用官方提供的最簡單例子進行讀取,發現一樣問題。。。。 調試
看到excel文件改變後綴爲zip以後,能夠看到文件中xml格式內容,比較保存修改先後文件,發現其差距很大,從目錄結構到xml文件結構都有很大差距。這條路也沒有走通。。。
excel
最後仍是在解析上查看問題,在採用sax方式解析excel時,斷點跟解析過程,發現保存修改先後文件在解析過程當中的區別,其實和以前xml格式差異的思路相同,二者在具體到單元格內容部分存在組織結構上的差別,在本文開始提到的導入excel部分對代碼進行細微調整便可解決。文件差別以下:左右分別爲可讀xml和不可讀xml文件結構 xml
不可讀xml實際的數據內容在上級目錄的sharedStrings.xml文件中。簡單看這些尚未思路解決問題,斷點調試的過程當中針對讀取過程當中該部分進行了修改XLSXCovertCSVReader類中startElement和endElement方法中原有的"v".equals(name)判斷,增長 || "t".equals(name)支持,測試經過,正常讀取兩個文件中數據,從結果看是解決了遇到的問題,但具體緣由仍是不太明白,先記下,若是哪位大神能指點一二,不勝感激。 blog