Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
苏木力格
easyexcel
提交
29a36b14
E
easyexcel
项目概览
苏木力格
/
easyexcel
与 Fork 源项目一致
从无法访问的项目Fork
通知
7
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,发现更多精彩内容 >>
提交
29a36b14
编写于
4月 24, 2020
作者:
庄家钜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复`table`、`sheet`中创建的拦截器不执行`workbook`事件的bug #1202
上级
68f5303c
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
196 addition
and
39 deletion
+196
-39
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
...main/java/com/alibaba/excel/context/WriteContextImpl.java
+19
-4
src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java
src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java
+47
-19
src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java
...baba/excel/write/metadata/holder/AbstractWriteHolder.java
+39
-13
src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java
.../com/alibaba/excel/write/metadata/holder/WriteHolder.java
+7
-0
src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java
.../alibaba/excel/write/style/AbstractCellStyleStrategy.java
+9
-3
src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData1.java
...ava/com/alibaba/easyexcel/test/temp/simple/DemoData1.java
+27
-0
src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData2.java
...ava/com/alibaba/easyexcel/test/temp/simple/DemoData2.java
+27
-0
src/test/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java
...st/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java
+20
-0
update.md
update.md
+1
-0
未找到文件。
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
浏览文件 @
29a36b14
...
...
@@ -111,7 +111,14 @@ public class WriteContextImpl implements WriteContext {
if
(
selectSheetFromCache
(
writeSheet
))
{
return
;
}
initCurrentSheetHolder
(
writeSheet
);
// Workbook handler need to supplementary execution
WriteHandlerUtils
.
beforeWorkbookCreate
(
this
,
true
);
WriteHandlerUtils
.
afterWorkbookCreate
(
this
,
true
);
// Initialization current sheet
initSheet
(
writeType
);
}
...
...
@@ -201,8 +208,8 @@ public class WriteContextImpl implements WriteContext {
if
(
currentWriteHolder
.
automaticMergeHead
())
{
addMergedRegionToCurrentSheet
(
excelWriteHeadProperty
,
newRowIndex
);
}
for
(
int
relativeRowIndex
=
0
,
i
=
newRowIndex
;
i
<
excelWriteHeadProperty
.
getHeadRowNumber
()
+
newRowIndex
;
i
++,
relativeRowIndex
++)
{
for
(
int
relativeRowIndex
=
0
,
i
=
newRowIndex
;
i
<
excelWriteHeadProperty
.
getHeadRowNumber
()
+
newRowIndex
;
i
++,
relativeRowIndex
++)
{
WriteHandlerUtils
.
beforeRowCreate
(
this
,
newRowIndex
,
relativeRowIndex
,
Boolean
.
TRUE
);
Row
row
=
WorkBookUtil
.
createRow
(
writeSheetHolder
.
getSheet
(),
i
);
WriteHandlerUtils
.
afterRowCreate
(
this
,
row
,
relativeRowIndex
,
Boolean
.
TRUE
);
...
...
@@ -227,7 +234,7 @@ public class WriteContextImpl implements WriteContext {
Cell
cell
=
row
.
createCell
(
columnIndex
);
WriteHandlerUtils
.
afterCellCreate
(
this
,
cell
,
head
,
relativeRowIndex
,
Boolean
.
TRUE
);
cell
.
setCellValue
(
head
.
getHeadNameList
().
get
(
relativeRowIndex
));
WriteHandlerUtils
.
afterCellDispose
(
this
,
(
CellData
)
null
,
cell
,
head
,
relativeRowIndex
,
Boolean
.
TRUE
);
WriteHandlerUtils
.
afterCellDispose
(
this
,
(
CellData
)
null
,
cell
,
head
,
relativeRowIndex
,
Boolean
.
TRUE
);
}
}
...
...
@@ -251,7 +258,15 @@ public class WriteContextImpl implements WriteContext {
}
return
;
}
initCurrentTableHolder
(
writeTable
);
// Workbook and sheet handler need to supplementary execution
WriteHandlerUtils
.
beforeWorkbookCreate
(
this
,
true
);
WriteHandlerUtils
.
afterWorkbookCreate
(
this
,
true
);
WriteHandlerUtils
.
beforeSheetCreate
(
this
,
true
);
WriteHandlerUtils
.
afterSheetCreate
(
this
,
true
);
initHead
(
writeTableHolder
.
excelWriteHeadProperty
());
}
...
...
@@ -322,7 +337,7 @@ public class WriteContextImpl implements WriteContext {
try
{
Workbook
workbook
=
writeWorkbookHolder
.
getWorkbook
();
if
(
workbook
instanceof
SXSSFWorkbook
)
{
((
SXSSFWorkbook
)
workbook
).
dispose
();
((
SXSSFWorkbook
)
workbook
).
dispose
();
}
}
catch
(
Throwable
t
)
{
throwable
=
t
;
...
...
src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java
浏览文件 @
29a36b14
...
...
@@ -2,6 +2,7 @@ package com.alibaba.excel.util;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Row
;
...
...
@@ -24,66 +25,82 @@ public class WriteHandlerUtils {
private
WriteHandlerUtils
()
{}
public
static
void
beforeWorkbookCreate
(
WriteContext
writeContext
)
{
List
<
WriteHandler
>
handlerList
=
writeContext
.
writeWorkbookHolder
().
writeHandlerMap
().
get
(
WorkbookWriteHandler
.
class
);
beforeWorkbookCreate
(
writeContext
,
false
);
}
public
static
void
beforeWorkbookCreate
(
WriteContext
writeContext
,
boolean
runOwn
)
{
List
<
WriteHandler
>
handlerList
=
getHandlerList
(
writeContext
,
WorkbookWriteHandler
.
class
,
runOwn
);
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
WorkbookWriteHandler
)
{
((
WorkbookWriteHandler
)
writeHandler
).
beforeWorkbookCreate
();
((
WorkbookWriteHandler
)
writeHandler
).
beforeWorkbookCreate
();
}
}
}
public
static
void
afterWorkbookCreate
(
WriteContext
writeContext
)
{
List
<
WriteHandler
>
handlerList
=
writeContext
.
writeWorkbookHolder
().
writeHandlerMap
().
get
(
WorkbookWriteHandler
.
class
);
afterWorkbookCreate
(
writeContext
,
false
);
}
public
static
void
afterWorkbookCreate
(
WriteContext
writeContext
,
boolean
runOwn
)
{
List
<
WriteHandler
>
handlerList
=
getHandlerList
(
writeContext
,
WorkbookWriteHandler
.
class
,
runOwn
);
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
WorkbookWriteHandler
)
{
((
WorkbookWriteHandler
)
writeHandler
).
afterWorkbookCreate
(
writeContext
.
writeWorkbookHolder
());
((
WorkbookWriteHandler
)
writeHandler
).
afterWorkbookCreate
(
writeContext
.
writeWorkbookHolder
());
}
}
}
public
static
void
afterWorkbookDispose
(
WriteContext
writeContext
)
{
List
<
WriteHandler
>
handlerList
=
writeContext
.
writeWorkbook
Holder
().
writeHandlerMap
().
get
(
WorkbookWriteHandler
.
class
);
writeContext
.
currentWrite
Holder
().
writeHandlerMap
().
get
(
WorkbookWriteHandler
.
class
);
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
WorkbookWriteHandler
)
{
((
WorkbookWriteHandler
)
writeHandler
).
afterWorkbookDispose
(
writeContext
.
writeWorkbookHolder
());
((
WorkbookWriteHandler
)
writeHandler
).
afterWorkbookDispose
(
writeContext
.
writeWorkbookHolder
());
}
}
}
public
static
void
beforeSheetCreate
(
WriteContext
writeContext
)
{
List
<
WriteHandler
>
handlerList
=
writeContext
.
writeSheetHolder
().
writeHandlerMap
().
get
(
SheetWriteHandler
.
class
);
beforeSheetCreate
(
writeContext
,
false
);
}
public
static
void
beforeSheetCreate
(
WriteContext
writeContext
,
boolean
runOwn
)
{
List
<
WriteHandler
>
handlerList
=
getHandlerList
(
writeContext
,
SheetWriteHandler
.
class
,
runOwn
);
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
SheetWriteHandler
)
{
((
SheetWriteHandler
)
writeHandler
).
beforeSheetCreate
(
writeContext
.
writeWorkbookHolder
(),
((
SheetWriteHandler
)
writeHandler
).
beforeSheetCreate
(
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
());
}
}
}
public
static
void
afterSheetCreate
(
WriteContext
writeContext
)
{
List
<
WriteHandler
>
handlerList
=
writeContext
.
writeSheetHolder
().
writeHandlerMap
().
get
(
SheetWriteHandler
.
class
);
afterSheetCreate
(
writeContext
,
false
);
}
public
static
void
afterSheetCreate
(
WriteContext
writeContext
,
boolean
runOwn
)
{
List
<
WriteHandler
>
handlerList
=
getHandlerList
(
writeContext
,
SheetWriteHandler
.
class
,
runOwn
);
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
SheetWriteHandler
)
{
((
SheetWriteHandler
)
writeHandler
).
afterSheetCreate
(
writeContext
.
writeWorkbookHolder
(),
((
SheetWriteHandler
)
writeHandler
).
afterSheetCreate
(
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
());
}
}
...
...
@@ -102,7 +119,7 @@ public class WriteHandlerUtils {
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
CellWriteHandler
)
{
((
CellWriteHandler
)
writeHandler
).
beforeCellCreate
(
writeContext
.
writeSheetHolder
(),
((
CellWriteHandler
)
writeHandler
).
beforeCellCreate
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
row
,
head
,
columnIndex
,
relativeRowIndex
,
isHead
);
}
}
...
...
@@ -117,7 +134,7 @@ public class WriteHandlerUtils {
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
CellWriteHandler
)
{
((
CellWriteHandler
)
writeHandler
).
afterCellCreate
(
writeContext
.
writeSheetHolder
(),
((
CellWriteHandler
)
writeHandler
).
afterCellCreate
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
cell
,
head
,
relativeRowIndex
,
isHead
);
}
}
...
...
@@ -132,7 +149,7 @@ public class WriteHandlerUtils {
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
CellWriteHandler
)
{
((
CellWriteHandler
)
writeHandler
).
afterCellDataConverted
(
writeContext
.
writeSheetHolder
(),
((
CellWriteHandler
)
writeHandler
).
afterCellDataConverted
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
cellData
,
cell
,
head
,
relativeRowIndex
,
isHead
);
}
}
...
...
@@ -156,7 +173,7 @@ public class WriteHandlerUtils {
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
CellWriteHandler
)
{
((
CellWriteHandler
)
writeHandler
).
afterCellDispose
(
writeContext
.
writeSheetHolder
(),
((
CellWriteHandler
)
writeHandler
).
afterCellDispose
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
cellDataList
,
cell
,
head
,
relativeRowIndex
,
isHead
);
}
}
...
...
@@ -173,7 +190,7 @@ public class WriteHandlerUtils {
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
RowWriteHandler
)
{
((
RowWriteHandler
)
writeHandler
).
beforeRowCreate
(
writeContext
.
writeSheetHolder
(),
((
RowWriteHandler
)
writeHandler
).
beforeRowCreate
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
rowIndex
,
relativeRowIndex
,
isHead
);
}
}
...
...
@@ -186,7 +203,7 @@ public class WriteHandlerUtils {
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
RowWriteHandler
)
{
((
RowWriteHandler
)
writeHandler
).
afterRowCreate
(
writeContext
.
writeSheetHolder
(),
((
RowWriteHandler
)
writeHandler
).
afterRowCreate
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
row
,
relativeRowIndex
,
isHead
);
}
}
...
...
@@ -200,7 +217,7 @@ public class WriteHandlerUtils {
}
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
RowWriteHandler
)
{
((
RowWriteHandler
)
writeHandler
).
afterRowDispose
(
writeContext
.
writeSheetHolder
(),
((
RowWriteHandler
)
writeHandler
).
afterRowDispose
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
row
,
relativeRowIndex
,
isHead
);
}
}
...
...
@@ -208,4 +225,15 @@ public class WriteHandlerUtils {
writeContext
.
writeWorkbookHolder
().
getWriteWorkbook
().
getWriteHandler
().
row
(
row
.
getRowNum
(),
row
);
}
}
private
static
List
<
WriteHandler
>
getHandlerList
(
WriteContext
writeContext
,
Class
<?
extends
WriteHandler
>
clazz
,
boolean
runOwn
)
{
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
writeHandlerMap
;
if
(
runOwn
)
{
writeHandlerMap
=
writeContext
.
currentWriteHolder
().
ownWriteHandlerMap
();
}
else
{
writeHandlerMap
=
writeContext
.
currentWriteHolder
().
writeHandlerMap
();
}
return
writeHandlerMap
.
get
(
WorkbookWriteHandler
.
class
);
}
}
src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java
浏览文件 @
29a36b14
...
...
@@ -64,9 +64,14 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
*/
private
ExcelWriteHeadProperty
excelWriteHeadProperty
;
/**
* Write handler
for workbook
* Write handler
*/
private
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
writeHandlerMap
;
/**
* Own write handler.Created in the sheet in the workbook interceptors will not be executed because the workbook to
* create an event long past. So when initializing sheet, supplementary workbook event.
*/
private
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
ownWriteHandlerMap
;
/**
* Use the default style.Default is true.
*/
...
...
@@ -177,21 +182,22 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
List
<
WriteHandler
>
handlerList
=
new
ArrayList
<
WriteHandler
>();
// Initialization Annotation
initAnnotationConfig
(
handlerList
);
initAnnotationConfig
(
handlerList
,
writeBasicParameter
);
if
(
writeBasicParameter
.
getCustomWriteHandlerList
()
!=
null
&&
!
writeBasicParameter
.
getCustomWriteHandlerList
().
isEmpty
())
{
handlerList
.
addAll
(
writeBasicParameter
.
getCustomWriteHandlerList
());
}
this
.
ownWriteHandlerMap
=
sortAndClearUpHandler
(
handlerList
);
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
parentWriteHandlerMap
=
null
;
if
(
parentAbstractWriteHolder
!=
null
)
{
parentWriteHandlerMap
=
parentAbstractWriteHolder
.
getWriteHandlerMap
();
}
else
{
handlerList
.
addAll
(
DefaultWriteHandlerLoader
.
loadDefaultHandler
(
useDefaultStyle
));
}
this
.
writeHandlerMap
=
sortAndClearUpHandler
(
handlerList
,
parentWriteHandlerMap
);
this
.
writeHandlerMap
=
sortAndClearUpAllHandler
(
handlerList
,
parentWriteHandlerMap
);
// Set converterMap
if
(
parentAbstractWriteHolder
==
null
)
{
...
...
@@ -215,13 +221,13 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
switch
(
holderType
())
{
case
SHEET:
compatibleOldCodeCreateRowCellStyleStrategy
(
writeBasicParameter
,
((
WriteSheet
)
writeBasicParameter
).
getTableStyle
());
((
WriteSheet
)
writeBasicParameter
).
getTableStyle
());
compatibleOldCodeCreateHeadColumnWidthStyleStrategy
(
writeBasicParameter
,
((
WriteSheet
)
writeBasicParameter
).
getColumnWidthMap
());
((
WriteSheet
)
writeBasicParameter
).
getColumnWidthMap
());
return
;
case
TABLE:
compatibleOldCodeCreateRowCellStyleStrategy
(
writeBasicParameter
,
((
WriteTable
)
writeBasicParameter
).
getTableStyle
());
((
WriteTable
)
writeBasicParameter
).
getTableStyle
());
return
;
default
:
}
...
...
@@ -279,10 +285,13 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
});
}
protected
void
initAnnotationConfig
(
List
<
WriteHandler
>
handlerList
)
{
protected
void
initAnnotationConfig
(
List
<
WriteHandler
>
handlerList
,
WriteBasicParameter
writeBasicParameter
)
{
if
(!
HeadKindEnum
.
CLASS
.
equals
(
getExcelWriteHeadProperty
().
getHeadKind
()))
{
return
;
}
if
(
writeBasicParameter
.
getClazz
()
==
null
)
{
return
;
}
Map
<
Integer
,
Head
>
headMap
=
getExcelWriteHeadProperty
().
getHeadMap
();
boolean
hasColumnWidth
=
false
;
boolean
hasStyle
=
false
;
...
...
@@ -308,7 +317,6 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
dealRowHigh
(
handlerList
);
dealOnceAbsoluteMerge
(
handlerList
);
}
private
void
dealStyle
(
List
<
WriteHandler
>
handlerList
)
{
...
...
@@ -376,9 +384,9 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
handlerList
.
add
(
columnWidthStyleStrategy
);
}
protected
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
sortAndClearUpHandler
(
List
<
WriteHandler
>
handlerList
,
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
parentHandlerMap
)
{
protected
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
sortAndClearUpAllHandler
(
List
<
WriteHandler
>
handlerList
,
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
parentHandlerMap
)
{
// add
if
(
parentHandlerMap
!=
null
)
{
List
<
WriteHandler
>
parentWriteHandler
=
parentHandlerMap
.
get
(
WriteHandler
.
class
);
...
...
@@ -386,13 +394,17 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
handlerList
.
addAll
(
parentWriteHandler
);
}
}
return
sortAndClearUpHandler
(
handlerList
);
}
protected
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
sortAndClearUpHandler
(
List
<
WriteHandler
>
handlerList
)
{
// sort
Map
<
Integer
,
List
<
WriteHandler
>>
orderExcelWriteHandlerMap
=
new
TreeMap
<
Integer
,
List
<
WriteHandler
>>();
for
(
WriteHandler
handler
:
handlerList
)
{
int
order
=
Integer
.
MIN_VALUE
;
if
(
handler
instanceof
Order
)
{
order
=
((
Order
)
handler
).
order
();
order
=
((
Order
)
handler
).
order
();
}
if
(
orderExcelWriteHandlerMap
.
containsKey
(
order
))
{
orderExcelWriteHandlerMap
.
get
(
order
).
add
(
handler
);
...
...
@@ -408,7 +420,7 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
for
(
Map
.
Entry
<
Integer
,
List
<
WriteHandler
>>
entry
:
orderExcelWriteHandlerMap
.
entrySet
())
{
for
(
WriteHandler
handler
:
entry
.
getValue
())
{
if
(
handler
instanceof
NotRepeatExecutor
)
{
String
uniqueValue
=
((
NotRepeatExecutor
)
handler
).
uniqueValue
();
String
uniqueValue
=
((
NotRepeatExecutor
)
handler
).
uniqueValue
();
if
(
alreadyExistedHandlerSet
.
contains
(
uniqueValue
))
{
continue
;
}
...
...
@@ -480,6 +492,15 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
this
.
writeHandlerMap
=
writeHandlerMap
;
}
public
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
getOwnWriteHandlerMap
()
{
return
ownWriteHandlerMap
;
}
public
void
setOwnWriteHandlerMap
(
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
ownWriteHandlerMap
)
{
this
.
ownWriteHandlerMap
=
ownWriteHandlerMap
;
}
public
ExcelWriteHeadProperty
getExcelWriteHeadProperty
()
{
return
excelWriteHeadProperty
;
}
...
...
@@ -554,6 +575,11 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
return
getWriteHandlerMap
();
}
@Override
public
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
ownWriteHandlerMap
()
{
return
getOwnWriteHandlerMap
();
}
@Override
public
boolean
needHead
()
{
return
getNeedHead
();
...
...
src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java
浏览文件 @
29a36b14
...
...
@@ -28,6 +28,13 @@ public interface WriteHolder extends ConfigurationHolder {
*/
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
writeHandlerMap
();
/**
* create your own write handler.
*
* @return
*/
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
ownWriteHandlerMap
();
/**
* Is to determine if a field needs to be ignored
*
...
...
src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java
浏览文件 @
29a36b14
...
...
@@ -11,6 +11,7 @@ import com.alibaba.excel.metadata.CellData;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.alibaba.excel.write.handler.SheetWriteHandler
;
import
com.alibaba.excel.write.handler.WorkbookWriteHandler
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
...
...
@@ -20,7 +21,7 @@ import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
*
* @author Jiaju Zhuang
*/
public
abstract
class
AbstractCellStyleStrategy
implements
CellWriteHandler
,
Sheet
WriteHandler
,
NotRepeatExecutor
{
public
abstract
class
AbstractCellStyleStrategy
implements
CellWriteHandler
,
Workbook
WriteHandler
,
NotRepeatExecutor
{
boolean
hasInitialized
=
false
;
@Override
...
...
@@ -60,16 +61,21 @@ public abstract class AbstractCellStyleStrategy implements CellWriteHandler, She
}
@Override
public
void
before
SheetCreate
(
WriteWorkbookHolder
writeWorkbookHolder
,
WriteSheetHolder
writeSheetHolder
)
{
public
void
before
WorkbookCreate
(
)
{
}
@Override
public
void
after
SheetCreate
(
WriteWorkbookHolder
writeWorkbookHolder
,
WriteSheetHolder
writeSheet
Holder
)
{
public
void
after
WorkbookCreate
(
WriteWorkbookHolder
writeWorkbook
Holder
)
{
initCellStyle
(
writeWorkbookHolder
.
getWorkbook
());
hasInitialized
=
true
;
}
@Override
public
void
afterWorkbookDispose
(
WriteWorkbookHolder
writeWorkbookHolder
)
{
}
/**
* Initialization cell style
*
...
...
src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData1.java
0 → 100644
浏览文件 @
29a36b14
package
com.alibaba.easyexcel.test.temp.simple
;
import
java.util.Date
;
import
org.apache.poi.ss.usermodel.FillPatternType
;
import
com.alibaba.excel.annotation.ExcelIgnore
;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
com.alibaba.excel.annotation.write.style.HeadStyle
;
import
lombok.Data
;
@Data
public
class
DemoData1
{
@ExcelProperty
(
"字符串标题"
)
@HeadStyle
(
fillPatternType
=
FillPatternType
.
SOLID_FOREGROUND
,
fillForegroundColor
=
42
)
private
String
string
;
@ExcelProperty
(
"日期标题"
)
private
Date
date
;
@ExcelProperty
(
"数字标题"
)
private
Double
doubleData
;
/**
* 忽略这个字段
*/
@ExcelIgnore
private
String
ignore
;
}
src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData2.java
0 → 100644
浏览文件 @
29a36b14
package
com.alibaba.easyexcel.test.temp.simple
;
import
java.util.Date
;
import
org.apache.poi.ss.usermodel.FillPatternType
;
import
com.alibaba.excel.annotation.ExcelIgnore
;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
com.alibaba.excel.annotation.write.style.HeadStyle
;
import
lombok.Data
;
@Data
public
class
DemoData2
{
@ExcelProperty
(
"字符串标题"
)
@HeadStyle
(
fillPatternType
=
FillPatternType
.
SOLID_FOREGROUND
,
fillForegroundColor
=
42
)
private
String
string
;
@ExcelProperty
(
"日期标题"
)
private
Date
date
;
@ExcelProperty
(
"数字标题"
)
private
Double
doubleData
;
/**
* 忽略这个字段
*/
@ExcelIgnore
private
String
ignore
;
}
src/test/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java
浏览文件 @
29a36b14
...
...
@@ -14,6 +14,9 @@ import com.alibaba.easyexcel.test.core.large.LargeData;
import
com.alibaba.easyexcel.test.demo.write.DemoData
;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.write.metadata.WriteSheet
;
import
com.alibaba.excel.write.metadata.WriteTable
;
import
com.alibaba.fastjson.JSON
;
import
net.sf.cglib.beans.BeanMap
;
...
...
@@ -75,6 +78,23 @@ public class Wirte {
}
@Test
public
void
tableWrite
()
{
String
fileName
=
TestFileUtil
.
getPath
()
+
"tableWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里直接写多个table的案例了,如果只有一个 也可以直一行代码搞定,参照其他案例
// 这里 需要指定写用哪个class去写
ExcelWriter
excelWriter
=
EasyExcel
.
write
(
fileName
).
build
();
// 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
"模板"
).
build
();
// 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要
WriteTable
writeTable0
=
EasyExcel
.
writerTable
(
0
).
head
(
DemoData1
.
class
).
build
();
// 第一次写入会创建头
excelWriter
.
write
(
data
(),
writeSheet
,
writeTable0
);
// 第二次写如也会创建头,然后在第一次的后面写入数据
/// 千万别忘记finish 会帮忙关闭流
excelWriter
.
finish
();
}
private
List
<
List
<
String
>>
head
()
{
List
<
List
<
String
>>
list
=
new
ArrayList
<
List
<
String
>>();
List
<
String
>
head0
=
new
ArrayList
<
String
>();
...
...
update.md
浏览文件 @
29a36b14
...
...
@@ -5,6 +5,7 @@
*
新增支持自定义转换器 入参可以为空 实现
`NullableObjectConverter`
即可
[
Issue #1084
](
https://github.com/alibaba/easyexcel/issues/1084
)
*
修复xls丢失结束标记的情况下 会漏读最后一行
*
修复填充的时候 多次
`forceNewRow`
空指针的bug
[
Issue #1201
](
https://github.com/alibaba/easyexcel/issues/1201
)
*
修复
`table`
、
`sheet`
中创建的拦截器不执行
`workbook`
事件的bug
[
Issue #1202
](
https://github.com/alibaba/easyexcel/issues/1202
)
# 2.2.0-beta2
*
修复最长匹配策略不同表格会有影响的bug
[
Issue #1010
](
https://github.com/alibaba/easyexcel/issues/1010
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录