#简介 poi使用userModel模式,这个模式的特点就是上手很容易。代码写起来很复杂。而且公用的地方很少。导致每次读写excel都需要重新编写。 EasyExcel使用SAX模式使得easyexcel可以节省内存。而且easyexcel解决了内存泄漏问题。如果想了解SAX模式开发那成本需要3~5天学习。
#导出excel常用的几种方法
通过Java读写excel大概有以下几种: poi、csv、jxl、jxls 、easyPoi 、easyExcel 根据性能他们的排序: jxl 、 easyexcel 、 csv 、 poi 、 easypoi 、 jxls
POI
CSV
jxl
jxls
easypoi
easyexcel
快速入门
====
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();
}
##代码解读
student
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;
}
总结
--
#常用API
##单元格样式
beforeCellCreate
,afterCellCreate
,afterCellDispose
.其中afterCellDispose
方法是在单元格创建后销毁前的一个时机。这时候我们可以改变单元格内容。easyExcel提供了四种时间捕捉接口 CellWriteHandler WorkbookWriteHandler SheetWriteHandler RowWriteHandler##合并单元格
##数据样式
convertToJavaData
: excel数据转换成Java对象 convertToExcelData
: Java对象转换成excel数据##多sheet设置
##单元格添加超链接
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>
#notes
系统时间
1900 windowing 1900年日期系统 1904 windowing 1904年日期系统 Excel for windows 使用1900 Excel2008 for mac 和之前版本 1904 excel 2016 for mac ; excel for mac 2011 1900
读写数据格式内置转换器
ModelBuildEventListener
##write
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。