真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Java環(huán)境中如何實現(xiàn)提高Excel讀寫效率-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關Java環(huán)境中如何實現(xiàn)提高Excel讀寫效率,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

公司主營業(yè)務:成都網站制作、網站設計、移動網站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出靜寧免費做網站回饋大家。

問題1. 僅使用簡單的導入導出功能,但每次業(yè)務的數(shù)據對象結構不同,需要重新編寫處理方法,很麻煩!


解決方法


將Excel處理邏輯抽取出來,封裝成工具類。

封裝條件


與大多數(shù)Java API一樣,POI把更多的精力放在高級功能的處理上,比如Formula(公式)、Conditional Formatting(條件格式)、Zoom(縮放)等。對于僅僅做數(shù)據導入導出功能的API User,很少使用這些高級特性,這允許API用戶對POI的使用進行簡單的封裝。

封裝方式


無論是讀是寫,我們都需要解決Excel中的Columns(列)與Java數(shù)據對象Fields(字段)的映射關系,將這種映射關系作為參數(shù)(Map對象HashMap或LinkedHashMap),傳遞給工具類。

對于Columns不難理解,它可以是有序的數(shù)字或字母,也可以是其它字符串用來作為首行,表示該列數(shù)據的含義。

對于Fields,它的處理需要兼容復雜情況,如下:

  • 查詢字段時出現(xiàn)異常
  • 字段或單元格的值為null
  • 該列的值可能對應關聯(lián)對象、甚至是關聯(lián)集合中的某個字段值
  • 字段或單元格的值需要做特殊處理,例如value == true?完成:失?。?/li>

反射


首先想到,也是大多數(shù)封裝者都在使用的方式是就是Reflection API,從上文 函數(shù)編程 章節(jié)我們了解到,反射重量級,會降低代碼的性能,同時對復雜情況的處理支持性不夠好。

反射+注解


這種方式可以更好的支持復雜情況,但是反射依然會降低性能,同時注解對數(shù)據對象會造成代碼侵入,而且對該工具類封裝者的其他使用者無疑會增加學習成本。

匿名內部類


這種方式也可以很好的支持復雜情況,但是使用匿名內部類的語法顯然患有“垂直問題”(這意味著代碼需要太多的線條來表達基本概念),太過冗雜。至于性能,應該也不如直接傳遞函數(shù)來的快吧。

函數(shù)接口(Lambda)


這種方式是基于第5條方法調用的字節(jié)碼指令invokeDynamic實現(xiàn)的,直接傳遞函數(shù)代碼塊,很好的支持復雜情況,性能較高,代碼編寫更簡單結構更加簡潔,而且對數(shù)據對象代碼零侵入。

當然如果你還沒有使用Java1.8或更高版本,那么你可以參考匿名內部類或反射+注解,不過還是推薦反射+注解,Alibaba/easyexcel【/tupian/20230522/easyexcel】對你來說會是不錯的選擇。

問題2. Excel導入或導出數(shù)據量比較大,造成內存溢出或頻繁的Full GC,該如何解決?


解決方法

  • 讀Excel —— eventmodel
  • 寫Excel —— streaming.SXSSFWorkbook

原理


POI的使用對我們來說很常見,對下面兩個概念應該并不陌生:

  • HSSFWorkbook(處理97(-2007) 的.xls)
  • XSSFWorkbook(處理2007 OOXML (.xlsx) )

但是對于eventmodel和streaming.SXSSFWorkbook就很少接觸了,它們是POI提供的專門用來解決內存占用問題的low level API(低級API),使用它們可以讀寫數(shù)據量非常大的Excel,同時可以避免內存溢出或頻繁的Full GC?!緃ttps://poi.apache.org/components/spreadsheet/how-to.html】

eventmodel,用來讀Excel,并沒有將Excel整個加載到內存中,而是允許用戶從InputStream每讀取一些信息,就交給回調函數(shù)或監(jiān)聽器,至于丟棄,存儲還是怎么處理這些內容,都交由用戶。


streaming.SXSSFWorkbook,用來寫Excel(是對XSSFWorkbook的封裝,僅支持.xlsx),通過滑動窗口來實現(xiàn),只在內存中保留滑動窗口允許存在的行數(shù),超出的行Rows被寫出到臨時文件,當調用write(OutputStream stream)方法寫出內容時,再直接從臨時內存寫出到目標OutputStream。SXSSFWorkbook的使用會產生一些局限性。

  • Only a limited number of rows are accessible at a point in time.
  • Sheet.clone() is not supported.
  • Formula evaluation is not supported

解決途徑


/tupian/20230522/gridexcel 基于Java函數(shù)編程(Lambda),支持流式API,使用環(huán)境Java1.8或更高,學習成本:

Lambda


/tupian/20230522/easyexcel 基于反射+注解+監(jiān)聽器,使用環(huán)境Java1.6或以上,學習成本:模型注解
實際上POI官網已經給了用戶使用示例,而上述兩個工具都只是做了自己的封裝實現(xiàn),使用者只需要拿來用就好。

快速使用



  com.github.liuhuagui
  gridexcel
  2.2

名稱欄目:Java環(huán)境中如何實現(xiàn)提高Excel讀寫效率-創(chuàng)新互聯(lián)
鏈接分享:http://weahome.cn/article/diegjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部