目录
此文章以独家授权一下公众号 :
【新华前后端开发】
【脚本之家】
【快速、简单避免OOM的java处理Excel工具】 github上关于项目的介绍
poi使用userModel模式,这个模式的特点就是上手很容易。代码写起来很复杂。而且公用的地方很少。导致每次读写excel都需要重新编写。
EasyExcel使用SAX模式使得easyexcel可以节省内存。而且easyexcel解决了内存泄漏问题。如果想了解SAX模式开发那成本需要3~5天学习。
通过Java读写excel大概有以下几种:
poi、csv、jxl、jxls 、easyPoi 、easyExcel
根据性能他们的排序:
jxl 、 easyexcel 、 csv 、 poi 、 easypoi 、 jxls
因为是基于模板的。所以jxls实现导出的很简单。但是实现读取数据这里就很不好办了。这里笔者暂时不知道如何实现。 这个问题就留给聪明的读者吧!!!
两者都可以在自身的功能不足的情况下,通过POI的功能实现自定义功能
easyexcel名字非常的符合他的个性。他是真的很easy.下面我们来实现一个导出学生信息的代码
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
原文:https://www.cnblogs.com/zhangxinhua/p/11833582.html