数据导入:减轻录入工作量
数据导出:统计信息归档
数据传输:异构系统之间数据传输
1.1、介绍
是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。
1.2、特点
2、入门使用
2.1、创建项目并引入依赖
创建一个测试用Maven项目,并导入以下依赖
com.alibaba
easyexcel
2.1.7
org.slf4j
slf4j-simple
1.7.5
org.apache.xmlbeans
xmlbeans
3.1.0
org.projectlombok
lombok
1.18.10
junit
junit
4.12
2.2、最简单的写
创建实体类
@Data
public class ExcelEmpData {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("生日")
private Date birthday;
@ExcelProperty("薪资")
private Double salary;
/***
* 使用@ExcelIgnore注解来使EasyExcel忽略这个属性
*/
@ExcelIgnore
private String password;
}
测试用例,在test包下创建一个测试类,用于测试的写功能
编写一个静态方法,这个方法用于生成测试数据
private static List getEmpData() {
List excelEmpDataList = new ArrayList();
ExcelEmpData data = null;
for (int i = 0; i < 65535; i++) {
data = new ExcelEmpData();
data.setName("java" + i);
//password属性的值不会被写入Excel中
data.setPassword("123");
data.setSalary(43.96);
data.setBirthday(new Date());
excelEmpDataList.add(data);
}
return excelEmpDataList;
}
在测试类中编写一个方法,用于对.xlsx文件进行数据写入
@Test
public void testWrite07() {
// 指定数据写入到哪个excel文件
String fileName = "F:/testExcel/01-simpleWrite-07.xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write(fileName, ExcelEmpData.class).sheet("模板").doWrite(getEmpData());
System.out.println("excel写入成功!");
}
结果
在测试类中编写一个方法,用于对.xls文件进行数据写入
@Test
public void simpleWrite03() {
String fileName = "F:/testExcel/02-simpleWrite-03.xls";
// 如果这里想使用03 则 传入excelType参数即可
EasyExcel.write(fileName, ExcelEmpData.class).excelType(ExcelTypeEnum.XLS).sheet("模板").doWrite(getEmpData());
System.out.println("excel写入成功!");
}
向.xls文件写入数据时,一次最多写入65536行
@Test
public void testWrongWrite03() {
String fileName = "F:/testExcel/03-simpleWrite-03.xls";
// 如果这里想使用03 则 传入excelType参数即可
EasyExcel.write(fileName, ExcelEmpData.class).excelType(ExcelTypeEnum.XLS).sheet("模板").doWrite(getEmpData());
System.out.println("excel写入成功!");
}
结果
2.3、指定的写入列
为实体类中的字段配置index属性
@Data
public class ExcelEmpData {
@ExcelProperty(value = "姓名",index = 1)
private String name;
@ExcelProperty(value = "生日",index = 3)
private Date birthday;
@ExcelProperty(value = "薪资",index = 5)
private Double salary;
/***
* 使用@ExcelIgnore注解来使EasyExcel忽略这个属性
*/
@ExcelIgnore
private String password;
}
重新执行测试方法
@Test
public void testWrite07() {
// 指定数据写入到哪个excel文件
String fileName = "F:/testExcel/04-simpleWrite-07.xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write(fileName, ExcelEmpData.class).sheet("模板").doWrite(getEmpData());
System.out.println("excel写入成功!");
}
结果
2.4、指定属性的格式化
根据实体类属性的类型为属性添加不同的格式化注解
@Data
public class ExcelEmpData {
@ExcelProperty(value = "姓名")
private String name;
@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
@ExcelProperty(value = "生日")
private Date birthday;
@NumberFormat("#.##%")//百分比表示,保留两位小数
@ExcelProperty(value = "薪资")
private Double salary;
/***
* 使用@ExcelIgnore注解来使EasyExcel忽略这个属性
*/
@ExcelIgnore
private String password;
}
重新执行方法
@Test
public void testWrite07() {
// 指定数据写入到哪个excel文件
String fileName = "F:/testExcel/05-simpleWrite-07.xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write(fileName, ExcelEmpData.class).sheet("模板").doWrite(getEmpData());
System.out.println("excel写入成功!");
}
2.5、xlsx和xls的区别
存储相同数量的数据,用xlsx占用的空间较小
xls一次性最多写入65536条数据
3、使用读取文件
3.1、创建监听器
@Slf4j
public class ExcelEmpDataListener extends AnalysisEventListener {
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 5;
List list = new ArrayList();
/**
* 这个每一条数据解析都会来调用
*
* @param data
* one row value. Is is same as {@link AnalysisContext#readRowHolder()}
* @param context
*/
@Override
public void invoke(ExcelEmpData data, AnalysisContext context) {
log.info("解析到一条数据:{}", data);
list.add(data);
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
if (list.size() >= BATCH_COUNT) {
log.info("存数据库");
// 存储完成清理 list
list.clear();
}
}
/**
* 所有数据解析完成了 都会来调用
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
log.info("所有数据解析完成!");
}
}
3.2、测试
创建.xlsx文件,添加测试数据
创建测试方法
/**
* 最简单的读
*/
@Test
public void simpleRead07() {
String fileName = "F:/testExcel/testRead.xlsx";
// 这里默认读取第一个sheet
EasyExcel.read(fileName, ExcelEmpData.class, new ExcelEmpDataListener()).sheet().doRead();
}
@Test
public void simpleRead03() {
String fileName = "F:/testExcel/testRead.xls";
// 这里默认读取第一个sheet
EasyExcel.read(fileName, ExcelEmpData.class, new ExcelEmpDataListener()).excelType(ExcelTypeEnum.XLS).sheet().doRead();
}
结果
成功!
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666
声明:1、本内容转载于网络,版权归原作者所有!2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!