没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
2022/8/3 12:42
EasyExcel
https://km.sankuai.com/page/1344566103
1/17
E
a
sy
E
x
cel
C-2
创
建
:
⻢
⾦
朋
,
最
后
修
改
:
⻢
⾦
朋
刚刚
⽬
录
⼀
、
整
体介
绍
.
特点
.
为什么
省
内
存
⼆
、
快
速
开
始
.
G
i
t
地址
:
ea
sy
e
x
cel
.
pom
.
简
单
读
:
将
E
x
cel
内
容
转
换
为
J
a
v
a
对
象
..
通过
@
E
x
cel
P
rop
e
rty
注
解
,
创
建
e
x
cel
对
应
的
实
体
对
象
(
e
x
cel
的
列
对
应
对
象
的
属
性
)
..
创
建
e
x
cel
⼀
⾏
⼀
⾏
的
回
调
监
听
器
..
直
接
读
即可
.
其
它
读
..
读
取
e
x
cel
中
第
⼆
个
s
hee
t
并
且
⼀个
⽂
件
e
x
cel
⽂
件
对
应
⼀个
r
eade
r
..
读
取
E
x
cel
⽂
件中
全
部
s
hee
t
..
读
取
E
x
cel
⽂
件中
多
个
s
hee
t
..
将
e
x
cel
中
⽇
期
、
数
字
或
者
别
的
字
符
,
按
照
⾃
定
义
格
式
转
换
..
读
取
E
x
cel
中
表
头
信
息
.
写
E
x
cel
:
将
J
a
v
a
对
象
写⼊
E
x
cel
中
..
普
通
写
:
将
数据
写⼊
E
x
cel
中
..
将
数据
写⼊
指
定
e
x
cel
的
模
版
和名
称
-
⼩
数据
量
(
⾏
以
内
)
..
将
数据
写⼊
指
定
e
x
cel
的
模
版
和名
称
-
⼤
数据
量
【
推
荐
】
-
写到
e
x
cel
的
⼀个
s
hee
t
中
..
将
数据
写⼊
指
定
e
x
cel
的
模
版
和名
称
-
⼤
数据
量
【
推
荐
】
-
写到
e
x
cel
中
不
同
的
s
hee
t
.
其
它
写
:
..
根
据
⽤
户指
定
,
剔
除
n
a
m
e
字
段
值
,不
写⼊
e
x
cel
..
根
据
⽤
户指
定
,
仅
将
n
a
m
e
字
段
值
,
写⼊
e
x
cel
..
指
定
写⼊
的
列
(
将
I
n
de
x
O
r
N
a
m
e
D
a
t
e
类
的
n
a
m
e
属
性
,
写⼊
e
x
cel
中
的
第
⼀
列
、
第
⼆
列
空
出
来
、
age
属
性
写⼊
第
三
列
)
..
复
杂
头
写⼊
-
将
头
分
为
不
同
的
组
..
⾃
定
义
格
式
转
换
..
下
载
图
⽚
..
超
链
接
、
备
注
、
公
式
、
指
定
单
个
单
元
格
的
样
式
、
单
个
单
元
格
多
种
样
式
..
指
定
e
x
cel
⽂
件
列
的
⻓
和
⾼
..
指
定
e
x
cel
头
的
⼤
⼩
和
背
景
颜
⾊
、
内
容
的
⼤
⼩
和
背
景
..
合
并
单
元
格
..
⽣
成
动
态
表
头
..
下
拉
功
能
..
创
建
批
注
【
为
表
头
某
列
,
创
建
解
释
说
明
字
段
含
义
】
三
、
实
战
.
将
写⼊
E
x
cel
的
数据
上
传
⾄
S
,
并
将
下
载
链
接
⼤
象
推
送
给
⽤
户
..
异
步
..
同
步
..
通过
A
m
a
zon
S
s
clie
nt
⽅
式
,
将
数据
写⼊
E
x
cel
,
并
上
传
⾄
S
,
最
后
⼤
象
推
送
下
载
链
接
s
clie
nt
的
put
O
bjec
t
⽅
式
上
传
..
通过
IM
ss
S
e
rv
ice
⽅
式
,
将
数据
写⼊
E
x
cel
,
并
上
传
⾄
S
,
最
后
将
下
载
链
接
展
示
在
芥
末
端
参
考
⽂
档
:
⼀
、
整
体介
绍
.
特点
简
单
、
省
内
存
的
读
写
E
x
cel
的
开
源
项
⽬
2022/8/3 12:42
EasyExcel
https://km.sankuai.com/page/1344566103
2/17
.
为什么
省
内
存
在
解
析
E
x
cel
时
没
有
将
⽂
件
数据
⼀
次
性
全
部
加
载
到内
存
中
,
⽽
是
从
磁
盘
上⼀
⾏⾏读
取
数据
,
逐
个
解
析
针
对
每
⾏
数据
的
处
理
结
果
、
全
部
⾏
数据
的
处
理
结
果
,
都
可
以
通过
回
调
函
数
进
⾏
操
作
⼆
、
快
速
开
始
.
G
i
t
地址
:
ea
sy
e
x
cel
建
议
:下
载
源
码
,
并
且
本
地
跑
⼀下
各
种
测
试
场
景
.
pom
.
简
单
读
:
将
E
x
cel
内
容
转
换
为
J
a
v
a
对
象
..
通过
@
E
x
cel
P
rop
e
rty
注
解
,
创
建
e
x
cel
对
应
的
实
体
对
象
(
e
x
cel
的
列
对
应
对
象
的
属
性
)
@
E
x
cel
P
rop
e
rty
中
I
n
de
x
和
V
al
u
e
属
性建
议
只
使
⽤
⼀个(
要
么
全
⽤
I
n
de
x
,
要
么
全
⽤
V
al
u
e
)
代
码
块
J
a
v
a
de
mo
.
x
l
sx
.
KB
I
n
de
x
O
r
N
a
m
e
D
a
t
a
类
属
性
和
E
x
cel
表
头
列
⼀⼀
对
应
J
a
v
a
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.0</version>
</dependency>
@Data
public class IndexOrNameData {
/**
*
⽤
名
字
去匹
配
,
这
⾥
需
要
注
意
,
如
果
名
字
重
复
,
会
导
致
只
有
⼀个
字
段
读
取
到
数据
*/
@ExcelProperty("
字
符
串
标
题
")
private String string;
@ExcelProperty("
⽇
期标
题
")
private Date date;
/**
*
强
制
读
取
第
三个
【
Index
默
认
是
从
0
开
始
】
这
⾥
不
建
议
index
和
name
同
时
⽤
,
要
么
⼀个
对
象
只
⽤
index
,
要
么
⼀个
对
象
只
⽤
na
配
*/
@ExcelProperty(index = 2)
private Double doubleData;
}
2022/8/3 12:42
EasyExcel
https://km.sankuai.com/page/1344566103
3/17
建
议
使
⽤
V
al
u
e
,
因
为使
⽤
I
n
de
x
的
话
,
后
续
在
e
x
cel
中
间
列
新
增
⼀
列
时
,
⽐
如
:
i
n
de
x
=
对
应
“
销
售
⽇
期
”
列
,
则
原
本
存
在
的
列
的
i
n
de
x
值
都
要
+
,
都
要调
整
..
创
建
e
x
cel
⼀
⾏
⼀
⾏
的
回
调
监
听
器
作
⽤
:
E
a
sy
E
x
cel
是
⼀
⾏
⼀
⾏读
取
的
数据
,
当
每
读
完
⼀
⾏
或
者
n
⾏
数据
后
,
可
以
通过
监
听
器
的
回
调
函
数
,
对
n
条
数据
进
⾏
操
作
或
进
⾏
业
务
操
作
作
⽤
:
E
x
cel
全
部
⾏
都
读
取
完
毕
,
可
以
通过
监
听
器
的
回
调
函
数
,
对
全
部
数据
进
⾏
操
作
或
进
⾏
业
务
操
作
..
直
接
读
即可
注
意
📢
:
这
⾥
将
E
x
cel
⼀
⾏
数据
转
换
为
I
n
de
x
O
r
N
a
m
e
D
a
t
a
对
象
,
再
to
J
S
ON
S
tr
i
n
g
后
内
容
是
:
{"
da
t
e
":,"
d
ou
ble
D
a
t
a
":.,"
str
i
n
g
":"
字
符
串
"}
其
中
,
da
t
e
在
I
n
de
x
O
r
N
a
m
e
D
a
t
a
中
属
性
是
D
a
t
e
类
型
,
但
是
转
换
J
son
字
符
串中
,
是
L
on
g
类
型
的
时
间
戳
通过
i
n
de
x
O
r
N
a
m
e
D
a
t
a
.
ge
t
D
a
t
e
()
拿
到
的
还
是
正
常
D
a
t
e
数据
类
型
I
n
de
x
O
r
N
a
m
e
D
a
t
a
L
i
st
e
n
e
r
监
听
器
J
a
v
a
从
e
x
cel
中
读
J
a
v
a
@Slf4j
public class IndexOrNameDataListener extends AnalysisEventListener<IndexOrNameData> {
/**
*
每
隔
5
条
存
储
数据
库
,
实
际
使
⽤
中
可
以
100
条
,
然
后
清
理
list
,
⽅
便
内
存
回
收
*/
private static final int BATCH_COUNT = 5;
private List<IndexOrNameData> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
@Override
public void invoke(IndexOrNameData data, AnalysisContext context) {
log.info("
解
析
到
⼀
条
数据
:{}", JSON.toJSONString(data));
cachedDataList.add(data);
if (cachedDataList.size() >= BATCH_COUNT) {
saveData();//
业
务
操
作
cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);//
将
集
合
元
素
删
除
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData();
log.info("
所
有
数据
解
析
完
成
!
");
}
/**
*
加
上
存
储
数据
库
*/
private void saveData() {
log.info("{}
条
数据
,
开
始
存
储
数据
库
!
", cachedDataList.size());
log.info("
存
储
数据
库
成
功
!
");
}
}
@Test
public void indexOrNameRead() {
// 01.excel
⽂
件
资
源
的
路
径
,
resource/excel
下
的
demo.xlsx
⽂
件
String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";
// 02.
这
⾥
默
认读
取
第
⼀个
sheet
即
sheet1
EasyExcel.read(fileName, IndexOrNameData.class, new IndexOrNameDataListener()).sheet().doRead();
}
2022/8/3 12:42
EasyExcel
https://km.sankuai.com/page/1344566103
4/17
.
其
它
读
..
读
取
e
x
cel
中
第
⼆
个
s
hee
t
并
且
⼀个
⽂
件
e
x
cel
⽂
件
对
应
⼀个
r
eade
r
..
读
取
E
x
cel
⽂
件中
全
部
s
hee
t
⼀
般
不
这
样
写
,
因
为
不
同
的
s
hee
t
对
应
的
表
头
列
名
不⼀
样
,
所
以
对
应
的
类
以
及
类
的
属
性
也
不⼀
样
建
议
,
分
为
多
个
s
hee
t
读
..
读
取
E
x
cel
⽂
件中
多
个
s
hee
t
⼀个
e
x
cel
⽂
件
⼀个
r
eade
r
J
a
v
a
读
取
e
x
cel
⽂
件
下
全
部
s
hee
t
J
a
v
a
读
多
个
s
hee
t
J
a
v
a
@Test
public void indexOrNameRead() {
// // 01.excel
⽂
件
资
源
的
路
径
,
resource/excel
下
的
demo.xlsx
⽂
件
String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";
//
然
后
读
取
excel
⽂
件中
第
⼀个
sheet
即
sheet1
;⼀个
⽂
件
⼀个
reader
try (ExcelReader excelReader = EasyExcel.read(fileName, IndexOrNameData.class, new
IndexOrNameDataListener()).build()) {
ReadSheet readSheet = EasyExcel.readSheet(1).build();
excelReader.read(readSheet);
}
}
@Test
public void repeatedRead() {
String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";
//
这
⾥
需
要
注
意
IndexOrNameDataListener
的
doAfterAllAnalysed
会
在
每
个
sheet
读
取
完
毕
后
调
⽤
⼀
次
。
然
后
所
有
she
同
⼀个
IndexOrNameDataListener
⾥
⾯
写
//
即
监
听
器
中
,
全
部
数据
处
理
完
成
的
回
调
⽅
法
,
会
被
sheet1
触
发
⼀
次
,
被
sheet
触
发
⼀
次
EasyExcel.read(fileName, IndexOrNameData.class, new IndexOrNameDataListener()).doReadAll();
}
@Test
public void repeatedRead() {
String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";
try (ExcelReader excelReader = EasyExcel.read(fileName).build()) {
//
不
同
head
,不
同
的
Listener
//
⼀个
⽂
件
⼀个
reader
ReadSheet readSheet1 =
EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new
DemoDataListener()).build();
ReadSheet readSheet2 =
EasyExcel.readSheet(1).head(IndexOrNameData.class).registerReadListener(new
IndexOrNameDataListener()).build();
excelReader.read(readSheet1, readSheet2);
}
剩余16页未读,继续阅读
资源评论
tmax52HZ
- 粉丝: 155
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功