Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
金手指1668
easyexcel
提交
05c39481
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,发现更多精彩内容 >>
提交
05c39481
编写于
8月 28, 2019
作者:
庄家钜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增拦截器demo
上级
a9128bb4
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
143 addition
and
8 deletion
+143
-8
img/readme/quickstart/write/customHandlerWrite.png
img/readme/quickstart/write/customHandlerWrite.png
+0
-0
quickstart.md
quickstart.md
+37
-5
src/test/java/com/alibaba/easyexcel/test/demo/write/CustomCellWriteHandler.java
...aba/easyexcel/test/demo/write/CustomCellWriteHandler.java
+45
-0
src/test/java/com/alibaba/easyexcel/test/demo/write/CustomSheetWriteHandler.java
...ba/easyexcel/test/demo/write/CustomSheetWriteHandler.java
+39
-0
src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
...java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
+22
-3
未找到文件。
img/readme/quickstart/write/customHandlerWrite.png
0 → 100644
浏览文件 @
05c39481
4.2 KB
quickstart.md
浏览文件 @
05c39481
...
...
@@ -24,6 +24,7 @@ DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/ja
*
[
使用table去写入
](
#tableWrite
)
*
[
动态头,实时生成头写入
](
#dynamicHeadWrite
)
*
[
自动列宽(不太精确)
](
#longestMatchColumnWidthWrite
)
*
[
自定义拦截器(下拉,超链接等上面几点都不符合但是要对单元格进行操作的参照这个)
](
#customHandlerWrite
)
*
[
web中的写
](
#webWrite
)
## 读excel样例
...
...
@@ -810,7 +811,7 @@ public class LongestMatchColumnWidthData {
```
##### 代码
```
java
/**
/**
* 自动列宽(不太精确)
* <p>
* 这个目前不是很好用,比如有数字就会导致换行。而且长度也不是刚好和实际长度一致。 所以需要精确到刚好列宽的慎用。 当然也可以自己参照
...
...
@@ -818,16 +819,20 @@ public class LongestMatchColumnWidthData {
* <p>
* poi 自带{@link SXSSFSheet#autoSizeColumn(int)} 对中文支持也不太好。目前没找到很好的算法。 有的话可以推荐下。
*
* <p>1. 创建excel对应的实体对象 参照{@link DemoData}
* <p>3. 注册策略{@link LongestMatchColumnWidthStyleStrategy}
* <p>2. 直接写即可
* <p>
* 1. 创建excel对应的实体对象 参照{@link LongestMatchColumnWidthData}
* <p>
* 2. 注册策略{@link LongestMatchColumnWidthStyleStrategy}
* <p>
* 3. 直接写即可
*/
@Test
public
void
longestMatchColumnWidthWrite
()
{
String
fileName
=
TestFileUtil
.
getPath
()
+
"longestMatchColumnWidthWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel
.
write
(
fileName
,
LongestMatchColumnWidthData
.
class
).
sheet
(
"模板"
).
doWrite
(
dataLong
());
EasyExcel
.
write
(
fileName
,
LongestMatchColumnWidthData
.
class
)
.
registerWriteHandler
(
new
LongestMatchColumnWidthStyleStrategy
()).
sheet
(
"模板"
).
doWrite
(
dataLong
());
}
private
List
<
LongestMatchColumnWidthData
>
dataLong
()
{
...
...
@@ -843,6 +848,33 @@ public class LongestMatchColumnWidthData {
}
```
### <span id="customHandlerWrite" />自定义拦截器(上面几点都不符合但是要对单元格进行操作的参照这个)
##### excel示例
![
img
](
img/readme/quickstart/write/customHandlerWrite.png
)
##### 对象
参照:
[
对象
](
#simpleWriteObject
)
##### 代码
```
java
/**
* 下拉,超链接等自定义拦截器(上面几点都不符合但是要对单元格进行操作的参照这个)
* <p>
* demo这里实现2点。1. 对第一行第一列的头超链接到:https://github.com/alibaba/easyexcel 2. 对第一列第一行和第二行的数据新增下拉框,显示 测试1 测试2
* <p>
* 1. 创建excel对应的实体对象 参照{@link DemoData}
* <p>
* 2. 注册拦截器 {@link CustomCellWriteHandler} {@link CustomSheetWriteHandler}
* <p>
* 2. 直接写即可
*/
@Test
public
void
customHandlerWrite
()
{
String
fileName
=
TestFileUtil
.
getPath
()
+
"customHandlerWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
registerWriteHandler
(
new
CustomSheetWriteHandler
())
.
registerWriteHandler
(
new
CustomCellWriteHandler
()).
sheet
(
"模板"
).
doWrite
(
data
());
}
```
### <span id="webWrite" />web中的写
##### 示例代码
DEMO代码地址:
[
https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java
](
/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java
)
...
...
src/test/java/com/alibaba/easyexcel/test/demo/write/CustomCellWriteHandler.java
0 → 100644
浏览文件 @
05c39481
package
com.alibaba.easyexcel.test.demo.write
;
import
org.apache.poi.common.usermodel.HyperlinkType
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.CreationHelper
;
import
org.apache.poi.ss.usermodel.Hyperlink
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.metadata.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
/**
* 自定义拦截器。对第一行第一列的头超链接到:https://github.com/alibaba/easyexcel
*
* @author Jiaju Zhuang
*/
public
class
CustomCellWriteHandler
implements
CellWriteHandler
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
CustomCellWriteHandler
.
class
);
@Override
public
void
beforeCellCreate
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Row
row
,
Head
head
,
int
relativeRowIndex
,
boolean
isHead
)
{
}
@Override
public
void
afterCellCreate
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
CellData
cellData
,
Cell
cell
,
Head
head
,
int
relativeRowIndex
,
boolean
isHead
)
{
// 这里可以对cell进行任何操作
LOGGER
.
info
(
"第{}行,第{}列写入完成。"
,
cell
.
getRowIndex
(),
cell
.
getColumnIndex
());
if
(
isHead
&&
cell
.
getColumnIndex
()
==
0
)
{
CreationHelper
createHelper
=
writeSheetHolder
.
getSheet
().
getWorkbook
().
getCreationHelper
();
Hyperlink
hyperlink
=
createHelper
.
createHyperlink
(
HyperlinkType
.
URL
);
hyperlink
.
setAddress
(
"https://github.com/alibaba/easyexcel"
);
cell
.
setHyperlink
(
hyperlink
);
}
}
}
src/test/java/com/alibaba/easyexcel/test/demo/write/CustomSheetWriteHandler.java
0 → 100644
浏览文件 @
05c39481
package
com.alibaba.easyexcel.test.demo.write
;
import
org.apache.poi.ss.usermodel.DataValidation
;
import
org.apache.poi.ss.usermodel.DataValidationConstraint
;
import
org.apache.poi.ss.usermodel.DataValidationHelper
;
import
org.apache.poi.ss.util.CellRangeAddressList
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.write.handler.SheetWriteHandler
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
/**
* 自定义拦截器.对第一列第一行和第二行的数据新增下拉框,显示 测试1 测试2
*
* @author Jiaju Zhuang
*/
public
class
CustomSheetWriteHandler
implements
SheetWriteHandler
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
CustomSheetWriteHandler
.
class
);
@Override
public
void
beforeSheetCreate
(
WriteWorkbookHolder
writeWorkbookHolder
,
WriteSheetHolder
writeSheetHolder
)
{
}
@Override
public
void
afterSheetCreate
(
WriteWorkbookHolder
writeWorkbookHolder
,
WriteSheetHolder
writeSheetHolder
)
{
LOGGER
.
info
(
"第{}个Sheet写入成功。"
,
writeSheetHolder
.
getSheetNo
());
// 区间设置 第一列第一行和第二行的数据。由于第一行是头,所以第一、二行的数据实际上是第二三行
CellRangeAddressList
cellRangeAddressList
=
new
CellRangeAddressList
(
1
,
2
,
0
,
0
);
DataValidationHelper
helper
=
writeSheetHolder
.
getSheet
().
getDataValidationHelper
();
DataValidationConstraint
constraint
=
helper
.
createExplicitListConstraint
(
new
String
[]
{
"测试1"
,
"测试2"
});
DataValidation
dataValidation
=
helper
.
createValidation
(
constraint
,
cellRangeAddressList
);
writeSheetHolder
.
getSheet
().
addValidationData
(
dataValidation
);
}
}
src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
浏览文件 @
05c39481
...
...
@@ -311,11 +311,11 @@ public class WriteTest {
* poi 自带{@link SXSSFSheet#autoSizeColumn(int)} 对中文支持也不太好。目前没找到很好的算法。 有的话可以推荐下。
*
* <p>
* 1. 创建excel对应的实体对象 参照{@link
Demo
Data}
* 1. 创建excel对应的实体对象 参照{@link
LongestMatchColumnWidth
Data}
* <p>
*
3
. 注册策略{@link LongestMatchColumnWidthStyleStrategy}
*
2
. 注册策略{@link LongestMatchColumnWidthStyleStrategy}
* <p>
*
2
. 直接写即可
*
3
. 直接写即可
*/
@Test
public
void
longestMatchColumnWidthWrite
()
{
...
...
@@ -326,6 +326,25 @@ public class WriteTest {
.
registerWriteHandler
(
new
LongestMatchColumnWidthStyleStrategy
()).
sheet
(
"模板"
).
doWrite
(
dataLong
());
}
/**
* 下拉,超链接等自定义拦截器(上面几点都不符合但是要对单元格进行操作的参照这个)
* <p>
* demo这里实现2点。1. 对第一行第一列的头超链接到:https://github.com/alibaba/easyexcel 2. 对第一列第一行和第二行的数据新增下拉框,显示 测试1 测试2
* <p>
* 1. 创建excel对应的实体对象 参照{@link DemoData}
* <p>
* 2. 注册拦截器 {@link CustomCellWriteHandler} {@link CustomSheetWriteHandler}
* <p>
* 2. 直接写即可
*/
@Test
public
void
customHandlerWrite
()
{
String
fileName
=
TestFileUtil
.
getPath
()
+
"customHandlerWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
registerWriteHandler
(
new
CustomSheetWriteHandler
())
.
registerWriteHandler
(
new
CustomCellWriteHandler
()).
sheet
(
"模板"
).
doWrite
(
data
());
}
private
List
<
LongestMatchColumnWidthData
>
dataLong
()
{
List
<
LongestMatchColumnWidthData
>
list
=
new
ArrayList
<
LongestMatchColumnWidthData
>();
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录