目錄java
此文章以獨家受權一下公衆號 :
【新華先後端開發】
【腳本之家】git
【快速、簡單避免OOM的java處理Excel工具】 github上關於項目的介紹github
poi使用userModel模式,這個模式的特色就是上手很容易。代碼寫起來很複雜。並且公用的地方不多。致使每次讀寫excel都須要從新編寫。
EasyExcel使用SAX模式使得easyexcel能夠節省內存。並且easyexcel解決了內存泄漏問題。若是想了解SAX模式開發那成本須要3~5天學習。數據庫
經過Java讀寫excel大概有如下幾種:
poi、csv、jxl、jxls 、easyPoi 、easyExcel
根據性能他們的排序:
jxl 、 easyexcel 、 csv 、 poi 、 easypoi 、 jxlsapache
由於是基於模板的。因此jxls實現導出的很簡單。可是實現讀取數據這裏就很很差辦了。這裏筆者暫時不知道如何實現。 這個問題就留給聰明的讀者吧!!!windows
二者均可以在自身的功能不足的狀況下,經過POI的功能實現自定義功能後端
easyexcel名字很是的符合他的個性。他是真的很easy.下面咱們來實現一個導出學生信息的代碼api
String fileName = EasyExcelTools.class.getResource("/").getPath() + "student" + System.currentTimeMillis() + ".xlsx"; ExcelWriterBuilder excelWriterBuilder = EasyExcel.write(fileName, Student.class); //excelWriterBuilder.registerConverter(new SexConverter()).registerWriteHandler(new AgeRowHandler()).registerWriteHandler(new SexCellWriteHandler()); ExcelWriter excelWriter = excelWriterBuilder.build(); WriteSheet writeSheet = EasyExcel.writerSheet("中化安元").build(); try { excelWriter.write(ts, writeSheet); } catch (Exception e) { e.printStackTrace(); }finally { excelWriter.finish(); }
fileName 是導出的文件地址緩存
public class Student { /** * 學生索引id */ @ExcelProperty(value = {HeadConstant.FIRSTNAME,HeadConstant.SECONDNAME,"學號"}) private String id; /** * 姓名 */ @ExcelProperty(value = {HeadConstant.FIRSTNAME,HeadConstant.SECONDNAME,"姓名"}) private String userName; /** * 用戶暱稱 */ @ExcelProperty(value = {HeadConstant.FIRSTNAME,HeadConstant.SECONDNAME,"暱稱"}) @ExcelIgnore private String userNick; /** * 年齡 */ @ExcelProperty(value = {HeadConstant.FIRSTNAME,HeadConstant.SECONDNAME,"年齡"}) private Integer age; /** * 性別 true : 男 ; false : 女 */ @ExcelProperty(value = {HeadConstant.FIRSTNAME,HeadConstant.SECONDNAME,"性別"}) private boolean sex; /** * 生日 */ @ExcelProperty(value = {HeadConstant.FIRSTNAME,HeadConstant.SECONDNAME,"生日"}) private Date birth; /** * 身高 */ @ExcelProperty(value = {HeadConstant.FIRSTNAME,HeadConstant.SECONDNAME,"身高"}) private Double height; }
beforeCellCreate
,afterCellCreate
,afterCellDispose
.其中afterCellDispose
方法是在單元格建立後銷燬前的一個時機。這時候咱們能夠改變單元格內容。easyExcel提供了四種時間捕捉接口
convertToJavaData
: excel數據轉換成Java對象convertToExcelData
: Java對象轉換成excel數據afterCellDispose
方法中實現CreationHelper createHelper = writeSheetHolder.getSheet().getWorkbook().getCreationHelper(); Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.URL); hyperlink.setAddress("https://gitee.com/zxhTom"); cell.setHyperlink(hyperlink);
<dependency> <groupId>net.sourceforge.javacsv</groupId> <artifactId>javacsv</artifactId> <version>2.0</version> </dependency>
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.0-beta4</version> </dependency>
1900 windowing 1900年日期系統
1904 windowing 1904年日期系統
Excel for windows 使用1900
Excel2008 for mac 和以前版本 1904
excel 2016 for mac ; excel for mac 2011 1900微信