java處理excel-xlsx格式大檔案的解決方案
阿新 • • 發佈:2019-01-29
https://www.cnblogs.com/scw2901/p/4378424.html
1、第一次讀取7M左右的ecxel檔案,使用poi 庫實現,參考了下面的博文。
http://www.cnblogs.com/chenfool/p/3632642.html
使用上面的方法在 下面WorkbookFactory.create()這裡會出現記憶體溢位的錯誤,將eclipse的引數調整為-Xmx3072m,仍然會出現這個錯誤。
fis = new FileInputStream(file);
book = WorkbookFactory.create(fis);
應該是因為上面的方法使用的DOM解析模式,使用流式解析大檔案,不會出現記憶體溢位的問題。
2、經過google,找到了下面的帖子:
http://www.iteye.com/topic/624969
excel2007檔案格式與之前版本不同,之前版本採用的是微軟自己的儲存格式。07版內容的儲存採用XML格式,所以,理所當然的,對大資料量的 xlsx檔案的讀取採用的也是XML的處理方式SAX。
使用上面的方法,在
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
這一句會出現 java.lang.ClassNotFoundException: org.apache.xerces.parsers.SAXParser的錯誤。自己下載xerces.jar檔案載入後會出現
java.lang.AbstractMethodError: org.apache.xerces.dom.ElementImpl.getTextContent()Ljava/lang/String的錯誤。
看來只能找其他方法了。
3、經過一番google,找到了下面這個連結
https://blogs.oracle.com/mei/entry/java_lang_classnotfoundexception_org_apache 按照上面的連結中介紹的方法,將生成XMLReader的程式碼改為下面的方式即可解決問題。
1 SAXParserFactory m_parserFactory = null; 2 // If unable to create an instance, let's try to use 3 // the XMLReader from JAXP 4 m_parserFactory = SAXParserFactory.newInstance(); 5 m_parserFactory.setNamespaceAware(true); 6 7 XMLReader parser = m_parserFactory.newSAXParser().getXMLReader();
附錄:整個過程中參考的網頁連結如下:
http://www.cnblogs.com/chenfool/p/3632642.html
http://www.iteye.com/topic/624969
http://stackoverflow.com/questions/14014989/java-lang-abstractmethoderror-org-apache-xerces-dom-elementimpl-gettextcontent
https://blogs.oracle.com/mei/entry/java_lang_classnotfoundexception_org_apache