尊敬的EasyExcel用戶:
首先,我們想表達最深的謝意,感謝您長期以來對EasyExcel的信任與支持。在這段旅程中,EasyExcel有幸陪伴許多開發者和企業共同成長,見證了無數資料處理任務的高效完成。
近期,我們注意到市場上出現了更多優秀的資料處理工具和解決方案,為使用者提供了更豐富的選擇。為了確保每位使用者都能享受最佳的體驗和服務,我們決定採取一項重要措施:EasyExcel將逐步進入維護模式,並給予使用者充足的時間評估並遷移到其他產品。同時,我們也歡迎並樂於見到社區內外分享關於同類優秀產品的使用心得和遷移經驗,共同促進技術生態的健康發展。
請放心,即使進入維護模式,我們仍會確保EasyExcel的基本功能穩定運行,並會進行Bug修復,但不再主動新增功能。我們相信,透過大家的共同努力,每一段程式碼、每一個專案都將繼續在各自的領域發光發熱,服務更廣泛的使用者群體。 再次感謝您對EasyExcel的支持與體諒!期待在科技的廣闊天地裡,我們能以新的形式再度攜手,共創輝煌。
祝福您在未來的工作與學習中一切順利!
阿里巴巴EasyExcel團隊敬上
Java解析、產生Excel比較有名的框架有Apache poi、jxl。但他們都存在一個嚴重的問題就是非常的耗內存,poi有一套SAX模式的API可以一定程度的解決一些內存溢出的問題,但POI還是有一些缺陷,比如07版Excel解壓縮以及解壓後存儲都是在記憶體中完成的,記憶體消耗依然很大。
easyexcel重寫了poi對07版Excel的解析,一個3M的excel用POI sax解析依然需要100M左右內存,改用easyexcel可以降低到幾M,並且再大的excel不會出現內存溢出;03版依賴POI的sax模式,在上層做了模型轉換的封裝,讓使用者更簡單方便
當然還有極速模式能更快,但記憶體佔用會在100M多一點
< dependency >
< groupId >com.alibaba</ groupId >
< artifactId >easyexcel</ artifactId >
< version >4.0.3</ version >
</ dependency >
開源不易,如果覺得EasyExcel對您的工作還是有幫助的話,請幫忙在的右上角點個Star,您的支持是使EasyExcel變得更好最大的動力。
issues
來解決解決問題可以嘗試在以下2個連結搜尋問題,如果不存在可以嘗試建立issue
。
issues
issues
透過issues
解決問題,可以給後面遇到相同問題的同學查看,所以比較推薦這種方式。
不管github
、 gitee
都會定期有人回答您的問題,比較緊急可以在提完issue
以後在釘釘群艾特群主並發送issue
地址幫忙解決。
QQ
公司不讓用,有時候也會去看,但核心肯定還是在釘釘。
加入釘釘或QQ群,看完公告可以獲得協助。
比較推薦釘釘群, QQ
公司不讓用,當然QQ群也會有熱心網友幫忙解決。
QQ1群(已滿): 662022184
QQ2群(已滿): 1097936804
QQ3群(已滿): 453928496
QQ4群(已滿): 496594404
QQ5群(已滿): 451925680
QQ6群(已滿): 784741035
QQ7群(已滿): 667889383
QQ8群: 113968681
釘釘1群(已滿): 21960511
釘釘2群(已滿): 32796397
釘釘3群(已滿): 33797247
釘釘4群(已滿): 33491624
釘釘5群(已滿): 32134498
釘釘6群(已滿): 34707941
釘釘7群(已滿): 35235427
釘釘8群(已滿): 44752220
釘釘9群(已滿): 11045002277
釘10群(已滿): 27360019755
釘釘11群(已滿):24330026964
釘釘12群(已滿):27210038956
釘釘13群:83695000992
姬朋飛(玉霄)、莊家鉅
demo程式碼位址:https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java
詳細文件網址:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read
/**
* 最简单的读
* <p>1. 创建excel对应的实体对象 参照{@link DemoData}
* <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener}
* <p>3. 直接读即可
*/
@ Test
public void simpleRead () {
String fileName = TestFileUtil . getPath () + "demo" + File . separator + "demo.xlsx" ;
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
EasyExcel . read ( fileName , DemoData . class , new DemoDataListener ()). sheet (). doRead ();
}
demo程式碼位址:https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
詳細文件網址:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write
/**
* 最简单的写
* <p>1. 创建excel对应的实体对象 参照{@link com.alibaba.easyexcel.test.demo.write.DemoData}
* <p>2. 直接写即可
*/
@ Test
public void simpleWrite () {
String fileName = TestFileUtil . getPath ()+ "write" + System . currentTimeMillis ()+ ".xlsx" ;
// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
// 如果这里想使用03 则 传入excelType参数即可
EasyExcel . write ( fileName , DemoData . class ). sheet ( "模板" ). doWrite ( data ());
}
demo程式碼位址:https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java
/**
* 文件下载(失败了会返回一个有部分数据的Excel)
* <p>
* 1. 创建excel对应的实体对象 参照{@link DownloadData}
* <p>
* 2. 设置返回的 参数
* <p>
* 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大
*/
@ GetMapping ( "download" )
public void download ( HttpServletResponse response ) throws IOException {
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response . setContentType ( "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" );
response . setCharacterEncoding ( "utf-8" );
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder . encode ( "测试" , "UTF-8" ). replaceAll ( " \ +" , "%20" );
response . setHeader ( "Content-disposition" , "attachment;filename*=utf-8''" + fileName + ".xlsx" );
EasyExcel . write ( response . getOutputStream (), DownloadData . class ). sheet ( "模板" ). doWrite ( data ());
}
/**
* 文件上传
* <p>1. 创建excel对应的实体对象 参照{@link UploadData}
* <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link UploadDataListener}
* <p>3. 直接读即可
*/
@ PostMapping ( "upload" )
@ ResponseBody
public String upload ( MultipartFile file ) throws IOException {
EasyExcel . read ( file . getInputStream (), UploadData . class , new UploadDataListener ( uploadDAO )). sheet (). doRead ();
return "success" ;
}