Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
金手指1668
easyexcel
提交
11d17024
E
easyexcel
项目概览
金手指1668
/
easyexcel
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
easyexcel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
11d17024
编写于
6月 09, 2020
作者:
庄家钜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改demo 统一加上final
上级
cf40b873
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
111 addition
and
69 deletion
+111
-69
src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java
...t/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java
+29
-15
src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
...java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
+82
-54
未找到文件。
src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java
浏览文件 @
11d17024
...
@@ -27,6 +27,7 @@ import com.alibaba.fastjson.JSON;
...
@@ -27,6 +27,7 @@ import com.alibaba.fastjson.JSON;
*/
*/
@Ignore
@Ignore
public
class
ReadTest
{
public
class
ReadTest
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
ReadTest
.
class
);
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
ReadTest
.
class
);
/**
/**
...
@@ -48,12 +49,18 @@ public class ReadTest {
...
@@ -48,12 +49,18 @@ public class ReadTest {
// 写法2:
// 写法2:
fileName
=
TestFileUtil
.
getPath
()
+
"demo"
+
File
.
separator
+
"demo.xlsx"
;
fileName
=
TestFileUtil
.
getPath
()
+
"demo"
+
File
.
separator
+
"demo.xlsx"
;
ExcelReader
excelReader
=
EasyExcel
.
read
(
fileName
,
DemoData
.
class
,
new
DemoDataListener
()).
build
();
ExcelReader
excelReader
=
null
;
try
{
excelReader
=
EasyExcel
.
read
(
fileName
,
DemoData
.
class
,
new
DemoDataListener
()).
build
();
ReadSheet
readSheet
=
EasyExcel
.
readSheet
(
0
).
build
();
ReadSheet
readSheet
=
EasyExcel
.
readSheet
(
0
).
build
();
excelReader
.
read
(
readSheet
);
excelReader
.
read
(
readSheet
);
}
finally
{
if
(
excelReader
!=
null
)
{
// 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
// 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
excelReader
.
finish
();
excelReader
.
finish
();
}
}
}
}
/**
/**
* 指定列的下标或者列名
* 指定列的下标或者列名
...
@@ -90,7 +97,10 @@ public class ReadTest {
...
@@ -90,7 +97,10 @@ public class ReadTest {
// 读取部分sheet
// 读取部分sheet
fileName
=
TestFileUtil
.
getPath
()
+
"demo"
+
File
.
separator
+
"demo.xlsx"
;
fileName
=
TestFileUtil
.
getPath
()
+
"demo"
+
File
.
separator
+
"demo.xlsx"
;
ExcelReader
excelReader
=
EasyExcel
.
read
(
fileName
).
build
();
ExcelReader
excelReader
=
null
;
try
{
excelReader
=
EasyExcel
.
read
(
fileName
).
build
();
// 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
// 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
ReadSheet
readSheet1
=
ReadSheet
readSheet1
=
EasyExcel
.
readSheet
(
0
).
head
(
DemoData
.
class
).
registerReadListener
(
new
DemoDataListener
()).
build
();
EasyExcel
.
readSheet
(
0
).
head
(
DemoData
.
class
).
registerReadListener
(
new
DemoDataListener
()).
build
();
...
@@ -98,9 +108,13 @@ public class ReadTest {
...
@@ -98,9 +108,13 @@ public class ReadTest {
EasyExcel
.
readSheet
(
1
).
head
(
DemoData
.
class
).
registerReadListener
(
new
DemoDataListener
()).
build
();
EasyExcel
.
readSheet
(
1
).
head
(
DemoData
.
class
).
registerReadListener
(
new
DemoDataListener
()).
build
();
// 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能
// 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能
excelReader
.
read
(
readSheet1
,
readSheet2
);
excelReader
.
read
(
readSheet1
,
readSheet2
);
}
finally
{
if
(
excelReader
!=
null
)
{
// 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
// 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
excelReader
.
finish
();
excelReader
.
finish
();
}
}
}
}
/**
/**
* 日期、数字或者自定义格式转换
* 日期、数字或者自定义格式转换
...
...
src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
浏览文件 @
11d17024
...
@@ -40,6 +40,7 @@ import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy
...
@@ -40,6 +40,7 @@ import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy
*/
*/
@Ignore
@Ignore
public
class
WriteTest
{
public
class
WriteTest
{
/**
/**
* 最简单的写
* 最简单的写
* <p>
* <p>
...
@@ -58,12 +59,18 @@ public class WriteTest {
...
@@ -58,12 +59,18 @@ public class WriteTest {
// 写法2
// 写法2
fileName
=
TestFileUtil
.
getPath
()
+
"simpleWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
fileName
=
TestFileUtil
.
getPath
()
+
"simpleWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里 需要指定写用哪个class去写
// 这里 需要指定写用哪个class去写
ExcelWriter
excelWriter
=
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
build
();
ExcelWriter
excelWriter
=
null
;
try
{
excelWriter
=
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
build
();
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
"模板"
).
build
();
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
"模板"
).
build
();
excelWriter
.
write
(
data
(),
writeSheet
);
excelWriter
.
write
(
data
(),
writeSheet
);
/// 千万别忘记finish 会帮忙关闭流
}
finally
{
// 千万别忘记finish 会帮忙关闭流
if
(
excelWriter
!=
null
)
{
excelWriter
.
finish
();
excelWriter
.
finish
();
}
}
}
}
/**
/**
* 根据参数只导出指定列
* 根据参数只导出指定列
...
@@ -141,8 +148,10 @@ public class WriteTest {
...
@@ -141,8 +148,10 @@ public class WriteTest {
public
void
repeatedWrite
()
{
public
void
repeatedWrite
()
{
// 方法1 如果写到同一个sheet
// 方法1 如果写到同一个sheet
String
fileName
=
TestFileUtil
.
getPath
()
+
"repeatedWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
String
fileName
=
TestFileUtil
.
getPath
()
+
"repeatedWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
ExcelWriter
excelWriter
=
null
;
try
{
// 这里 需要指定写用哪个class去写
// 这里 需要指定写用哪个class去写
ExcelWriter
excelWriter
=
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
build
();
excelWriter
=
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
build
();
// 这里注意 如果同一个sheet只要创建一次
// 这里注意 如果同一个sheet只要创建一次
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
"模板"
).
build
();
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
"模板"
).
build
();
// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来
// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来
...
@@ -151,39 +160,53 @@ public class WriteTest {
...
@@ -151,39 +160,53 @@ public class WriteTest {
List
<
DemoData
>
data
=
data
();
List
<
DemoData
>
data
=
data
();
excelWriter
.
write
(
data
,
writeSheet
);
excelWriter
.
write
(
data
,
writeSheet
);
}
}
/// 千万别忘记finish 会帮忙关闭流
}
finally
{
// 千万别忘记finish 会帮忙关闭流
if
(
excelWriter
!=
null
)
{
excelWriter
.
finish
();
excelWriter
.
finish
();
}
}
// 方法2 如果写到不同的sheet 同一个对象
// 方法2 如果写到不同的sheet 同一个对象
fileName
=
TestFileUtil
.
getPath
()
+
"repeatedWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
fileName
=
TestFileUtil
.
getPath
()
+
"repeatedWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
try
{
// 这里 指定文件
// 这里 指定文件
excelWriter
=
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
build
();
excelWriter
=
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
build
();
// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面
// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面
for
(
int
i
=
0
;
i
<
5
;
i
++)
{
for
(
int
i
=
0
;
i
<
5
;
i
++)
{
// 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样
// 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样
writeSheet
=
EasyExcel
.
writerSheet
(
i
,
"模板"
+
i
).
build
();
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
i
,
"模板"
+
i
).
build
();
// 分页去数据库查询数据 这里可以去数据库查询每一页的数据
// 分页去数据库查询数据 这里可以去数据库查询每一页的数据
List
<
DemoData
>
data
=
data
();
List
<
DemoData
>
data
=
data
();
excelWriter
.
write
(
data
,
writeSheet
);
excelWriter
.
write
(
data
,
writeSheet
);
}
}
/// 千万别忘记finish 会帮忙关闭流
}
finally
{
// 千万别忘记finish 会帮忙关闭流
if
(
excelWriter
!=
null
)
{
excelWriter
.
finish
();
excelWriter
.
finish
();
}
}
// 方法3 如果写到不同的sheet 不同的对象
// 方法3 如果写到不同的sheet 不同的对象
fileName
=
TestFileUtil
.
getPath
()
+
"repeatedWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
fileName
=
TestFileUtil
.
getPath
()
+
"repeatedWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
try
{
// 这里 指定文件
// 这里 指定文件
excelWriter
=
EasyExcel
.
write
(
fileName
).
build
();
excelWriter
=
EasyExcel
.
write
(
fileName
).
build
();
// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面
// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面
for
(
int
i
=
0
;
i
<
5
;
i
++)
{
for
(
int
i
=
0
;
i
<
5
;
i
++)
{
// 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样。这里注意DemoData.class 可以每次都变,我这里为了方便 所以用的同一个class 实际上可以一直变
// 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样。这里注意DemoData.class 可以每次都变,我这里为了方便 所以用的同一个class 实际上可以一直变
writeSheet
=
EasyExcel
.
writerSheet
(
i
,
"模板"
+
i
).
head
(
DemoData
.
class
).
build
();
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
i
,
"模板"
+
i
).
head
(
DemoData
.
class
).
build
();
// 分页去数据库查询数据 这里可以去数据库查询每一页的数据
// 分页去数据库查询数据 这里可以去数据库查询每一页的数据
List
<
DemoData
>
data
=
data
();
List
<
DemoData
>
data
=
data
();
excelWriter
.
write
(
data
,
writeSheet
);
excelWriter
.
write
(
data
,
writeSheet
);
}
}
/// 千万别忘记finish 会帮忙关闭流
}
finally
{
// 千万别忘记finish 会帮忙关闭流
if
(
excelWriter
!=
null
)
{
excelWriter
.
finish
();
excelWriter
.
finish
();
}
}
}
}
/**
/**
* 日期、数字或者自定义格式转换
* 日期、数字或者自定义格式转换
...
@@ -302,7 +325,7 @@ public class WriteTest {
...
@@ -302,7 +325,7 @@ public class WriteTest {
// 背景设置为红色
// 背景设置为红色
headWriteCellStyle
.
setFillForegroundColor
(
IndexedColors
.
RED
.
getIndex
());
headWriteCellStyle
.
setFillForegroundColor
(
IndexedColors
.
RED
.
getIndex
());
WriteFont
headWriteFont
=
new
WriteFont
();
WriteFont
headWriteFont
=
new
WriteFont
();
headWriteFont
.
setFontHeightInPoints
((
short
)
20
);
headWriteFont
.
setFontHeightInPoints
((
short
)
20
);
headWriteCellStyle
.
setWriteFont
(
headWriteFont
);
headWriteCellStyle
.
setWriteFont
(
headWriteFont
);
// 内容的策略
// 内容的策略
WriteCellStyle
contentWriteCellStyle
=
new
WriteCellStyle
();
WriteCellStyle
contentWriteCellStyle
=
new
WriteCellStyle
();
...
@@ -312,7 +335,7 @@ public class WriteTest {
...
@@ -312,7 +335,7 @@ public class WriteTest {
contentWriteCellStyle
.
setFillForegroundColor
(
IndexedColors
.
GREEN
.
getIndex
());
contentWriteCellStyle
.
setFillForegroundColor
(
IndexedColors
.
GREEN
.
getIndex
());
WriteFont
contentWriteFont
=
new
WriteFont
();
WriteFont
contentWriteFont
=
new
WriteFont
();
// 字体大小
// 字体大小
contentWriteFont
.
setFontHeightInPoints
((
short
)
20
);
contentWriteFont
.
setFontHeightInPoints
((
short
)
20
);
contentWriteCellStyle
.
setWriteFont
(
contentWriteFont
);
contentWriteCellStyle
.
setWriteFont
(
contentWriteFont
);
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
HorizontalCellStyleStrategy
horizontalCellStyleStrategy
=
HorizontalCellStyleStrategy
horizontalCellStyleStrategy
=
...
@@ -362,7 +385,9 @@ public class WriteTest {
...
@@ -362,7 +385,9 @@ public class WriteTest {
String
fileName
=
TestFileUtil
.
getPath
()
+
"tableWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
String
fileName
=
TestFileUtil
.
getPath
()
+
"tableWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里直接写多个table的案例了,如果只有一个 也可以直一行代码搞定,参照其他案例
// 这里直接写多个table的案例了,如果只有一个 也可以直一行代码搞定,参照其他案例
// 这里 需要指定写用哪个class去写
// 这里 需要指定写用哪个class去写
ExcelWriter
excelWriter
=
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
build
();
ExcelWriter
excelWriter
=
null
;
try
{
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
build
();
// 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了
// 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
"模板"
).
needHead
(
Boolean
.
FALSE
).
build
();
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
"模板"
).
needHead
(
Boolean
.
FALSE
).
build
();
// 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要
// 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要
...
@@ -372,9 +397,13 @@ public class WriteTest {
...
@@ -372,9 +397,13 @@ public class WriteTest {
excelWriter
.
write
(
data
(),
writeSheet
,
writeTable0
);
excelWriter
.
write
(
data
(),
writeSheet
,
writeTable0
);
// 第二次写如也会创建头,然后在第一次的后面写入数据
// 第二次写如也会创建头,然后在第一次的后面写入数据
excelWriter
.
write
(
data
(),
writeSheet
,
writeTable1
);
excelWriter
.
write
(
data
(),
writeSheet
,
writeTable1
);
/// 千万别忘记finish 会帮忙关闭流
}
finally
{
// 千万别忘记finish 会帮忙关闭流
if
(
excelWriter
!=
null
)
{
excelWriter
.
finish
();
excelWriter
.
finish
();
}
}
}
}
/**
/**
* 动态头,实时生成头写入
* 动态头,实时生成头写入
...
@@ -399,8 +428,7 @@ public class WriteTest {
...
@@ -399,8 +428,7 @@ public class WriteTest {
/**
/**
* 自动列宽(不太精确)
* 自动列宽(不太精确)
* <p>
* <p>
* 这个目前不是很好用,比如有数字就会导致换行。而且长度也不是刚好和实际长度一致。 所以需要精确到刚好列宽的慎用。 当然也可以自己参照
* 这个目前不是很好用,比如有数字就会导致换行。而且长度也不是刚好和实际长度一致。 所以需要精确到刚好列宽的慎用。 当然也可以自己参照 {@link LongestMatchColumnWidthStyleStrategy}重新实现.
* {@link LongestMatchColumnWidthStyleStrategy}重新实现.
* <p>
* <p>
* poi 自带{@link SXSSFSheet#autoSizeColumn(int)} 对中文支持也不太好。目前没找到很好的算法。 有的话可以推荐下。
* poi 自带{@link SXSSFSheet#autoSizeColumn(int)} 对中文支持也不太好。目前没找到很好的算法。 有的话可以推荐下。
*
*
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录