Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_879456671
easyexcel
提交
051e5612
E
easyexcel
项目概览
qq_879456671
/
easyexcel
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
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,发现更多精彩内容 >>
提交
051e5612
编写于
5月 06, 2021
作者:
庄家钜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改完成底层基于新的celldata
上级
466287d4
变更
81
隐藏空白更改
内联
并排
Showing
81 changed file
with
1159 addition
and
1508 deletion
+1159
-1508
easyexcel
easyexcel
+0
-1
src/main/java/com/alibaba/excel/analysis/v03/handlers/BlankRecordHandler.java
...ibaba/excel/analysis/v03/handlers/BlankRecordHandler.java
+5
-5
src/main/java/com/alibaba/excel/analysis/v03/handlers/BoolErrRecordHandler.java
...aba/excel/analysis/v03/handlers/BoolErrRecordHandler.java
+5
-5
src/main/java/com/alibaba/excel/analysis/v03/handlers/DummyRecordHandler.java
...ibaba/excel/analysis/v03/handlers/DummyRecordHandler.java
+6
-6
src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelRecordHandler.java
...ibaba/excel/analysis/v03/handlers/LabelRecordHandler.java
+5
-5
src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelSstRecordHandler.java
...ba/excel/analysis/v03/handlers/LabelSstRecordHandler.java
+7
-7
src/main/java/com/alibaba/excel/analysis/v03/handlers/RkRecordHandler.java
.../alibaba/excel/analysis/v03/handlers/RkRecordHandler.java
+5
-5
src/main/java/com/alibaba/excel/annotation/write/style/HeadStyle.java
...a/com/alibaba/excel/annotation/write/style/HeadStyle.java
+0
-6
src/main/java/com/alibaba/excel/constant/OrderConstant.java
src/main/java/com/alibaba/excel/constant/OrderConstant.java
+12
-1
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
...main/java/com/alibaba/excel/context/WriteContextImpl.java
+2
-2
src/main/java/com/alibaba/excel/converters/WriteConverterContext.java
...a/com/alibaba/excel/converters/WriteConverterContext.java
+1
-0
src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java
...xcel/converters/bigdecimal/BigDecimalNumberConverter.java
+2
-3
src/main/java/com/alibaba/excel/converters/date/DateDateConverter.java
.../com/alibaba/excel/converters/date/DateDateConverter.java
+5
-4
src/main/java/com/alibaba/excel/event/Handler.java
src/main/java/com/alibaba/excel/event/Handler.java
+14
-1
src/main/java/com/alibaba/excel/metadata/AbstractHolder.java
src/main/java/com/alibaba/excel/metadata/AbstractHolder.java
+1
-1
src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java
.../com/alibaba/excel/metadata/AbstractParameterBuilder.java
+4
-4
src/main/java/com/alibaba/excel/metadata/data/ClientAnchorData.java
...ava/com/alibaba/excel/metadata/data/ClientAnchorData.java
+9
-7
src/main/java/com/alibaba/excel/metadata/data/CommentData.java
...ain/java/com/alibaba/excel/metadata/data/CommentData.java
+1
-9
src/main/java/com/alibaba/excel/metadata/data/CoordinateData.java
.../java/com/alibaba/excel/metadata/data/CoordinateData.java
+21
-4
src/main/java/com/alibaba/excel/metadata/data/HyperlinkData.java
...n/java/com/alibaba/excel/metadata/data/HyperlinkData.java
+9
-7
src/main/java/com/alibaba/excel/metadata/data/ImageData.java
src/main/java/com/alibaba/excel/metadata/data/ImageData.java
+3
-1
src/main/java/com/alibaba/excel/metadata/data/ReadCellData.java
...in/java/com/alibaba/excel/metadata/data/ReadCellData.java
+2
-0
src/main/java/com/alibaba/excel/metadata/data/RichTextStringData.java
...a/com/alibaba/excel/metadata/data/RichTextStringData.java
+1
-1
src/main/java/com/alibaba/excel/metadata/data/WriteCellData.java
...n/java/com/alibaba/excel/metadata/data/WriteCellData.java
+8
-2
src/main/java/com/alibaba/excel/metadata/property/ExcelContentProperty.java
...alibaba/excel/metadata/property/ExcelContentProperty.java
+4
-41
src/main/java/com/alibaba/excel/metadata/property/StyleProperty.java
...va/com/alibaba/excel/metadata/property/StyleProperty.java
+14
-189
src/main/java/com/alibaba/excel/read/builder/AbstractExcelReaderParameterBuilder.java
...cel/read/builder/AbstractExcelReaderParameterBuilder.java
+3
-4
src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java
...a/excel/read/processor/DefaultAnalysisEventProcessor.java
+6
-6
src/main/java/com/alibaba/excel/util/ClassUtils.java
src/main/java/com/alibaba/excel/util/ClassUtils.java
+13
-17
src/main/java/com/alibaba/excel/util/FileTypeUtils.java
src/main/java/com/alibaba/excel/util/FileTypeUtils.java
+13
-0
src/main/java/com/alibaba/excel/util/ListUtils.java
src/main/java/com/alibaba/excel/util/ListUtils.java
+15
-0
src/main/java/com/alibaba/excel/util/NumberUtils.java
src/main/java/com/alibaba/excel/util/NumberUtils.java
+1
-1
src/main/java/com/alibaba/excel/util/StyleUtil.java
src/main/java/com/alibaba/excel/util/StyleUtil.java
+82
-72
src/main/java/com/alibaba/excel/util/WorkBookUtil.java
src/main/java/com/alibaba/excel/util/WorkBookUtil.java
+6
-2
src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java
src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java
+53
-41
src/main/java/com/alibaba/excel/write/executor/AbstractExcelWriteExecutor.java
...baba/excel/write/executor/AbstractExcelWriteExecutor.java
+189
-61
src/main/java/com/alibaba/excel/write/executor/ExcelWriteAddExecutor.java
...m/alibaba/excel/write/executor/ExcelWriteAddExecutor.java
+10
-8
src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java
.../alibaba/excel/write/executor/ExcelWriteFillExecutor.java
+4
-4
src/main/java/com/alibaba/excel/write/handler/AbstractCellWriteHandler.java
...alibaba/excel/write/handler/AbstractCellWriteHandler.java
+6
-7
src/main/java/com/alibaba/excel/write/handler/CellWriteHandler.java
...ava/com/alibaba/excel/write/handler/CellWriteHandler.java
+47
-3
src/main/java/com/alibaba/excel/write/handler/DefaultWriteHandlerLoader.java
...libaba/excel/write/handler/DefaultWriteHandlerLoader.java
+15
-2
src/main/java/com/alibaba/excel/write/handler/RowWriteHandler.java
...java/com/alibaba/excel/write/handler/RowWriteHandler.java
+31
-0
src/main/java/com/alibaba/excel/write/handler/SheetWriteHandler.java
...va/com/alibaba/excel/write/handler/SheetWriteHandler.java
+19
-0
src/main/java/com/alibaba/excel/write/handler/WorkbookWriteHandler.java
...com/alibaba/excel/write/handler/WorkbookWriteHandler.java
+28
-0
src/main/java/com/alibaba/excel/write/handler/context/CellWriteHandlerContext.java
.../excel/write/handler/context/CellWriteHandlerContext.java
+69
-0
src/main/java/com/alibaba/excel/write/handler/context/RowWriteHandlerContext.java
...a/excel/write/handler/context/RowWriteHandlerContext.java
+52
-0
src/main/java/com/alibaba/excel/write/handler/context/SheetWriteHandlerContext.java
...excel/write/handler/context/SheetWriteHandlerContext.java
+30
-0
src/main/java/com/alibaba/excel/write/handler/context/WorkbookWriteHandlerContext.java
...el/write/handler/context/WorkbookWriteHandlerContext.java
+25
-0
src/main/java/com/alibaba/excel/write/handler/impl/DefaultRowWriteHandler.java
...baba/excel/write/handler/impl/DefaultRowWriteHandler.java
+5
-6
src/main/java/com/alibaba/excel/write/handler/impl/FillDataFormatCellWriteHandler.java
...el/write/handler/impl/FillDataFormatCellWriteHandler.java
+0
-76
src/main/java/com/alibaba/excel/write/handler/impl/FillStyleCellWriteHandler.java
...a/excel/write/handler/impl/FillStyleCellWriteHandler.java
+43
-0
src/main/java/com/alibaba/excel/write/merge/AbstractMergeStrategy.java
.../com/alibaba/excel/write/merge/AbstractMergeStrategy.java
+5
-9
src/main/java/com/alibaba/excel/write/metadata/WriteTable.java
...ain/java/com/alibaba/excel/write/metadata/WriteTable.java
+2
-23
src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java
...baba/excel/write/metadata/holder/AbstractWriteHolder.java
+4
-174
src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java
...baba/excel/write/metadata/holder/WriteWorkbookHolder.java
+58
-17
src/main/java/com/alibaba/excel/write/metadata/style/WriteCellStyle.java
...om/alibaba/excel/write/metadata/style/WriteCellStyle.java
+1
-10
src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java
.../alibaba/excel/write/style/AbstractCellStyleStrategy.java
+16
-47
src/main/java/com/alibaba/excel/write/style/AbstractVerticalCellStyleStrategy.java
.../excel/write/style/AbstractVerticalCellStyleStrategy.java
+20
-73
src/main/java/com/alibaba/excel/write/style/HorizontalCellStyleStrategy.java
...libaba/excel/write/style/HorizontalCellStyleStrategy.java
+9
-8
src/main/java/com/alibaba/excel/write/style/column/AbstractColumnWidthStyleStrategy.java
.../write/style/column/AbstractColumnWidthStyleStrategy.java
+17
-12
src/main/java/com/alibaba/excel/write/style/column/AbstractHeadColumnWidthStyleStrategy.java
...te/style/column/AbstractHeadColumnWidthStyleStrategy.java
+4
-4
src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java
...te/style/column/LongestMatchColumnWidthStyleStrategy.java
+10
-8
src/main/java/com/alibaba/excel/write/style/row/AbstractRowHeightStyleStrategy.java
...excel/write/style/row/AbstractRowHeightStyleStrategy.java
+9
-30
src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataListener.java
...ba/easyexcel/test/core/celldata/CellDataDataListener.java
+5
-5
src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataTest.java
...libaba/easyexcel/test/core/celldata/CellDataDataTest.java
+12
-10
src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityData.java
.../easyexcel/test/core/compatibility/CompatibilityData.java
+0
-16
src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityDataListener.java
...el/test/core/compatibility/CompatibilityDataListener.java
+0
-34
src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityDataTest.java
...yexcel/test/core/compatibility/CompatibilityDataTest.java
+0
-157
src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityParameterDataTest.java
...st/core/compatibility/CompatibilityParameterDataTest.java
+0
-142
src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityReadData.java
...yexcel/test/core/compatibility/CompatibilityReadData.java
+0
-12
src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterData.java
.../alibaba/easyexcel/test/core/converter/ConverterData.java
+2
-2
src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataTest.java
...baba/easyexcel/test/core/converter/ConverterDataTest.java
+7
-7
src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandler.java
...com/alibaba/easyexcel/test/core/handler/WriteHandler.java
+7
-10
src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataTest.java
.../com/alibaba/easyexcel/test/core/style/StyleDataTest.java
+15
-13
src/test/java/com/alibaba/easyexcel/test/demo/read/CustomStringStringConverter.java
...easyexcel/test/demo/read/CustomStringStringConverter.java
+6
-5
src/test/java/com/alibaba/easyexcel/test/demo/write/CustomCellWriteHandler.java
...aba/easyexcel/test/demo/write/CustomCellWriteHandler.java
+7
-7
src/test/java/com/alibaba/easyexcel/test/demo/write/CustomStringStringConverter.java
...asyexcel/test/demo/write/CustomStringStringConverter.java
+12
-17
src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatData.java
...libaba/easyexcel/test/temp/dataformat/DataFormatData.java
+4
-3
src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatTest.java
...libaba/easyexcel/test/temp/dataformat/DataFormatTest.java
+10
-10
src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadTest.java
...va/com/alibaba/easyexcel/test/temp/read/HeadReadTest.java
+4
-14
src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteCellHandler.java
.../alibaba/easyexcel/test/temp/simple/WriteCellHandler.java
+2
-2
未找到文件。
easyexcel
@
4076b897
Subproject commit 4076b897953b18f9e96c278c6929325e89f2be12
src/main/java/com/alibaba/excel/analysis/v03/handlers/BlankRecordHandler.java
浏览文件 @
051e5612
package
com.alibaba.excel.analysis.v03.handlers
;
import
org.apache.poi.hssf.record.BlankRecord
;
import
org.apache.poi.hssf.record.Record
;
import
com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler
;
import
com.alibaba.excel.context.xls.XlsReadContext
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.ReadCellData
;
import
org.apache.poi.hssf.record.BlankRecord
;
import
org.apache.poi.hssf.record.Record
;
/**
* Record handler
...
...
@@ -18,6 +18,6 @@ public class BlankRecordHandler extends AbstractXlsRecordHandler implements Igno
public
void
processRecord
(
XlsReadContext
xlsReadContext
,
Record
record
)
{
BlankRecord
br
=
(
BlankRecord
)
record
;
xlsReadContext
.
xlsReadSheetHolder
().
getCellMap
().
put
((
int
)
br
.
getColumn
(),
CellData
.
newEmptyInstance
(
br
.
getRow
(),
(
int
)
br
.
getColumn
()));
Read
CellData
.
newEmptyInstance
(
br
.
getRow
(),
(
int
)
br
.
getColumn
()));
}
}
src/main/java/com/alibaba/excel/analysis/v03/handlers/BoolErrRecordHandler.java
浏览文件 @
051e5612
package
com.alibaba.excel.analysis.v03.handlers
;
import
org.apache.poi.hssf.record.BoolErrRecord
;
import
org.apache.poi.hssf.record.Record
;
import
com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler
;
import
com.alibaba.excel.context.xls.XlsReadContext
;
import
com.alibaba.excel.enums.RowTypeEnum
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.ReadCellData
;
import
org.apache.poi.hssf.record.BoolErrRecord
;
import
org.apache.poi.hssf.record.Record
;
/**
* Record handler
...
...
@@ -19,7 +19,7 @@ public class BoolErrRecordHandler extends AbstractXlsRecordHandler implements Ig
public
void
processRecord
(
XlsReadContext
xlsReadContext
,
Record
record
)
{
BoolErrRecord
ber
=
(
BoolErrRecord
)
record
;
xlsReadContext
.
xlsReadSheetHolder
().
getCellMap
().
put
((
int
)
ber
.
getColumn
(),
CellData
.
newInstance
(
ber
.
getBooleanValue
(),
ber
.
getRow
(),
(
int
)
ber
.
getColumn
()));
Read
CellData
.
newInstance
(
ber
.
getBooleanValue
(),
ber
.
getRow
(),
(
int
)
ber
.
getColumn
()));
xlsReadContext
.
xlsReadSheetHolder
().
setTempRowType
(
RowTypeEnum
.
DATA
);
}
}
src/main/java/com/alibaba/excel/analysis/v03/handlers/DummyRecordHandler.java
浏览文件 @
051e5612
...
...
@@ -2,18 +2,18 @@ package com.alibaba.excel.analysis.v03.handlers;
import
java.util.LinkedHashMap
;
import
org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord
;
import
org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord
;
import
org.apache.poi.hssf.record.Record
;
import
com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler
;
import
com.alibaba.excel.context.xls.XlsReadContext
;
import
com.alibaba.excel.enums.RowTypeEnum
;
import
com.alibaba.excel.metadata.Cell
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.
Read
CellData
;
import
com.alibaba.excel.read.metadata.holder.ReadRowHolder
;
import
com.alibaba.excel.read.metadata.holder.xls.XlsReadSheetHolder
;
import
org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord
;
import
org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord
;
import
org.apache.poi.hssf.record.Record
;
/**
* Record handler
*
...
...
@@ -35,7 +35,7 @@ public class DummyRecordHandler extends AbstractXlsRecordHandler implements Igno
}
else
if
(
record
instanceof
MissingCellDummyRecord
)
{
MissingCellDummyRecord
mcdr
=
(
MissingCellDummyRecord
)
record
;
xlsReadSheetHolder
.
getCellMap
().
put
(
mcdr
.
getColumn
(),
CellData
.
newEmptyInstance
(
mcdr
.
getRow
(),
mcdr
.
getColumn
()));
Read
CellData
.
newEmptyInstance
(
mcdr
.
getRow
(),
mcdr
.
getColumn
()));
}
}
}
src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelRecordHandler.java
浏览文件 @
051e5612
package
com.alibaba.excel.analysis.v03.handlers
;
import
org.apache.poi.hssf.record.LabelRecord
;
import
org.apache.poi.hssf.record.Record
;
import
com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler
;
import
com.alibaba.excel.context.xls.XlsReadContext
;
import
com.alibaba.excel.enums.RowTypeEnum
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.ReadCellData
;
import
org.apache.poi.hssf.record.LabelRecord
;
import
org.apache.poi.hssf.record.Record
;
/**
* Record handler
...
...
@@ -22,7 +22,7 @@ public class LabelRecordHandler extends AbstractXlsRecordHandler implements Igno
data
=
data
.
trim
();
}
xlsReadContext
.
xlsReadSheetHolder
().
getCellMap
().
put
((
int
)
lrec
.
getColumn
(),
CellData
.
newInstance
(
data
,
lrec
.
getRow
(),
(
int
)
lrec
.
getColumn
()));
Read
CellData
.
newInstance
(
data
,
lrec
.
getRow
(),
(
int
)
lrec
.
getColumn
()));
xlsReadContext
.
xlsReadSheetHolder
().
setTempRowType
(
RowTypeEnum
.
DATA
);
}
}
src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelSstRecordHandler.java
浏览文件 @
051e5612
...
...
@@ -2,15 +2,15 @@ package com.alibaba.excel.analysis.v03.handlers;
import
java.util.Map
;
import
org.apache.poi.hssf.record.LabelSSTRecord
;
import
org.apache.poi.hssf.record.Record
;
import
com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler
;
import
com.alibaba.excel.cache.ReadCache
;
import
com.alibaba.excel.context.xls.XlsReadContext
;
import
com.alibaba.excel.enums.RowTypeEnum
;
import
com.alibaba.excel.metadata.Cell
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.ReadCellData
;
import
org.apache.poi.hssf.record.LabelSSTRecord
;
import
org.apache.poi.hssf.record.Record
;
/**
* Record handler
...
...
@@ -25,18 +25,18 @@ public class LabelSstRecordHandler extends AbstractXlsRecordHandler implements I
ReadCache
readCache
=
xlsReadContext
.
readWorkbookHolder
().
getReadCache
();
Map
<
Integer
,
Cell
>
cellMap
=
xlsReadContext
.
xlsReadSheetHolder
().
getCellMap
();
if
(
readCache
==
null
)
{
cellMap
.
put
((
int
)
lsrec
.
getColumn
(),
CellData
.
newEmptyInstance
(
lsrec
.
getRow
(),
(
int
)
lsrec
.
getColumn
()));
cellMap
.
put
((
int
)
lsrec
.
getColumn
(),
Read
CellData
.
newEmptyInstance
(
lsrec
.
getRow
(),
(
int
)
lsrec
.
getColumn
()));
return
;
}
String
data
=
readCache
.
get
(
lsrec
.
getSSTIndex
());
if
(
data
==
null
)
{
cellMap
.
put
((
int
)
lsrec
.
getColumn
(),
CellData
.
newEmptyInstance
(
lsrec
.
getRow
(),
(
int
)
lsrec
.
getColumn
()));
cellMap
.
put
((
int
)
lsrec
.
getColumn
(),
Read
CellData
.
newEmptyInstance
(
lsrec
.
getRow
(),
(
int
)
lsrec
.
getColumn
()));
return
;
}
if
(
xlsReadContext
.
currentReadHolder
().
globalConfiguration
().
getAutoTrim
())
{
data
=
data
.
trim
();
}
cellMap
.
put
((
int
)
lsrec
.
getColumn
(),
CellData
.
newInstance
(
data
,
lsrec
.
getRow
(),
(
int
)
lsrec
.
getColumn
()));
cellMap
.
put
((
int
)
lsrec
.
getColumn
(),
Read
CellData
.
newInstance
(
data
,
lsrec
.
getRow
(),
(
int
)
lsrec
.
getColumn
()));
xlsReadContext
.
xlsReadSheetHolder
().
setTempRowType
(
RowTypeEnum
.
DATA
);
}
}
src/main/java/com/alibaba/excel/analysis/v03/handlers/RkRecordHandler.java
浏览文件 @
051e5612
package
com.alibaba.excel.analysis.v03.handlers
;
import
org.apache.poi.hssf.record.RKRecord
;
import
org.apache.poi.hssf.record.Record
;
import
com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler
;
import
com.alibaba.excel.context.xls.XlsReadContext
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.ReadCellData
;
import
org.apache.poi.hssf.record.RKRecord
;
import
org.apache.poi.hssf.record.Record
;
/**
* Record handler
...
...
@@ -18,6 +18,6 @@ public class RkRecordHandler extends AbstractXlsRecordHandler implements Ignorab
public
void
processRecord
(
XlsReadContext
xlsReadContext
,
Record
record
)
{
RKRecord
re
=
(
RKRecord
)
record
;
xlsReadContext
.
xlsReadSheetHolder
().
getCellMap
().
put
((
int
)
re
.
getColumn
(),
CellData
.
newEmptyInstance
(
re
.
getRow
(),
(
int
)
re
.
getColumn
()));
Read
CellData
.
newEmptyInstance
(
re
.
getRow
(),
(
int
)
re
.
getColumn
()));
}
}
src/main/java/com/alibaba/excel/annotation/write/style/HeadStyle.java
浏览文件 @
051e5612
...
...
@@ -53,7 +53,6 @@ public @interface HeadStyle {
/**
* Set whether the text should be wrapped. Setting this flag to <code>true</code> make all content visible within a
* cell by displaying it on multiple lines
*
*/
boolean
wrapped
()
default
true
;
...
...
@@ -108,7 +107,6 @@ public @interface HeadStyle {
* Set the color to use for the right border
*
* @see IndexedColors
*
*/
short
rightBorderColor
()
default
-
1
;
...
...
@@ -116,7 +114,6 @@ public @interface HeadStyle {
* Set the color to use for the top border
*
* @see IndexedColors
*
*/
short
topBorderColor
()
default
-
1
;
...
...
@@ -124,7 +121,6 @@ public @interface HeadStyle {
* Set the color to use for the bottom border
*
* @see IndexedColors
*
*/
short
bottomBorderColor
()
default
-
1
;
...
...
@@ -139,7 +135,6 @@ public @interface HeadStyle {
* Set the background fill color.
*
* @see IndexedColors
*
*/
short
fillBackgroundColor
()
default
-
1
;
...
...
@@ -147,7 +142,6 @@ public @interface HeadStyle {
* Set the foreground fill color <i>Note: Ensure Foreground color is set prior to background color.</i>
*
* @see IndexedColors
*
*/
short
fillForegroundColor
()
default
-
1
;
...
...
src/main/java/com/alibaba/excel/constant/OrderConstant.java
浏览文件 @
051e5612
...
...
@@ -6,8 +6,19 @@ package com.alibaba.excel.constant;
* @author Jiaju Zhuang
*/
public
class
OrderConstant
{
/**
* Define style.
*/
public
static
final
int
DEFINE_STYLE
=
-
50000
;
/**
* default order.
*/
public
static
final
int
DEFAULT_ORDER
=
0
;
/**
* Sorting of styles written to cells.
*/
public
static
final
int
FILL_
DATA_FORMAT
=
1
0000
;
public
static
final
int
FILL_
STYLE
=
5
0000
;
}
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
浏览文件 @
051e5612
...
...
@@ -8,8 +8,8 @@ import java.util.UUID;
import
com.alibaba.excel.enums.WriteTypeEnum
;
import
com.alibaba.excel.exception.ExcelGenerateException
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.util.DateUtils
;
import
com.alibaba.excel.util.FileUtils
;
...
...
@@ -248,7 +248,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
,
(
WriteCellData
<?>
)
null
,
cell
,
head
,
relativeRowIndex
,
Boolean
.
TRUE
);
}
}
...
...
src/main/java/com/alibaba/excel/converters/WriteConverterContext.java
浏览文件 @
051e5612
...
...
@@ -3,6 +3,7 @@ package com.alibaba.excel.converters;
import
com.alibaba.excel.context.WriteContext
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
/**
...
...
src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java
浏览文件 @
051e5612
...
...
@@ -9,7 +9,6 @@ import com.alibaba.excel.metadata.data.ReadCellData;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.util.NumberUtils
;
import
com.alibaba.excel.write.metadata.holder.WriteHolder
;
/**
* BigDecimal and number converter
...
...
@@ -36,7 +35,7 @@ public class BigDecimalNumberConverter implements Converter<BigDecimal> {
@Override
public
WriteCellData
<?>
convertToExcelData
(
BigDecimal
value
,
ExcelContentProperty
contentProperty
,
WriteHolder
currentWriteHolder
)
{
return
NumberUtils
.
formatToCellData
(
value
,
contentProperty
,
currentWriteHolder
);
GlobalConfiguration
globalConfiguration
)
{
return
NumberUtils
.
formatToCellData
(
value
,
contentProperty
);
}
}
src/main/java/com/alibaba/excel/converters/date/DateDateConverter.java
浏览文件 @
051e5612
...
...
@@ -6,6 +6,7 @@ import com.alibaba.excel.converters.Converter;
import
com.alibaba.excel.metadata.GlobalConfiguration
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.util.DateUtils
;
import
com.alibaba.excel.util.WorkBookUtil
;
/**
...
...
@@ -23,11 +24,11 @@ public class DateDateConverter implements Converter<Date> {
public
WriteCellData
<?>
convertToExcelData
(
Date
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
throws
Exception
{
WriteCellData
<?>
cellData
=
new
WriteCellData
<>(
value
);
if
(
contentProperty
==
null
||
contentProperty
.
getDateTimeFormatProperty
()
==
null
||
contentProperty
.
getDateTimeFormatProperty
().
getFormat
()
=
=
null
)
{
return
cellData
;
String
format
=
null
;
if
(
contentProperty
!=
null
&&
contentProperty
.
getDateTimeFormatProperty
()
!
=
null
)
{
format
=
contentProperty
.
getDateTimeFormatProperty
().
getFormat
()
;
}
WorkBookUtil
.
fillDataFormat
(
cellData
,
contentProperty
.
getDateTimeFormatProperty
().
getFormat
()
);
WorkBookUtil
.
fillDataFormat
(
cellData
,
format
,
DateUtils
.
defaultDateFormat
);
return
cellData
;
}
}
src/main/java/com/alibaba/excel/event/Handler.java
浏览文件 @
051e5612
package
com.alibaba.excel.event
;
import
com.alibaba.excel.constant.OrderConstant
;
/**
* Intercepts handle some business logic
*
* @author Jiaju Zhuang
**/
public
interface
Handler
{}
public
interface
Handler
extends
Order
{
/**
* handler order
*
* @return order
*/
@Override
default
int
order
()
{
return
OrderConstant
.
DEFAULT_ORDER
;
}
}
src/main/java/com/alibaba/excel/metadata/AbstractHolder.java
浏览文件 @
051e5612
...
...
@@ -28,7 +28,7 @@ public abstract class AbstractHolder implements ConfigurationHolder {
/**
* You can only choose one of the {@link AbstractHolder#head} and {@link AbstractHolder#clazz}
*/
private
Class
clazz
;
private
Class
<?>
clazz
;
/**
* Some global variables
*/
...
...
src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java
浏览文件 @
051e5612
package
com.alibaba.excel.metadata
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Locale
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.util.ListUtils
;
/**
* ExcelBuilder
...
...
@@ -29,7 +29,7 @@ public abstract class AbstractParameterBuilder<T extends AbstractParameterBuilde
* @param clazz
* @return
*/
public
T
head
(
Class
clazz
)
{
public
T
head
(
Class
<?>
clazz
)
{
parameter
().
setClazz
(
clazz
);
return
self
();
}
...
...
@@ -40,9 +40,9 @@ public abstract class AbstractParameterBuilder<T extends AbstractParameterBuilde
* @param converter
* @return
*/
public
T
registerConverter
(
Converter
converter
)
{
public
T
registerConverter
(
Converter
<?>
converter
)
{
if
(
parameter
().
getCustomConverterList
()
==
null
)
{
parameter
().
setCustomConverterList
(
new
ArrayList
<
Converter
>
());
parameter
().
setCustomConverterList
(
ListUtils
.
newArrayList
());
}
parameter
().
getCustomConverterList
().
add
(
converter
);
return
self
();
...
...
src/main/java/com/alibaba/excel/metadata/data/ClientAnchorData.java
浏览文件 @
051e5612
package
com.alibaba.excel.metadata.data
;
import
lombok.Data
;
import
lombok.Getter
;
import
org.apache.poi.ss.usermodel.ClientAnchor
;
import
org.apache.poi.util.Internal
;
...
...
@@ -47,6 +48,7 @@ public class ClientAnchorData extends CoordinateData {
*/
private
AnchorType
anchorType
;
@Getter
public
enum
AnchorType
{
/**
* Move and Resize With Anchor Cells (0)
...
...
@@ -56,7 +58,7 @@ public class ClientAnchorData extends CoordinateData {
* object is anchored to the actual from and to row and column)
* </p>
*/
MOVE_AND_RESIZE
(
0
),
MOVE_AND_RESIZE
(
ClientAnchor
.
AnchorType
.
MOVE_AND_RESIZE
),
/**
* Don't Move but do Resize With Anchor Cells (1)
...
...
@@ -67,7 +69,7 @@ public class ClientAnchorData extends CoordinateData {
* </p>
* Note: Excel has no setting for this combination, nor does the ECMA standard.
*/
DONT_MOVE_DO_RESIZE
(
1
),
DONT_MOVE_DO_RESIZE
(
ClientAnchor
.
AnchorType
.
DONT_MOVE_DO_RESIZE
),
/**
* Move With Cells but Do Not Resize (2)
...
...
@@ -81,7 +83,7 @@ public class ClientAnchorData extends CoordinateData {
* the drawing shall move its to anchors as needed to maintain this same absolute size.
* </p>
*/
MOVE_DONT_RESIZE
(
2
),
MOVE_DONT_RESIZE
(
ClientAnchor
.
AnchorType
.
MOVE_DONT_RESIZE
),
/**
* Do Not Move or Resize With Underlying Rows/Columns (3)
...
...
@@ -96,13 +98,13 @@ public class ClientAnchorData extends CoordinateData {
* to maintain this same absolute position.
* </p>
*/
DONT_MOVE_AND_RESIZE
(
3
);
DONT_MOVE_AND_RESIZE
(
ClientAnchor
.
AnchorType
.
DONT_MOVE_AND_RESIZE
);
public
final
short
value
;
ClientAnchor
.
AnchorType
value
;
// disallow non-sequential enum instance creation
private
AnchorType
(
int
value
)
{
this
.
value
=
(
short
)
value
;
private
AnchorType
(
ClientAnchor
.
AnchorType
value
)
{
this
.
value
=
value
;
}
/**
...
...
src/main/java/com/alibaba/excel/metadata/data/CommentData.java
浏览文件 @
051e5612
...
...
@@ -8,15 +8,7 @@ import lombok.Data;
* @author Jiaju Zhuang
*/
@Data
public
class
CommentData
{
/**
* Row index
*/
private
Integer
rowIndex
;
/**
* Column index
*/
private
Integer
columnIndex
;
public
class
CommentData
extends
ClientAnchorData
{
/**
* Name of the original comment author
*/
...
...
src/main/java/com/alibaba/excel/metadata/data/CoordinateData.java
浏览文件 @
051e5612
...
...
@@ -10,19 +10,36 @@ import lombok.Data;
@Data
public
class
CoordinateData
{
/**
* first row index
* first row index
.Priority is higher than {@link #relativeFirstRowIndex}.
*/
private
Integer
firstRowIndex
;
/**
* first column index
* first column index
.Priority is higher than {@link #relativeFirstColumnIndex}.
*/
private
Integer
firstColumnIndex
;
/**
* last row index
* last row index
.Priority is higher than {@link #relativeLastRowIndex}.
*/
private
Integer
lastRowIndex
;
/**
* last column index
* last column index
.Priority is higher than {@link #relativeLastColumnIndex}.
*/
private
Integer
lastColumnIndex
;
/**
* relative first row index
*/
private
Integer
relativeFirstRowIndex
;
/**
* relative first column index
*/
private
Integer
relativeFirstColumnIndex
;
/**
* relative last row index
*/
private
Integer
relativeLastRowIndex
;
/**
*relative last column index
*/
private
Integer
relativeLastColumnIndex
;
}
src/main/java/com/alibaba/excel/metadata/data/HyperlinkData.java
浏览文件 @
051e5612
package
com.alibaba.excel.metadata.data
;
import
lombok.Data
;
import
lombok.Getter
;
/**
* hyperlink
...
...
@@ -18,35 +19,36 @@ public class HyperlinkData extends CoordinateData {
*/
private
HyperlinkType
hyperlinkType
;
@Getter
public
enum
HyperlinkType
{
/**
* Not a hyperlink
*/
NONE
(
-
1
),
NONE
(
org
.
apache
.
poi
.
common
.
usermodel
.
HyperlinkType
.
NONE
),
/**
* Link to an existing file or web page
*/
URL
(
1
),
URL
(
org
.
apache
.
poi
.
common
.
usermodel
.
HyperlinkType
.
URL
),
/**
* Link to a place in this document
*/
DOCUMENT
(
2
),
DOCUMENT
(
org
.
apache
.
poi
.
common
.
usermodel
.
HyperlinkType
.
DOCUMENT
),
/**
* Link to an E-mail address
*/
EMAIL
(
3
),
EMAIL
(
org
.
apache
.
poi
.
common
.
usermodel
.
HyperlinkType
.
EMAIL
),
/**
* Link to a file
*/
FILE
(
4
);
FILE
(
org
.
apache
.
poi
.
common
.
usermodel
.
HyperlinkType
.
FILE
);
public
final
int
value
;
org
.
apache
.
poi
.
common
.
usermodel
.
HyperlinkType
value
;
HyperlinkType
(
int
value
)
{
HyperlinkType
(
org
.
apache
.
poi
.
common
.
usermodel
.
HyperlinkType
value
)
{
this
.
value
=
value
;
}
}
...
...
src/main/java/com/alibaba/excel/metadata/data/ImageData.java
浏览文件 @
051e5612
package
com.alibaba.excel.metadata.data
;
import
lombok.Data
;
import
lombok.Getter
;
/**
* image
...
...
@@ -20,6 +21,7 @@ public class ImageData extends ClientAnchorData {
*/
private
ImageType
imageType
;
@Getter
public
enum
ImageType
{
/**
* Extended windows meta file
...
...
@@ -48,7 +50,7 @@ public class ImageData extends ClientAnchorData {
;
public
final
int
value
;
int
value
;
ImageType
(
int
value
)
{
this
.
value
=
value
;
...
...
src/main/java/com/alibaba/excel/metadata/data/ReadCellData.java
浏览文件 @
051e5612
...
...
@@ -5,6 +5,7 @@ import java.math.BigDecimal;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* read cell data
...
...
@@ -12,6 +13,7 @@ import lombok.Data;
* @author Jiaju Zhuang
*/
@Data
@NoArgsConstructor
public
class
ReadCellData
<
T
>
extends
CellData
<
T
>
{
/**
* data format.
...
...
src/main/java/com/alibaba/excel/metadata/data/RichTextStringData.java
浏览文件 @
051e5612
...
...
@@ -10,7 +10,7 @@ import lombok.Data;
import
lombok.NoArgsConstructor
;
/**
*
TODO
*
rich text string
*
* @author Jiaju Zhuang
*/
...
...
src/main/java/com/alibaba/excel/metadata/data/WriteCellData.java
浏览文件 @
051e5612
...
...
@@ -9,6 +9,7 @@ import com.alibaba.excel.util.ListUtils;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* wirte cell data
...
...
@@ -16,6 +17,7 @@ import lombok.Data;
* @author Jiaju Zhuang
*/
@Data
@NoArgsConstructor
public
class
WriteCellData
<
T
>
extends
CellData
<
T
>
{
/**
* Support only when writing.{@link CellDataTypeEnum#DATE}
...
...
@@ -42,11 +44,15 @@ public class WriteCellData<T> extends CellData<T> {
*/
private
WriteCellStyle
writeCellStyle
;
public
WriteCellData
(
String
stringValue
)
{
this
(
CellDataTypeEnum
.
STRING
,
stringValue
);
}
public
WriteCellData
(
CellDataTypeEnum
type
)
{
super
();
setType
(
type
);
}
public
WriteCellData
(
CellDataTypeEnum
type
,
String
stringValue
)
{
super
();
if
(
type
!=
CellDataTypeEnum
.
STRING
&&
type
!=
CellDataTypeEnum
.
ERROR
)
{
...
...
@@ -92,7 +98,7 @@ public class WriteCellData<T> extends CellData<T> {
throw
new
IllegalArgumentException
(
"Image can not be null"
);
}
setType
(
CellDataTypeEnum
.
EMPTY
);
this
.
imageDataList
=
ListUtils
.
newArrayList
();
this
.
imageDataList
=
ListUtils
.
newArrayList
();
ImageData
imageData
=
new
ImageData
();
imageData
.
setImage
(
image
);
imageDataList
.
add
(
imageData
);
...
...
src/main/java/com/alibaba/excel/metadata/property/ExcelContentProperty.java
浏览文件 @
051e5612
...
...
@@ -5,9 +5,12 @@ import java.lang.reflect.Field;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.metadata.Head
;
import
lombok.Data
;
/**
* @author jipengfei
*/
@Data
public
class
ExcelContentProperty
{
/**
* Java filed
...
...
@@ -20,47 +23,7 @@ public class ExcelContentProperty {
/**
* Custom defined converters
*/
private
Converter
converter
;
private
Converter
<?>
converter
;
private
DateTimeFormatProperty
dateTimeFormatProperty
;
private
NumberFormatProperty
numberFormatProperty
;
public
Field
getField
()
{
return
field
;
}
public
void
setField
(
Field
field
)
{
this
.
field
=
field
;
}
public
Head
getHead
()
{
return
head
;
}
public
void
setHead
(
Head
head
)
{
this
.
head
=
head
;
}
public
DateTimeFormatProperty
getDateTimeFormatProperty
()
{
return
dateTimeFormatProperty
;
}
public
void
setDateTimeFormatProperty
(
DateTimeFormatProperty
dateTimeFormatProperty
)
{
this
.
dateTimeFormatProperty
=
dateTimeFormatProperty
;
}
public
NumberFormatProperty
getNumberFormatProperty
()
{
return
numberFormatProperty
;
}
public
void
setNumberFormatProperty
(
NumberFormatProperty
numberFormatProperty
)
{
this
.
numberFormatProperty
=
numberFormatProperty
;
}
public
Converter
getConverter
()
{
return
converter
;
}
public
void
setConverter
(
Converter
converter
)
{
this
.
converter
=
converter
;
}
}
src/main/java/com/alibaba/excel/metadata/property/StyleProperty.java
浏览文件 @
051e5612
package
com.alibaba.excel.metadata.property
;
import
com.alibaba.excel.annotation.write.style.ContentStyle
;
import
com.alibaba.excel.annotation.write.style.HeadStyle
;
import
com.alibaba.excel.metadata.data.DataFormatData
;
import
com.alibaba.excel.write.metadata.style.WriteFont
;
import
lombok.Data
;
import
org.apache.poi.ss.usermodel.BorderStyle
;
import
org.apache.poi.ss.usermodel.BuiltinFormats
;
import
org.apache.poi.ss.usermodel.FillPatternType
;
...
...
@@ -8,20 +14,17 @@ import org.apache.poi.ss.usermodel.IgnoredErrorType;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
org.apache.poi.ss.usermodel.VerticalAlignment
;
import
com.alibaba.excel.annotation.write.style.ContentStyle
;
import
com.alibaba.excel.annotation.write.style.HeadStyle
;
import
com.alibaba.excel.write.metadata.style.WriteFont
;
/**
* Configuration from annotations
*
* @author Jiaju Zhuang
*/
@Data
public
class
StyleProperty
{
/**
* Set the data format (must be a valid format). Built in formats are defined at {@link BuiltinFormats}.
*/
private
Short
dataFormat
;
private
DataFormatData
dataFormatData
;
/**
* Set the font for this style
*/
...
...
@@ -48,7 +51,6 @@ public class StyleProperty {
/**
* Set whether the text should be wrapped. Setting this flag to <code>true</code> make all content visible within a
* cell by displaying it on multiple lines
*
*/
private
Boolean
wrapped
;
/**
...
...
@@ -96,7 +98,6 @@ public class StyleProperty {
* Set the color to use for the right border
*
* @see IndexedColors
*
*/
private
Short
rightBorderColor
;
...
...
@@ -104,14 +105,12 @@ public class StyleProperty {
* Set the color to use for the top border
*
* @see IndexedColors
*
*/
private
Short
topBorderColor
;
/**
* Set the color to use for the bottom border
*
* @see IndexedColors
*
*/
private
Short
bottomBorderColor
;
/**
...
...
@@ -125,7 +124,6 @@ public class StyleProperty {
* Set the background fill color.
*
* @see IndexedColors
*
*/
private
Short
fillBackgroundColor
;
...
...
@@ -133,7 +131,6 @@ public class StyleProperty {
* Set the foreground fill color <i>Note: Ensure Foreground color is set prior to background color.</i>
*
* @see IndexedColors
*
*/
private
Short
fillForegroundColor
;
/**
...
...
@@ -146,7 +143,9 @@ public class StyleProperty {
return
null
;
}
StyleProperty
styleProperty
=
new
StyleProperty
();
styleProperty
.
setDataFormat
(
headStyle
.
dataFormat
());
DataFormatData
dataFormatData
=
new
DataFormatData
();
dataFormatData
.
setIndex
(
headStyle
.
dataFormat
());
styleProperty
.
setDataFormatData
(
dataFormatData
);
styleProperty
.
setHidden
(
headStyle
.
hidden
());
styleProperty
.
setLocked
(
headStyle
.
locked
());
styleProperty
.
setQuotePrefix
(
headStyle
.
quotePrefix
());
...
...
@@ -175,7 +174,9 @@ public class StyleProperty {
return
null
;
}
StyleProperty
styleProperty
=
new
StyleProperty
();
styleProperty
.
setDataFormat
(
contentStyle
.
dataFormat
());
DataFormatData
dataFormatData
=
new
DataFormatData
();
dataFormatData
.
setIndex
(
contentStyle
.
dataFormat
());
styleProperty
.
setDataFormatData
(
dataFormatData
);
styleProperty
.
setHidden
(
contentStyle
.
hidden
());
styleProperty
.
setLocked
(
contentStyle
.
locked
());
styleProperty
.
setQuotePrefix
(
contentStyle
.
quotePrefix
());
...
...
@@ -198,180 +199,4 @@ public class StyleProperty {
styleProperty
.
setShrinkToFit
(
contentStyle
.
shrinkToFit
());
return
styleProperty
;
}
public
Short
getDataFormat
()
{
return
dataFormat
;
}
public
void
setDataFormat
(
Short
dataFormat
)
{
this
.
dataFormat
=
dataFormat
;
}
public
WriteFont
getWriteFont
()
{
return
writeFont
;
}
public
void
setWriteFont
(
WriteFont
writeFont
)
{
this
.
writeFont
=
writeFont
;
}
public
Boolean
getHidden
()
{
return
hidden
;
}
public
void
setHidden
(
Boolean
hidden
)
{
this
.
hidden
=
hidden
;
}
public
Boolean
getLocked
()
{
return
locked
;
}
public
void
setLocked
(
Boolean
locked
)
{
this
.
locked
=
locked
;
}
public
Boolean
getQuotePrefix
()
{
return
quotePrefix
;
}
public
void
setQuotePrefix
(
Boolean
quotePrefix
)
{
this
.
quotePrefix
=
quotePrefix
;
}
public
HorizontalAlignment
getHorizontalAlignment
()
{
return
horizontalAlignment
;
}
public
void
setHorizontalAlignment
(
HorizontalAlignment
horizontalAlignment
)
{
this
.
horizontalAlignment
=
horizontalAlignment
;
}
public
Boolean
getWrapped
()
{
return
wrapped
;
}
public
void
setWrapped
(
Boolean
wrapped
)
{
this
.
wrapped
=
wrapped
;
}
public
VerticalAlignment
getVerticalAlignment
()
{
return
verticalAlignment
;
}
public
void
setVerticalAlignment
(
VerticalAlignment
verticalAlignment
)
{
this
.
verticalAlignment
=
verticalAlignment
;
}
public
Short
getRotation
()
{
return
rotation
;
}
public
void
setRotation
(
Short
rotation
)
{
this
.
rotation
=
rotation
;
}
public
Short
getIndent
()
{
return
indent
;
}
public
void
setIndent
(
Short
indent
)
{
this
.
indent
=
indent
;
}
public
BorderStyle
getBorderLeft
()
{
return
borderLeft
;
}
public
void
setBorderLeft
(
BorderStyle
borderLeft
)
{
this
.
borderLeft
=
borderLeft
;
}
public
BorderStyle
getBorderRight
()
{
return
borderRight
;
}
public
void
setBorderRight
(
BorderStyle
borderRight
)
{
this
.
borderRight
=
borderRight
;
}
public
BorderStyle
getBorderTop
()
{
return
borderTop
;
}
public
void
setBorderTop
(
BorderStyle
borderTop
)
{
this
.
borderTop
=
borderTop
;
}
public
BorderStyle
getBorderBottom
()
{
return
borderBottom
;
}
public
void
setBorderBottom
(
BorderStyle
borderBottom
)
{
this
.
borderBottom
=
borderBottom
;
}
public
Short
getLeftBorderColor
()
{
return
leftBorderColor
;
}
public
void
setLeftBorderColor
(
Short
leftBorderColor
)
{
this
.
leftBorderColor
=
leftBorderColor
;
}
public
Short
getRightBorderColor
()
{
return
rightBorderColor
;
}
public
void
setRightBorderColor
(
Short
rightBorderColor
)
{
this
.
rightBorderColor
=
rightBorderColor
;
}
public
Short
getTopBorderColor
()
{
return
topBorderColor
;
}
public
void
setTopBorderColor
(
Short
topBorderColor
)
{
this
.
topBorderColor
=
topBorderColor
;
}
public
Short
getBottomBorderColor
()
{
return
bottomBorderColor
;
}
public
void
setBottomBorderColor
(
Short
bottomBorderColor
)
{
this
.
bottomBorderColor
=
bottomBorderColor
;
}
public
FillPatternType
getFillPatternType
()
{
return
fillPatternType
;
}
public
void
setFillPatternType
(
FillPatternType
fillPatternType
)
{
this
.
fillPatternType
=
fillPatternType
;
}
public
Short
getFillBackgroundColor
()
{
return
fillBackgroundColor
;
}
public
void
setFillBackgroundColor
(
Short
fillBackgroundColor
)
{
this
.
fillBackgroundColor
=
fillBackgroundColor
;
}
public
Short
getFillForegroundColor
()
{
return
fillForegroundColor
;
}
public
void
setFillForegroundColor
(
Short
fillForegroundColor
)
{
this
.
fillForegroundColor
=
fillForegroundColor
;
}
public
Boolean
getShrinkToFit
()
{
return
shrinkToFit
;
}
public
void
setShrinkToFit
(
Boolean
shrinkToFit
)
{
this
.
shrinkToFit
=
shrinkToFit
;
}
}
src/main/java/com/alibaba/excel/read/builder/AbstractExcelReaderParameterBuilder.java
浏览文件 @
051e5612
package
com.alibaba.excel.read.builder
;
import
java.util.ArrayList
;
import
com.alibaba.excel.metadata.AbstractParameterBuilder
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.metadata.ReadBasicParameter
;
import
com.alibaba.excel.util.ListUtils
;
/**
* Build ExcelBuilder
...
...
@@ -50,9 +49,9 @@ public abstract class AbstractExcelReaderParameterBuilder<T extends AbstractExce
* @param readListener
* @return
*/
public
T
registerReadListener
(
ReadListener
readListener
)
{
public
T
registerReadListener
(
ReadListener
<?>
readListener
)
{
if
(
parameter
().
getCustomReadListenerList
()
==
null
)
{
parameter
().
setCustomReadListenerList
(
new
ArrayList
<
ReadListener
>
());
parameter
().
setCustomReadListenerList
(
ListUtils
.
newArrayList
());
}
parameter
().
getCustomReadListenerList
().
add
(
readListener
);
return
self
();
...
...
src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java
浏览文件 @
051e5612
...
...
@@ -4,16 +4,13 @@ import java.util.HashMap;
import
java.util.List
;
import
java.util.Map
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.enums.HeadKindEnum
;
import
com.alibaba.excel.enums.RowTypeEnum
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.exception.ExcelAnalysisStopException
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.ReadCellData
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.metadata.holder.ReadRowHolder
;
...
...
@@ -21,6 +18,9 @@ import com.alibaba.excel.read.metadata.property.ExcelReadHeadProperty;
import
com.alibaba.excel.util.ConverterUtils
;
import
com.alibaba.excel.util.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
/**
* Analysis event
*
...
...
@@ -82,7 +82,7 @@ public class DefaultAnalysisEventProcessor implements AnalysisEventProcessor {
private
void
dealData
(
AnalysisContext
analysisContext
)
{
ReadRowHolder
readRowHolder
=
analysisContext
.
readRowHolder
();
Map
<
Integer
,
CellData
<?>>
cellDataMap
=
(
Map
)
readRowHolder
.
getCellMap
();
Map
<
Integer
,
Read
CellData
<?>>
cellDataMap
=
(
Map
)
readRowHolder
.
getCellMap
();
readRowHolder
.
setCurrentRowAnalysisResult
(
cellDataMap
);
int
rowIndex
=
readRowHolder
.
getRowIndex
();
int
currentHeadRowNumber
=
analysisContext
.
readSheetHolder
().
getHeadRowNumber
();
...
...
@@ -111,7 +111,7 @@ public class DefaultAnalysisEventProcessor implements AnalysisEventProcessor {
}
}
private
void
buildHead
(
AnalysisContext
analysisContext
,
Map
<
Integer
,
CellData
<?>>
cellDataMap
)
{
private
void
buildHead
(
AnalysisContext
analysisContext
,
Map
<
Integer
,
Read
CellData
<?>>
cellDataMap
)
{
if
(!
HeadKindEnum
.
CLASS
.
equals
(
analysisContext
.
currentReadHolder
().
excelReadHeadProperty
().
getHeadKind
()))
{
return
;
}
...
...
src/main/java/com/alibaba/excel/util/ClassUtils.java
浏览文件 @
051e5612
...
...
@@ -27,10 +27,9 @@ import com.alibaba.excel.write.metadata.holder.WriteHolder;
**/
public
class
ClassUtils
{
private
static
final
Map
<
Class
,
SoftReference
<
FieldCache
>>
FIELD_CACHE
=
new
ConcurrentHashMap
<
Class
,
SoftReference
<
FieldCache
>>();
private
static
final
Map
<
Class
<?>,
SoftReference
<
FieldCache
>>
FIELD_CACHE
=
new
ConcurrentHashMap
<>();
public
static
void
declaredFields
(
Class
clazz
,
Map
<
Integer
,
Field
>
sortedAllFiledMap
,
public
static
void
declaredFields
(
Class
<?>
clazz
,
Map
<
Integer
,
Field
>
sortedAllFiledMap
,
Map
<
Integer
,
Field
>
indexFiledMap
,
Map
<
String
,
Field
>
ignoreMap
,
Boolean
convertAllFiled
,
Boolean
needIgnore
,
Holder
holder
)
{
FieldCache
fieldCache
=
getFieldCache
(
clazz
,
convertAllFiled
);
...
...
@@ -54,7 +53,7 @@ public class ClassUtils {
int
index
=
0
;
for
(
Map
.
Entry
<
Integer
,
Field
>
entry
:
fieldCache
.
getSortedAllFiledMap
().
entrySet
())
{
Field
field
=
entry
.
getValue
();
if
(((
WriteHolder
)
holder
).
ignore
(
entry
.
getValue
().
getName
(),
entry
.
getKey
()))
{
if
(((
WriteHolder
)
holder
).
ignore
(
entry
.
getValue
().
getName
(),
entry
.
getKey
()))
{
if
(
ignoreMap
!=
null
)
{
ignoreMap
.
put
(
field
.
getName
(),
field
);
}
...
...
@@ -69,12 +68,12 @@ public class ClassUtils {
}
}
public
static
void
declaredFields
(
Class
clazz
,
Map
<
Integer
,
Field
>
sortedAllFiledMap
,
Boolean
convertAllFiled
,
public
static
void
declaredFields
(
Class
<?>
clazz
,
Map
<
Integer
,
Field
>
sortedAllFiledMap
,
Boolean
convertAllFiled
,
Boolean
needIgnore
,
WriteHolder
writeHolder
)
{
declaredFields
(
clazz
,
sortedAllFiledMap
,
null
,
null
,
convertAllFiled
,
needIgnore
,
writeHolder
);
}
private
static
FieldCache
getFieldCache
(
Class
clazz
,
Boolean
convertAllFiled
)
{
private
static
FieldCache
getFieldCache
(
Class
<?>
clazz
,
Boolean
convertAllFiled
)
{
if
(
clazz
==
null
)
{
return
null
;
}
...
...
@@ -92,12 +91,12 @@ public class ClassUtils {
return
FIELD_CACHE
.
get
(
clazz
).
get
();
}
private
static
void
declaredFields
(
Class
clazz
,
Boolean
convertAllFiled
)
{
List
<
Field
>
tempFieldList
=
new
ArrayList
<
Field
>();
Class
tempClass
=
clazz
;
private
static
void
declaredFields
(
Class
<?>
clazz
,
Boolean
convertAllFiled
)
{
List
<
Field
>
tempFieldList
=
new
ArrayList
<>();
Class
<?>
tempClass
=
clazz
;
// When the parent class is null, it indicates that the parent class (Object class) has reached the top
// level.
while
(
tempClass
!=
null
&&
tempClass
!=
BaseRowModel
.
class
)
{
while
(
tempClass
!=
null
)
{
Collections
.
addAll
(
tempFieldList
,
tempClass
.
getDeclaredFields
());
// Get the parent class and give it to yourself
tempClass
=
tempClass
.
getSuperclass
();
...
...
@@ -107,8 +106,7 @@ public class ClassUtils {
Map
<
Integer
,
Field
>
indexFiledMap
=
new
TreeMap
<
Integer
,
Field
>();
Map
<
String
,
Field
>
ignoreMap
=
new
HashMap
<
String
,
Field
>(
16
);
ExcelIgnoreUnannotated
excelIgnoreUnannotated
=
(
ExcelIgnoreUnannotated
)
clazz
.
getAnnotation
(
ExcelIgnoreUnannotated
.
class
);
ExcelIgnoreUnannotated
excelIgnoreUnannotated
=
clazz
.
getAnnotation
(
ExcelIgnoreUnannotated
.
class
);
for
(
Field
field
:
tempFieldList
)
{
declaredOneField
(
field
,
orderFiledMap
,
indexFiledMap
,
ignoreMap
,
excelIgnoreUnannotated
,
convertAllFiled
);
}
...
...
@@ -208,7 +206,6 @@ public class ClassUtils {
}
}
/**
* <p>Gets a {@code List} of all interfaces implemented by the given
* class and its superclasses.</p>
...
...
@@ -218,9 +215,9 @@ public class ClassUtils {
* superclass is considered in the same way. Later duplicates are ignored,
* so the order is maintained.</p>
*
* @param cls
the class to look up, may be {@code null}
* @param cls the class to look up, may be {@code null}
* @return the {@code List} of interfaces in order,
*
{@code null} if null input
* {@code null} if null input
*/
public
static
List
<
Class
<?>>
getAllInterfaces
(
final
Class
<?>
cls
)
{
if
(
cls
==
null
)
{
...
...
@@ -233,11 +230,10 @@ public class ClassUtils {
return
new
ArrayList
<>(
interfacesFound
);
}
/**
* Gets the interfaces for the specified class.
*
* @param cls the class to look up, may be {@code null}
* @param cls
the class to look up, may be {@code null}
* @param interfacesFound the {@code Set} of interfaces for the class
*/
private
static
void
getAllInterfaces
(
Class
<?>
cls
,
final
HashSet
<
Class
<?>>
interfacesFound
)
{
...
...
src/main/java/com/alibaba/excel/util/FileTypeUtils.java
浏览文件 @
051e5612
...
...
@@ -18,12 +18,25 @@ public class FileTypeUtils {
private
static
final
Map
<
String
,
ImageType
>
FILE_TYPE_MAP
;
/**
* Default image type
*/
public
static
ImageType
defaultImageType
=
ImageType
.
PICTURE_TYPE_PNG
;
static
{
FILE_TYPE_MAP
=
new
HashMap
<>();
FILE_TYPE_MAP
.
put
(
"ffd8ff"
,
ImageType
.
PICTURE_TYPE_JPEG
);
FILE_TYPE_MAP
.
put
(
"89504e47"
,
ImageType
.
PICTURE_TYPE_PNG
);
}
public
static
int
getImageTypeFormat
(
byte
[]
image
)
{
ImageType
imageType
=
getImageType
(
image
);
if
(
imageType
!=
null
)
{
return
imageType
.
getValue
();
}
return
defaultImageType
.
getValue
();
}
public
static
ImageType
getImageType
(
byte
[]
image
)
{
if
(
image
==
null
||
image
.
length
<=
IMAGE_TYPE_MARK_LENGTH
)
{
return
null
;
...
...
src/main/java/com/alibaba/excel/util/ListUtils.java
浏览文件 @
051e5612
...
...
@@ -2,6 +2,7 @@ package com.alibaba.excel.util;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.Iterator
;
import
java.util.List
;
...
...
@@ -27,6 +28,20 @@ public class ListUtils {
return
new
ArrayList
<>();
}
/**
* Creates a <i>mutable</i> {@code ArrayList} instance containing the given elements.
*
*/
public
static
<
E
>
ArrayList
<
E
>
newArrayList
(
E
...
elements
)
{
checkNotNull
(
elements
);
// Avoid integer overflow when a large array is passed in
int
capacity
=
computeArrayListCapacity
(
elements
.
length
);
ArrayList
<
E
>
list
=
new
ArrayList
<>(
capacity
);
Collections
.
addAll
(
list
,
elements
);
return
list
;
}
/**
* Creates a <i>mutable</i> {@code ArrayList} instance containing the given elements; a very thin
* shortcut for creating an empty list and then calling {@link Iterators#addAll}.
...
...
src/main/java/com/alibaba/excel/util/NumberUtils.java
浏览文件 @
051e5612
...
...
@@ -61,7 +61,7 @@ public class NumberUtils {
WriteCellData
<?>
cellData
=
new
WriteCellData
<>(
BigDecimal
.
valueOf
(
num
.
doubleValue
()));
if
(
contentProperty
!=
null
&&
contentProperty
.
getNumberFormatProperty
()
!=
null
&&
StringUtils
.
isNotBlank
(
contentProperty
.
getNumberFormatProperty
().
getFormat
()))
{
WorkBookUtil
.
fillDataFormat
(
cellData
,
contentProperty
.
getNumberFormatProperty
().
getFormat
());
WorkBookUtil
.
fillDataFormat
(
cellData
,
contentProperty
.
getNumberFormatProperty
().
getFormat
()
,
null
);
}
return
cellData
;
}
...
...
src/main/java/com/alibaba/excel/util/StyleUtil.java
浏览文件 @
051e5612
package
com.alibaba.excel.util
;
import
com.alibaba.excel.constant.BuiltinFormats
;
import
com.alibaba.excel.metadata.data.DataFormatData
;
import
com.alibaba.excel.metadata.data.HyperlinkData
;
import
com.alibaba.excel.metadata.data.RichTextStringData
;
import
com.alibaba.excel.metadata.data.RichTextStringData.IntervalFont
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
import
com.alibaba.excel.write.metadata.style.WriteFont
;
import
org.apache.poi.ss.usermodel.BorderStyle
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.poi.common.usermodel.HyperlinkType
;
import
org.apache.poi.hssf.usermodel.HSSFRichTextString
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.
FillPatternType
;
import
org.apache.poi.ss.usermodel.
DataFormat
;
import
org.apache.poi.ss.usermodel.Font
;
import
org.apache.poi.ss.usermodel.HorizontalAlignment
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
org.apache.poi.ss.usermodel.VerticalAlignment
;
import
org.apache.poi.ss.usermodel.RichTextString
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.xssf.streaming.SXSSFSheet
;
import
org.apache.poi.xssf.usermodel.XSSFCellStyle
;
import
org.apache.poi.xssf.usermodel.XSSFRichTextString
;
/**
* @author jipengfei
*/
public
class
StyleUtil
{
public
static
short
XSSF_DEFAULT_STYLE
=
0
;
public
static
short
HSSF_DEFAULT_STYLE
=
15
;
public
static
int
baseCoordinate
=
10000
;
private
StyleUtil
()
{}
/**
* @param workbook
* @return
*/
public
static
CellStyle
buildDefaultCellStyle
(
Workbook
workbook
)
{
CellStyle
newCellStyle
=
workbook
.
createCellStyle
();
newCellStyle
.
setWrapText
(
true
);
newCellStyle
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
newCellStyle
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
newCellStyle
.
setLocked
(
true
);
newCellStyle
.
setFillPattern
(
FillPatternType
.
SOLID_FOREGROUND
);
newCellStyle
.
setFillForegroundColor
(
IndexedColors
.
GREY_25_PERCENT
.
getIndex
());
newCellStyle
.
setBorderTop
(
BorderStyle
.
THIN
);
newCellStyle
.
setBorderBottom
(
BorderStyle
.
THIN
);
newCellStyle
.
setBorderLeft
(
BorderStyle
.
THIN
);
newCellStyle
.
setBorderRight
(
BorderStyle
.
THIN
);
return
newCellStyle
;
}
/**
* Build head cell style
*
* @param workbook
* @param writeCellStyle
* @return
*/
public
static
CellStyle
buildHeadCellStyle
(
Workbook
workbook
,
WriteCellStyle
writeCellStyle
)
{
CellStyle
cellStyle
=
buildDefaultCellStyle
(
workbook
);
if
(
writeCellStyle
==
null
)
{
return
cellStyle
;
}
buildCellStyle
(
workbook
,
cellStyle
,
writeCellStyle
,
true
);
return
cellStyle
;
}
/**
* Build content cell style
* Build cell style
*
* @param workbook
* @param writeCellStyle
* @return
*/
public
static
CellStyle
buildC
ontentC
ellStyle
(
Workbook
workbook
,
WriteCellStyle
writeCellStyle
)
{
public
static
CellStyle
buildCellStyle
(
Workbook
workbook
,
WriteCellStyle
writeCellStyle
)
{
CellStyle
cellStyle
=
workbook
.
createCellStyle
();
if
(
writeCellStyle
==
null
)
{
return
cellStyle
;
}
buildCellStyle
(
workbook
,
cellStyle
,
writeCellStyle
,
fals
e
);
buildCellStyle
(
cellStyle
,
writeCellStyl
e
);
return
cellStyle
;
}
private
static
void
buildCellStyle
(
Workbook
workbook
,
CellStyle
cellStyle
,
WriteCellStyle
writeCellStyle
,
boolean
isHead
)
{
buildFont
(
workbook
,
cellStyle
,
writeCellStyle
.
getWriteFont
(),
isHead
);
if
(
writeCellStyle
.
getDataFormat
()
!=
null
)
{
cellStyle
.
setDataFormat
(
writeCellStyle
.
getDataFormat
());
}
private
static
void
buildCellStyle
(
CellStyle
cellStyle
,
WriteCellStyle
writeCellStyle
)
{
if
(
writeCellStyle
.
getHidden
()
!=
null
)
{
cellStyle
.
setHidden
(
writeCellStyle
.
getHidden
());
}
...
...
@@ -143,21 +108,24 @@ public class StyleUtil {
}
}
private
static
void
buildFont
(
Workbook
workbook
,
CellStyle
cellStyle
,
WriteFont
writeFont
,
boolean
isHead
)
{
Font
font
=
null
;
if
(
isHead
)
{
font
=
workbook
.
createFont
();
font
.
setFontName
(
"宋体"
);
font
.
setFontHeightInPoints
((
short
)
14
);
font
.
setBold
(
true
);
cellStyle
.
setFont
(
font
);
public
static
short
buildDataFormat
(
Workbook
workbook
,
DataFormatData
dataFormatData
)
{
if
(
dataFormatData
==
null
)
{
return
BuiltinFormats
.
GENERAL
;
}
if
(
writeFont
==
null
)
{
return
;
if
(
dataFormatData
.
getIndex
()
!=
null
&&
dataFormatData
.
getIndex
()
>=
0
)
{
return
dataFormatData
.
getIndex
()
;
}
if
(!
isHead
)
{
font
=
workbook
.
createFont
();
cellStyle
.
setFont
(
font
);
if
(
StringUtils
.
isNotBlank
(
dataFormatData
.
getFormat
()))
{
DataFormat
dataFormatCreate
=
workbook
.
createDataFormat
();
return
dataFormatCreate
.
getFormat
(
dataFormatData
.
getFormat
());
}
return
BuiltinFormats
.
GENERAL
;
}
public
static
Font
buildFont
(
Workbook
workbook
,
WriteFont
writeFont
)
{
Font
font
=
workbook
.
createFont
();
if
(
writeFont
==
null
)
{
return
font
;
}
if
(
writeFont
.
getFontName
()
!=
null
)
{
font
.
setFontName
(
writeFont
.
getFontName
());
...
...
@@ -186,15 +154,57 @@ public class StyleUtil {
if
(
writeFont
.
getBold
()
!=
null
)
{
font
.
setBold
(
writeFont
.
getBold
());
}
return
font
;
}
public
static
RichTextString
buildRichTextString
(
WriteWorkbookHolder
writeWorkbookHolder
,
RichTextStringData
richTextStringData
)
{
if
(
richTextStringData
==
null
)
{
return
null
;
}
RichTextString
richTextString
;
if
(
writeWorkbookHolder
.
getExcelType
()
==
ExcelTypeEnum
.
XLSX
)
{
richTextString
=
new
XSSFRichTextString
(
richTextStringData
.
getTextString
());
}
else
{
richTextString
=
new
HSSFRichTextString
(
richTextStringData
.
getTextString
());
}
if
(
richTextStringData
.
getWriteFont
()
!=
null
)
{
richTextString
.
applyFont
(
writeWorkbookHolder
.
createFont
(
richTextStringData
.
getWriteFont
()));
}
if
(
CollectionUtils
.
isNotEmpty
(
richTextStringData
.
getIntervalFontList
()))
{
for
(
IntervalFont
intervalFont
:
richTextStringData
.
getIntervalFontList
())
{
richTextString
.
applyFont
(
intervalFont
.
getStartIndex
(),
intervalFont
.
getEndIndex
(),
writeWorkbookHolder
.
createFont
(
intervalFont
.
getWriteFont
()));
}
}
return
richTextString
;
}
public
static
boolean
isDefaultStyle
(
CellStyle
cellStyl
e
)
{
if
(
cellStyl
e
==
null
)
{
return
true
;
public
static
HyperlinkType
getHyperlinkType
(
HyperlinkData
.
HyperlinkType
hyperlinkTyp
e
)
{
if
(
hyperlinkTyp
e
==
null
)
{
return
HyperlinkType
.
NONE
;
}
if
(
cellStyle
instanceof
XSSFCellStyle
)
{
return
cellStyle
.
getIndex
()
==
XSSF_DEFAULT_STYLE
;
return
hyperlinkType
.
getValue
();
}
public
static
int
getCoordinate
(
Integer
coordinate
)
{
if
(
coordinate
==
null
)
{
return
0
;
}
return
baseCoordinate
*
coordinate
;
}
public
static
int
getCellCoordinate
(
Integer
currentCoordinate
,
Integer
absoluteCoordinate
,
Integer
relativeCoordinate
)
{
if
(
absoluteCoordinate
!=
null
&&
absoluteCoordinate
>
0
)
{
return
absoluteCoordinate
;
}
return
cellStyle
.
getIndex
()
==
HSSF_DEFAULT_STYLE
;
if
(
relativeCoordinate
!=
null
)
{
return
currentCoordinate
+
relativeCoordinate
;
}
return
currentCoordinate
;
}
}
src/main/java/com/alibaba/excel/util/WorkBookUtil.java
浏览文件 @
051e5612
...
...
@@ -94,7 +94,7 @@ public class WorkBookUtil {
return
cell
;
}
public
static
void
fillDataFormat
(
WriteCellData
<?>
cellData
,
String
format
)
{
public
static
void
fillDataFormat
(
WriteCellData
<?>
cellData
,
String
format
,
String
defaultFormat
)
{
if
(
cellData
.
getWriteCellStyle
()
==
null
)
{
cellData
.
setWriteCellStyle
(
new
WriteCellStyle
());
}
...
...
@@ -102,7 +102,11 @@ public class WorkBookUtil {
cellData
.
getWriteCellStyle
().
setDataFormatData
(
new
DataFormatData
());
}
if
(
cellData
.
getWriteCellStyle
().
getDataFormatData
().
getFormat
()
==
null
)
{
cellData
.
getWriteCellStyle
().
getDataFormatData
().
setFormat
(
format
);
if
(
format
==
null
)
{
cellData
.
getWriteCellStyle
().
getDataFormatData
().
setFormat
(
defaultFormat
);
}
else
{
cellData
.
getWriteCellStyle
().
getDataFormatData
().
setFormat
(
format
);
}
}
}
}
src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java
浏览文件 @
051e5612
package
com.alibaba.excel.util
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
com.alibaba.excel.context.WriteContext
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.alibaba.excel.write.handler.RowWriteHandler
;
import
com.alibaba.excel.write.handler.SheetWriteHandler
;
import
com.alibaba.excel.write.handler.WorkbookWriteHandler
;
import
com.alibaba.excel.write.handler.WriteHandler
;
import
com.alibaba.excel.write.handler.context.CellWriteHandlerContext
;
import
com.alibaba.excel.write.handler.context.RowWriteHandlerContext
;
import
com.alibaba.excel.write.handler.context.SheetWriteHandlerContext
;
import
com.alibaba.excel.write.handler.context.WorkbookWriteHandlerContext
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Row
;
...
...
@@ -34,9 +37,10 @@ public class WriteHandlerUtils {
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
WorkbookWriteHandlerContext
context
=
new
WorkbookWriteHandlerContext
(
writeContext
,
null
);
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
WorkbookWriteHandler
)
{
((
WorkbookWriteHandler
)
writeHandler
).
beforeWorkbookCreate
();
((
WorkbookWriteHandler
)
writeHandler
).
beforeWorkbookCreate
(
context
);
}
}
}
...
...
@@ -50,9 +54,11 @@ public class WriteHandlerUtils {
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
WorkbookWriteHandlerContext
context
=
new
WorkbookWriteHandlerContext
(
writeContext
,
writeContext
.
writeWorkbookHolder
());
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
WorkbookWriteHandler
)
{
((
WorkbookWriteHandler
)
writeHandler
).
afterWorkbookCreate
(
writeContext
.
writeWorkbookHolder
()
);
((
WorkbookWriteHandler
)
writeHandler
).
afterWorkbookCreate
(
context
);
}
}
}
...
...
@@ -63,9 +69,11 @@ public class WriteHandlerUtils {
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
WorkbookWriteHandlerContext
context
=
new
WorkbookWriteHandlerContext
(
writeContext
,
writeContext
.
writeWorkbookHolder
());
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
WorkbookWriteHandler
)
{
((
WorkbookWriteHandler
)
writeHandler
).
afterWorkbookDispose
(
writeContext
.
writeWorkbookHolder
()
);
((
WorkbookWriteHandler
)
writeHandler
).
afterWorkbookDispose
(
context
);
}
}
}
...
...
@@ -79,10 +87,11 @@ public class WriteHandlerUtils {
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
SheetWriteHandlerContext
context
=
new
SheetWriteHandlerContext
(
writeContext
,
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
());
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
SheetWriteHandler
)
{
((
SheetWriteHandler
)
writeHandler
).
beforeSheetCreate
(
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
());
((
SheetWriteHandler
)
writeHandler
).
beforeSheetCreate
(
context
);
}
}
}
...
...
@@ -96,16 +105,13 @@ public class WriteHandlerUtils {
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
SheetWriteHandlerContext
context
=
new
SheetWriteHandlerContext
(
writeContext
,
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
());
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
SheetWriteHandler
)
{
((
SheetWriteHandler
)
writeHandler
).
afterSheetCreate
(
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
());
((
SheetWriteHandler
)
writeHandler
).
afterSheetCreate
(
context
);
}
}
if
(
null
!=
writeContext
.
writeWorkbookHolder
().
getWriteWorkbook
().
getWriteHandler
())
{
writeContext
.
writeWorkbookHolder
().
getWriteWorkbook
().
getWriteHandler
()
.
sheet
(
writeContext
.
writeSheetHolder
().
getSheetNo
(),
writeContext
.
writeSheetHolder
().
getSheet
());
}
}
public
static
void
beforeCellCreate
(
WriteContext
writeContext
,
Row
row
,
Head
head
,
Integer
columnIndex
,
...
...
@@ -115,10 +121,12 @@ public class WriteHandlerUtils {
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
CellWriteHandlerContext
context
=
new
CellWriteHandlerContext
(
writeContext
,
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
row
,
null
,
columnIndex
,
relativeRowIndex
,
head
,
null
,
isHead
);
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
CellWriteHandler
)
{
((
CellWriteHandler
)
writeHandler
).
beforeCellCreate
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
row
,
head
,
columnIndex
,
relativeRowIndex
,
isHead
);
((
CellWriteHandler
)
writeHandler
).
beforeCellCreate
(
context
);
}
}
}
...
...
@@ -130,54 +138,57 @@ public class WriteHandlerUtils {
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
CellWriteHandlerContext
context
=
new
CellWriteHandlerContext
(
writeContext
,
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
cell
.
getRow
(),
cell
,
cell
.
getColumnIndex
(),
relativeRowIndex
,
head
,
null
,
isHead
);
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
CellWriteHandler
)
{
((
CellWriteHandler
)
writeHandler
).
afterCellCreate
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
cell
,
head
,
relativeRowIndex
,
isHead
);
((
CellWriteHandler
)
writeHandler
).
afterCellCreate
(
context
);
}
}
}
public
static
void
afterCellDataConverted
(
WriteContext
writeContext
,
CellData
cellData
,
Cell
cell
,
Head
head
,
public
static
void
afterCellDataConverted
(
WriteContext
writeContext
,
WriteCellData
<?>
cellData
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
List
<
WriteHandler
>
handlerList
=
writeContext
.
currentWriteHolder
().
writeHandlerMap
().
get
(
CellWriteHandler
.
class
);
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
List
<
WriteCellData
<?>>
cellDataList
=
cellData
==
null
?
null
:
ListUtils
.
newArrayList
(
cellData
);
CellWriteHandlerContext
context
=
new
CellWriteHandlerContext
(
writeContext
,
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
cell
.
getRow
(),
cell
,
cell
.
getColumnIndex
(),
relativeRowIndex
,
head
,
cellDataList
,
isHead
);
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
CellWriteHandler
)
{
((
CellWriteHandler
)
writeHandler
).
afterCellDataConverted
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
cellData
,
cell
,
head
,
relativeRowIndex
,
isHead
);
((
CellWriteHandler
)
writeHandler
).
afterCellDataConverted
(
context
);
}
}
}
public
static
void
afterCellDispose
(
WriteContext
writeContext
,
CellData
cellData
,
Cell
cell
,
Head
head
,
public
static
void
afterCellDispose
(
WriteContext
writeContext
,
WriteCellData
<?>
cellData
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
List
<
CellData
<?>>
cellDataList
=
new
ArrayList
<>();
if
(
cellData
!=
null
)
{
cellDataList
.
add
(
cellData
);
}
List
<
WriteCellData
<?>>
cellDataList
=
cellData
==
null
?
null
:
ListUtils
.
newArrayList
(
cellData
);
afterCellDispose
(
writeContext
,
cellDataList
,
cell
,
head
,
relativeRowIndex
,
isHead
);
}
public
static
void
afterCellDispose
(
WriteContext
writeContext
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
public
static
void
afterCellDispose
(
WriteContext
writeContext
,
List
<
WriteCellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
List
<
WriteHandler
>
handlerList
=
writeContext
.
currentWriteHolder
().
writeHandlerMap
().
get
(
CellWriteHandler
.
class
);
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
CellWriteHandlerContext
context
=
new
CellWriteHandlerContext
(
writeContext
,
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
cell
.
getRow
(),
cell
,
cell
.
getColumnIndex
(),
relativeRowIndex
,
head
,
cellDataList
,
isHead
);
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
CellWriteHandler
)
{
((
CellWriteHandler
)
writeHandler
).
afterCellDispose
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
cellDataList
,
cell
,
head
,
relativeRowIndex
,
isHead
);
((
CellWriteHandler
)
writeHandler
).
afterCellDispose
(
context
);
}
}
if
(
null
!=
writeContext
.
writeWorkbookHolder
().
getWriteWorkbook
().
getWriteHandler
())
{
writeContext
.
writeWorkbookHolder
().
getWriteWorkbook
().
getWriteHandler
().
cell
(
cell
.
getRowIndex
(),
cell
);
}
}
public
static
void
beforeRowCreate
(
WriteContext
writeContext
,
Integer
rowIndex
,
Integer
relativeRowIndex
,
...
...
@@ -186,10 +197,11 @@ public class WriteHandlerUtils {
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
RowWriteHandlerContext
context
=
new
RowWriteHandlerContext
(
writeContext
,
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
rowIndex
,
null
,
relativeRowIndex
,
isHead
);
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
RowWriteHandler
)
{
((
RowWriteHandler
)
writeHandler
).
beforeRowCreate
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
rowIndex
,
relativeRowIndex
,
isHead
);
((
RowWriteHandler
)
writeHandler
).
beforeRowCreate
(
context
);
}
}
}
...
...
@@ -199,13 +211,14 @@ public class WriteHandlerUtils {
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
RowWriteHandlerContext
context
=
new
RowWriteHandlerContext
(
writeContext
,
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
row
.
getRowNum
(),
row
,
relativeRowIndex
,
isHead
);
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
RowWriteHandler
)
{
((
RowWriteHandler
)
writeHandler
).
afterRowCreate
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
row
,
relativeRowIndex
,
isHead
);
((
RowWriteHandler
)
writeHandler
).
afterRowCreate
(
context
);
}
}
}
public
static
void
afterRowDispose
(
WriteContext
writeContext
,
Row
row
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
...
...
@@ -213,15 +226,14 @@ public class WriteHandlerUtils {
if
(
handlerList
==
null
||
handlerList
.
isEmpty
())
{
return
;
}
RowWriteHandlerContext
context
=
new
RowWriteHandlerContext
(
writeContext
,
writeContext
.
writeWorkbookHolder
(),
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
row
.
getRowNum
(),
row
,
relativeRowIndex
,
isHead
);
for
(
WriteHandler
writeHandler
:
handlerList
)
{
if
(
writeHandler
instanceof
RowWriteHandler
)
{
((
RowWriteHandler
)
writeHandler
).
afterRowDispose
(
writeContext
.
writeSheetHolder
(),
writeContext
.
writeTableHolder
(),
row
,
relativeRowIndex
,
isHead
);
((
RowWriteHandler
)
writeHandler
).
afterRowDispose
(
context
);
}
}
if
(
null
!=
writeContext
.
writeWorkbookHolder
().
getWriteWorkbook
().
getWriteHandler
())
{
writeContext
.
writeWorkbookHolder
().
getWriteWorkbook
().
getWriteHandler
().
row
(
row
.
getRowNum
(),
row
);
}
}
private
static
List
<
WriteHandler
>
getHandlerList
(
WriteContext
writeContext
,
Class
<?
extends
WriteHandler
>
clazz
,
...
...
src/main/java/com/alibaba/excel/write/executor/AbstractExcelWriteExecutor.java
浏览文件 @
051e5612
package
com.alibaba.excel.write.executor
;
import
java.util.List
;
import
com.alibaba.excel.context.WriteContext
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.converters.ConverterKeyBuild
;
import
com.alibaba.excel.converters.NullableObjectConverter
;
import
com.alibaba.excel.converters.WriteConverterContext
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.exception.ExcelDataConvertException
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.CommentData
;
import
com.alibaba.excel.metadata.data.FormulaData
;
import
com.alibaba.excel.metadata.data.HyperlinkData
;
import
com.alibaba.excel.metadata.data.ImageData
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.util.FileTypeUtils
;
import
com.alibaba.excel.util.StyleUtil
;
import
com.alibaba.excel.util.WriteHandlerUtils
;
import
com.alibaba.excel.write.metadata.holder.WriteHolder
;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.poi.hssf.usermodel.HSSFClientAnchor
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.ClientAnchor
;
import
org.apache.poi.ss.usermodel.Comment
;
import
org.apache.poi.ss.usermodel.CreationHelper
;
import
org.apache.poi.ss.usermodel.Drawing
;
import
org.apache.poi.ss.usermodel.Hyperlink
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.xssf.usermodel.XSSFClientAnchor
;
/**
* Excel write Executor
...
...
@@ -31,22 +47,35 @@ public abstract class AbstractExcelWriteExecutor implements ExcelWriteExecutor {
this
.
writeContext
=
writeContext
;
}
protected
CellData
<?>
converterAndSet
(
WriteHolder
currentWriteHolder
,
Class
<?>
clazz
,
CellDataTypeEnum
targetType
,
Cell
cell
,
Object
value
,
ExcelContentProperty
excelContentProperty
,
Head
head
,
Integer
relativeRowIndex
)
{
protected
WriteCellData
<?>
converterAndSet
(
WriteHolder
currentWriteHolder
,
Class
<?>
clazz
,
Cell
DataTypeEnum
targetType
,
Cell
cell
,
Object
value
,
ExcelContentProperty
excelContentProperty
,
Head
head
,
Integer
relativeRowIndex
)
{
boolean
needTrim
=
value
!=
null
&&
(
value
instanceof
String
&&
currentWriteHolder
.
globalConfiguration
()
.
getAutoTrim
());
if
(
needTrim
)
{
value
=
((
String
)
value
).
trim
();
}
CellData
<?>
cellData
=
convert
(
currentWriteHolder
,
clazz
,
targetType
,
cell
,
value
,
excelContentProperty
);
if
(
cellData
.
getFormula
()
!=
null
&&
cellData
.
getFormula
())
{
cell
.
setCellFormula
(
cellData
.
getFormulaValue
());
}
WriteCellData
<?>
cellData
=
convert
(
currentWriteHolder
,
clazz
,
targetType
,
cell
,
value
,
excelContentProperty
);
WriteHandlerUtils
.
afterCellDataConverted
(
writeContext
,
cellData
,
cell
,
head
,
relativeRowIndex
,
Boolean
.
FALSE
);
// Fill in picture information
fillImage
(
cell
,
cellData
.
getImageDataList
());
// Fill in comment information
fillComment
(
cell
,
cellData
.
getCommentData
());
// Fill in hyper link information
fillHyperLink
(
cell
,
cellData
.
getHyperlinkData
());
// Fill in formula information
fillFormula
(
cell
,
cellData
.
getFormulaData
());
// Fill in style information
fillStyle
(
cell
,
cellData
.
getWriteCellStyle
());
if
(
cellData
.
getType
()
==
null
)
{
cellData
.
setType
(
CellDataTypeEnum
.
EMPTY
);
}
WriteHandlerUtils
.
afterCellDataConverted
(
writeContext
,
cellData
,
cell
,
head
,
relativeRowIndex
,
Boolean
.
FALSE
);
switch
(
cellData
.
getType
())
{
case
STRING:
cell
.
setCellValue
(
cellData
.
getStringValue
());
...
...
@@ -60,8 +89,9 @@ public abstract class AbstractExcelWriteExecutor implements ExcelWriteExecutor {
case
DATE:
cell
.
setCellValue
(
cellData
.
getDateValue
());
return
cellData
;
case
IMAGE:
setImageValue
(
cellData
,
cell
);
case
RICH_TEXT_STRING:
cell
.
setCellValue
(
StyleUtil
.
buildRichTextString
(
writeContext
.
writeWorkbookHolder
(),
cellData
.
getRichTextStringDataValue
()));
return
cellData
;
case
EMPTY:
return
cellData
;
...
...
@@ -70,13 +100,131 @@ public abstract class AbstractExcelWriteExecutor implements ExcelWriteExecutor {
excelContentProperty
,
"Not supported data:"
+
value
+
" return type:"
+
cell
.
getCellType
()
+
"at row:"
+
cell
.
getRow
().
getRowNum
());
}
}
private
void
fillStyle
(
Cell
cell
,
WriteCellStyle
writeCellStyle
)
{
if
(
writeCellStyle
==
null
)
{
return
;
}
CellStyle
cellStyle
=
writeContext
.
writeWorkbookHolder
().
createCellStyle
(
writeCellStyle
);
cell
.
setCellStyle
(
cellStyle
);
}
private
void
fillFormula
(
Cell
cell
,
FormulaData
formulaData
)
{
if
(
formulaData
==
null
)
{
return
;
}
if
(
formulaData
.
getFormulaValue
()
!=
null
)
{
cell
.
setCellFormula
(
formulaData
.
getFormulaValue
());
}
}
private
void
fillHyperLink
(
Cell
cell
,
HyperlinkData
hyperlinkData
)
{
if
(
hyperlinkData
==
null
)
{
return
;
}
CreationHelper
helper
=
cell
.
getSheet
().
getWorkbook
().
getCreationHelper
();
Hyperlink
hyperlink
=
helper
.
createHyperlink
(
StyleUtil
.
getHyperlinkType
(
hyperlinkData
.
getHyperlinkType
()));
hyperlink
.
setAddress
(
hyperlinkData
.
getAddress
());
hyperlink
.
setFirstRow
(
StyleUtil
.
getCellCoordinate
(
cell
.
getRow
().
getRowNum
(),
hyperlinkData
.
getFirstRowIndex
(),
hyperlinkData
.
getRelativeFirstRowIndex
()));
hyperlink
.
setFirstColumn
(
StyleUtil
.
getCellCoordinate
(
cell
.
getColumnIndex
(),
hyperlinkData
.
getFirstColumnIndex
(),
hyperlinkData
.
getRelativeFirstColumnIndex
()));
hyperlink
.
setLastRow
(
StyleUtil
.
getCellCoordinate
(
cell
.
getRow
().
getRowNum
(),
hyperlinkData
.
getLastRowIndex
(),
hyperlinkData
.
getRelativeLastRowIndex
()));
hyperlink
.
setLastColumn
(
StyleUtil
.
getCellCoordinate
(
cell
.
getColumnIndex
(),
hyperlinkData
.
getLastColumnIndex
(),
hyperlinkData
.
getRelativeLastColumnIndex
()));
}
private
void
fillComment
(
Cell
cell
,
CommentData
commentData
)
{
if
(
commentData
==
null
)
{
return
;
}
ClientAnchor
anchor
;
if
(
writeContext
.
writeWorkbookHolder
().
getExcelType
()
==
ExcelTypeEnum
.
XLSX
)
{
anchor
=
new
XSSFClientAnchor
(
StyleUtil
.
getCoordinate
(
commentData
.
getLeft
()),
StyleUtil
.
getCoordinate
(
commentData
.
getTop
()),
StyleUtil
.
getCoordinate
(
commentData
.
getRight
()),
StyleUtil
.
getCoordinate
(
commentData
.
getBottom
()),
StyleUtil
.
getCellCoordinate
(
cell
.
getColumnIndex
(),
commentData
.
getFirstColumnIndex
(),
commentData
.
getRelativeFirstColumnIndex
()),
StyleUtil
.
getCellCoordinate
(
cell
.
getRow
().
getRowNum
(),
commentData
.
getFirstRowIndex
(),
commentData
.
getRelativeFirstRowIndex
()),
StyleUtil
.
getCellCoordinate
(
cell
.
getColumnIndex
(),
commentData
.
getLastColumnIndex
(),
commentData
.
getRelativeLastColumnIndex
()),
StyleUtil
.
getCellCoordinate
(
cell
.
getRow
().
getRowNum
(),
commentData
.
getLastRowIndex
(),
commentData
.
getRelativeLastRowIndex
()));
}
else
{
anchor
=
new
HSSFClientAnchor
(
StyleUtil
.
getCoordinate
(
commentData
.
getLeft
()),
StyleUtil
.
getCoordinate
(
commentData
.
getTop
()),
StyleUtil
.
getCoordinate
(
commentData
.
getRight
()),
StyleUtil
.
getCoordinate
(
commentData
.
getBottom
()),
(
short
)
StyleUtil
.
getCellCoordinate
(
cell
.
getColumnIndex
(),
commentData
.
getFirstColumnIndex
(),
commentData
.
getRelativeFirstColumnIndex
()),
StyleUtil
.
getCellCoordinate
(
cell
.
getRow
().
getRowNum
(),
commentData
.
getFirstRowIndex
(),
commentData
.
getRelativeFirstRowIndex
()),
(
short
)
StyleUtil
.
getCellCoordinate
(
cell
.
getColumnIndex
(),
commentData
.
getLastColumnIndex
(),
commentData
.
getRelativeLastColumnIndex
()),
StyleUtil
.
getCellCoordinate
(
cell
.
getRow
().
getRowNum
(),
commentData
.
getLastRowIndex
(),
commentData
.
getRelativeLastRowIndex
()));
}
Comment
comment
=
cell
.
getSheet
().
createDrawingPatriarch
().
createCellComment
(
anchor
);
if
(
commentData
.
getRichTextStringData
()
!=
null
)
{
comment
.
setString
(
StyleUtil
.
buildRichTextString
(
writeContext
.
writeWorkbookHolder
(),
commentData
.
getRichTextStringData
()));
}
if
(
commentData
.
getAuthor
()
!=
null
)
{
comment
.
setAuthor
(
commentData
.
getAuthor
());
}
}
protected
CellData
<?>
convert
(
WriteHolder
currentWriteHolder
,
Class
<?>
clazz
,
CellDataTypeEnum
targetType
,
protected
void
fillImage
(
Cell
cell
,
List
<
ImageData
>
imageDataList
)
{
if
(
CollectionUtils
.
isEmpty
(
imageDataList
))
{
return
;
}
Sheet
sheet
=
cell
.
getSheet
();
Drawing
<?>
drawing
=
sheet
.
getDrawingPatriarch
();
if
(
drawing
==
null
)
{
drawing
=
sheet
.
createDrawingPatriarch
();
}
CreationHelper
helper
=
sheet
.
getWorkbook
().
getCreationHelper
();
for
(
ImageData
imageData
:
imageDataList
)
{
int
index
=
sheet
.
getWorkbook
().
addPicture
(
imageData
.
getImage
(),
FileTypeUtils
.
getImageTypeFormat
(
imageData
.
getImage
()));
ClientAnchor
anchor
=
helper
.
createClientAnchor
();
if
(
imageData
.
getTop
()
!=
null
)
{
anchor
.
setDy1
(
StyleUtil
.
getCoordinate
(
imageData
.
getTop
()));
}
if
(
imageData
.
getRight
()
!=
null
)
{
anchor
.
setDx2
(
StyleUtil
.
getCoordinate
(
imageData
.
getRight
()));
}
if
(
imageData
.
getBottom
()
!=
null
)
{
anchor
.
setDy2
(
StyleUtil
.
getCoordinate
(
imageData
.
getBottom
()));
}
if
(
imageData
.
getLeft
()
!=
null
)
{
anchor
.
setDx1
(
StyleUtil
.
getCoordinate
(
imageData
.
getLeft
()));
}
anchor
.
setRow1
(
StyleUtil
.
getCellCoordinate
(
cell
.
getRow
().
getRowNum
(),
imageData
.
getFirstRowIndex
(),
imageData
.
getRelativeFirstRowIndex
()));
anchor
.
setCol1
(
StyleUtil
.
getCellCoordinate
(
cell
.
getColumnIndex
(),
imageData
.
getFirstColumnIndex
(),
imageData
.
getRelativeFirstColumnIndex
()));
anchor
.
setRow2
(
StyleUtil
.
getCellCoordinate
(
cell
.
getRow
().
getRowNum
(),
imageData
.
getLastRowIndex
(),
imageData
.
getRelativeLastRowIndex
()));
anchor
.
setCol2
(
StyleUtil
.
getCellCoordinate
(
cell
.
getColumnIndex
(),
imageData
.
getLastColumnIndex
(),
imageData
.
getRelativeLastColumnIndex
()));
if
(
imageData
.
getAnchorType
()
!=
null
)
{
anchor
.
setAnchorType
(
imageData
.
getAnchorType
().
getValue
());
}
drawing
.
createPicture
(
anchor
,
index
);
}
}
protected
WriteCellData
<?>
convert
(
WriteHolder
currentWriteHolder
,
Class
<?>
clazz
,
CellDataTypeEnum
targetType
,
Cell
cell
,
Object
value
,
ExcelContentProperty
excelContentProperty
)
{
// This means that the user has defined the data.
if
(
value
instanceof
CellData
)
{
CellData
<?>
cellDataValue
=
(
CellData
<?>)
value
;
if
(
value
instanceof
Write
CellData
)
{
WriteCellData
<?>
cellDataValue
=
(
Write
CellData
<?>)
value
;
if
(
cellDataValue
.
getType
()
!=
null
)
{
return
cellDataValue
;
}
else
{
...
...
@@ -85,21 +233,33 @@ public abstract class AbstractExcelWriteExecutor implements ExcelWriteExecutor {
return
cellDataValue
;
}
}
CellData
<?>
cellDataReturn
=
doConvert
(
currentWriteHolder
,
cellDataValue
.
getData
().
getClass
(),
targetType
,
cell
,
cellDataValue
.
getData
(),
excelContentProperty
);
WriteCellData
<?>
cellDataReturn
=
doConvert
(
currentWriteHolder
,
cellDataValue
.
getData
().
getClass
(),
targetType
,
cell
,
cellDataValue
.
getData
(),
excelContentProperty
);
if
(
cellDataValue
.
getImageDataList
()
!=
null
)
{
cellDataReturn
.
setImageDataList
(
cellDataValue
.
getImageDataList
());
}
if
(
cellDataValue
.
getCommentData
()
!=
null
)
{
cellDataReturn
.
setCommentData
(
cellDataValue
.
getCommentData
());
}
if
(
cellDataValue
.
getHyperlinkData
()
!=
null
)
{
cellDataReturn
.
setHyperlinkData
(
cellDataValue
.
getHyperlinkData
());
}
// The formula information is subject to user input
if
(
cellDataValue
.
getFormula
()
!=
null
)
{
cellDataReturn
.
setFormula
(
cellDataValue
.
getFormula
());
cellDataReturn
.
setFormulaValue
(
cellDataValue
.
getFormulaValue
());
if
(
cellDataValue
.
getFormulaData
()
!=
null
)
{
cellDataReturn
.
setFormulaData
(
cellDataValue
.
getFormulaData
());
}
if
(
cellDataValue
.
getWriteCellStyle
()
!=
null
)
{
cellDataReturn
.
setWriteCellStyle
(
cellDataValue
.
getWriteCellStyle
());
}
return
cellDataReturn
;
}
return
doConvert
(
currentWriteHolder
,
clazz
,
targetType
,
cell
,
value
,
excelContentProperty
);
}
private
CellData
<?>
doConvert
(
WriteHolder
currentWriteHolder
,
Class
<?>
clazz
,
CellDataTypeEnum
targetType
,
private
Write
CellData
<?>
doConvert
(
WriteHolder
currentWriteHolder
,
Class
<?>
clazz
,
CellDataTypeEnum
targetType
,
Cell
cell
,
Object
value
,
ExcelContentProperty
excelContentProperty
)
{
Converter
converter
=
null
;
Converter
<?>
converter
=
null
;
if
(
excelContentProperty
!=
null
)
{
converter
=
excelContentProperty
.
getConverter
();
}
...
...
@@ -108,58 +268,26 @@ public abstract class AbstractExcelWriteExecutor implements ExcelWriteExecutor {
}
if
(
converter
==
null
)
{
throw
new
ExcelDataConvertException
(
cell
.
getRow
().
getRowNum
(),
cell
.
getColumnIndex
(),
new
CellData
<>(
CellDataTypeEnum
.
EMPTY
),
excelContentProperty
,
new
Write
CellData
<>(
CellDataTypeEnum
.
EMPTY
),
excelContentProperty
,
"Can not find 'Converter' support class "
+
clazz
.
getSimpleName
()
+
"."
);
}
if
(
value
==
null
&&
!(
converter
instanceof
NullableObjectConverter
))
{
return
new
CellData
<>(
CellDataTypeEnum
.
EMPTY
);
return
new
Write
CellData
<>(
CellDataTypeEnum
.
EMPTY
);
}
CellData
<?>
cellData
;
Write
CellData
<?>
cellData
;
try
{
cellData
=
converter
.
convertToExcelData
(
value
,
excelContentProperty
,
currentWriteHolder
);
cellData
=
((
Converter
<
Object
>)
converter
).
convertToExcelData
(
new
WriteConverterContext
<>(
value
,
excelContentProperty
,
writeContext
));
}
catch
(
Exception
e
)
{
throw
new
ExcelDataConvertException
(
cell
.
getRow
().
getRowNum
(),
cell
.
getColumnIndex
(),
new
CellData
<>(
CellDataTypeEnum
.
EMPTY
),
excelContentProperty
,
new
Write
CellData
<>(
CellDataTypeEnum
.
EMPTY
),
excelContentProperty
,
"Convert data:"
+
value
+
" error,at row:"
+
cell
.
getRow
().
getRowNum
(),
e
);
}
if
(
cellData
==
null
||
cellData
.
getType
()
==
null
)
{
throw
new
ExcelDataConvertException
(
cell
.
getRow
().
getRowNum
(),
cell
.
getColumnIndex
(),
new
CellData
<>(
CellDataTypeEnum
.
EMPTY
),
excelContentProperty
,
new
Write
CellData
<>(
CellDataTypeEnum
.
EMPTY
),
excelContentProperty
,
"Convert data:"
+
value
+
" return null,at row:"
+
cell
.
getRow
().
getRowNum
());
}
return
cellData
;
}
private
void
setImageValue
(
CellData
<?>
cellData
,
Cell
cell
)
{
Sheet
sheet
=
cell
.
getSheet
();
int
index
=
sheet
.
getWorkbook
().
addPicture
(
cellData
.
getImageValue
(),
HSSFWorkbook
.
PICTURE_TYPE_PNG
);
Drawing
drawing
=
sheet
.
getDrawingPatriarch
();
if
(
drawing
==
null
)
{
drawing
=
sheet
.
createDrawingPatriarch
();
}
CreationHelper
helper
=
sheet
.
getWorkbook
().
getCreationHelper
();
ClientAnchor
anchor
=
helper
.
createClientAnchor
();
if
(
cellData
.
getUseImagePositionProperty
())
{
anchor
.
setDx1
(
cellData
.
getImagePositionProperty
().
getDx1
());
anchor
.
setDx2
(
cellData
.
getImagePositionProperty
().
getDx2
());
anchor
.
setDy1
(
cellData
.
getImagePositionProperty
().
getDy1
());
anchor
.
setDy2
(
cellData
.
getImagePositionProperty
().
getDy2
());
anchor
.
setCol1
(
cellData
.
getImagePositionProperty
().
getCol1
());
anchor
.
setCol2
(
cellData
.
getImagePositionProperty
().
getCol2
());
anchor
.
setRow1
(
cellData
.
getImagePositionProperty
().
getRow1
());
anchor
.
setRow2
(
cellData
.
getImagePositionProperty
().
getRow2
());
anchor
.
setAnchorType
(
ClientAnchor
.
AnchorType
.
MOVE_AND_RESIZE
);
}
else
{
anchor
.
setDx1
(
0
);
anchor
.
setDx2
(
0
);
anchor
.
setDy1
(
0
);
anchor
.
setDy2
(
0
);
anchor
.
setCol1
(
cell
.
getColumnIndex
());
anchor
.
setCol2
(
cell
.
getColumnIndex
()
+
1
);
anchor
.
setRow1
(
cell
.
getRowIndex
());
anchor
.
setRow2
(
cell
.
getRowIndex
()
+
1
);
anchor
.
setAnchorType
(
ClientAnchor
.
AnchorType
.
DONT_MOVE_AND_RESIZE
);
}
drawing
.
createPicture
(
anchor
,
index
);
}
}
src/main/java/com/alibaba/excel/write/executor/ExcelWriteAddExecutor.java
浏览文件 @
051e5612
...
...
@@ -10,8 +10,8 @@ import java.util.TreeMap;
import
com.alibaba.excel.context.WriteContext
;
import
com.alibaba.excel.enums.HeadKindEnum
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.util.ClassUtils
;
import
com.alibaba.excel.util.FieldUtils
;
...
...
@@ -106,14 +106,14 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor {
}
}
private
void
doAddBasicTypeToExcel
(
RowData
oneRowData
,
Head
head
,
Row
row
,
int
relativeRowIndex
,
int
dataIndex
,
private
void
doAddBasicTypeToExcel
(
RowData
oneRowData
,
Head
head
,
Row
row
,
int
relativeRowIndex
,
int
dataIndex
,
int
cellIndex
)
{
WriteHandlerUtils
.
beforeCellCreate
(
writeContext
,
row
,
head
,
cellIndex
,
relativeRowIndex
,
Boolean
.
FALSE
);
Cell
cell
=
WorkBookUtil
.
createCell
(
row
,
cellIndex
);
WriteHandlerUtils
.
afterCellCreate
(
writeContext
,
cell
,
head
,
relativeRowIndex
,
Boolean
.
FALSE
);
Object
value
=
oneRowData
.
get
(
dataIndex
);
CellData
cellData
=
converterAndSet
(
writeContext
.
currentWriteHolder
(),
value
==
null
?
null
:
value
.
getClass
(),
WriteCellData
<?>
cellData
=
converterAndSet
(
writeContext
.
currentWriteHolder
(),
value
==
null
?
null
:
value
.
getClass
(),
null
,
cell
,
value
,
null
,
head
,
relativeRowIndex
);
WriteHandlerUtils
.
afterCellDispose
(
writeContext
,
cellData
,
cell
,
head
,
relativeRowIndex
,
Boolean
.
FALSE
);
}
...
...
@@ -123,7 +123,7 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor {
WriteHolder
currentWriteHolder
=
writeContext
.
currentWriteHolder
();
BeanMap
beanMap
=
BeanMap
.
create
(
oneRowData
);
Set
<
String
>
beanMapHandledSet
=
new
HashSet
<
String
>();
int
cellIndex
=
0
;
int
cellIndex
;
// If it's a class it needs to be cast by type
if
(
HeadKindEnum
.
CLASS
.
equals
(
writeContext
.
currentWriteHolder
().
excelWriteHeadProperty
().
getHeadKind
()))
{
Map
<
Integer
,
Head
>
headMap
=
writeContext
.
currentWriteHolder
().
excelWriteHeadProperty
().
getHeadMap
();
...
...
@@ -141,7 +141,8 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor {
Cell
cell
=
WorkBookUtil
.
createCell
(
row
,
cellIndex
);
WriteHandlerUtils
.
afterCellCreate
(
writeContext
,
cell
,
head
,
relativeRowIndex
,
Boolean
.
FALSE
);
Object
value
=
beanMap
.
get
(
name
);
CellData
<?>
cellData
=
converterAndSet
(
currentWriteHolder
,
excelContentProperty
.
getField
().
getType
(),
WriteCellData
<?>
cellData
=
converterAndSet
(
currentWriteHolder
,
excelContentProperty
.
getField
().
getType
(),
null
,
cell
,
value
,
excelContentProperty
,
head
,
relativeRowIndex
);
WriteHandlerUtils
.
afterCellDispose
(
writeContext
,
cellData
,
cell
,
head
,
relativeRowIndex
,
Boolean
.
FALSE
);
...
...
@@ -167,13 +168,14 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor {
WriteHandlerUtils
.
beforeCellCreate
(
writeContext
,
row
,
null
,
cellIndex
,
relativeRowIndex
,
Boolean
.
FALSE
);
Cell
cell
=
WorkBookUtil
.
createCell
(
row
,
cellIndex
);
WriteHandlerUtils
.
afterCellCreate
(
writeContext
,
cell
,
null
,
relativeRowIndex
,
Boolean
.
FALSE
);
CellData
<?>
cellData
=
converterAndSet
(
currentWriteHolder
,
value
==
null
?
null
:
value
.
getClass
(),
null
,
cell
,
WriteCellData
<?>
cellData
=
converterAndSet
(
currentWriteHolder
,
value
==
null
?
null
:
value
.
getClass
(),
null
,
cell
,
value
,
null
,
null
,
relativeRowIndex
);
WriteHandlerUtils
.
afterCellDispose
(
writeContext
,
cellData
,
cell
,
null
,
relativeRowIndex
,
Boolean
.
FALSE
);
}
}
private
void
initSortedAllFiledMapFieldList
(
Class
clazz
,
Map
<
Integer
,
Field
>
sortedAllFiledMap
)
{
private
void
initSortedAllFiledMapFieldList
(
Class
<?>
clazz
,
Map
<
Integer
,
Field
>
sortedAllFiledMap
)
{
if
(!
sortedAllFiledMap
.
isEmpty
())
{
return
;
}
...
...
src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java
浏览文件 @
051e5612
...
...
@@ -14,7 +14,7 @@ import com.alibaba.excel.enums.CellDataTypeEnum;
import
com.alibaba.excel.enums.WriteDirectionEnum
;
import
com.alibaba.excel.enums.WriteTemplateAnalysisCellTypeEnum
;
import
com.alibaba.excel.exception.ExcelGenerateException
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.
Write
CellData
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.util.StringUtils
;
import
com.alibaba.excel.util.WriteHandlerUtils
;
...
...
@@ -198,20 +198,20 @@ public class ExcelWriteFillExecutor extends AbstractExcelWriteExecutor {
continue
;
}
Object
value
=
dataMap
.
get
(
variable
);
CellData
<?>
cellData
=
converterAndSet
(
writeSheetHolder
,
value
==
null
?
null
:
value
.
getClass
(),
null
,
Write
CellData
<?>
cellData
=
converterAndSet
(
writeSheetHolder
,
value
==
null
?
null
:
value
.
getClass
(),
null
,
cell
,
value
,
fieldNameContentPropertyMap
.
get
(
variable
),
null
,
relativeRowIndex
);
WriteHandlerUtils
.
afterCellDispose
(
writeContext
,
cellData
,
cell
,
null
,
relativeRowIndex
,
Boolean
.
FALSE
);
}
else
{
StringBuilder
cellValueBuild
=
new
StringBuilder
();
int
index
=
0
;
List
<
CellData
<?>>
cellDataList
=
new
ArrayList
<>();
List
<
Write
CellData
<?>>
cellDataList
=
new
ArrayList
<>();
for
(
String
variable
:
analysisCell
.
getVariableList
())
{
cellValueBuild
.
append
(
analysisCell
.
getPrepareDataList
().
get
(
index
++));
if
(!
dataMap
.
containsKey
(
variable
))
{
continue
;
}
Object
value
=
dataMap
.
get
(
variable
);
CellData
<?>
cellData
=
convert
(
writeSheetHolder
,
value
==
null
?
null
:
value
.
getClass
(),
Write
CellData
<?>
cellData
=
convert
(
writeSheetHolder
,
value
==
null
?
null
:
value
.
getClass
(),
CellDataTypeEnum
.
STRING
,
cell
,
value
,
fieldNameContentPropertyMap
.
get
(
variable
));
cellDataList
.
add
(
cellData
);
CellDataTypeEnum
type
=
cellData
.
getType
();
...
...
src/main/java/com/alibaba/excel/write/handler/AbstractCellWriteHandler.java
浏览文件 @
051e5612
...
...
@@ -2,14 +2,14 @@ package com.alibaba.excel.write.handler;
import
java.util.List
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Row
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Row
;
/**
* Abstract cell write handler
*
...
...
@@ -33,13 +33,12 @@ public abstract class AbstractCellWriteHandler implements CellWriteHandler {
@Override
public
void
afterCellDataConverted
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
CellData
cellData
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
WriteCellData
<?>
cellData
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
}
@Override
public
void
afterCellDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
List
<
Write
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
}
}
src/main/java/com/alibaba/excel/write/handler/CellWriteHandler.java
浏览文件 @
051e5612
...
...
@@ -2,11 +2,13 @@ package com.alibaba.excel.write.handler;
import
java.util.List
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.write.handler.context.CellWriteHandlerContext
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Row
;
...
...
@@ -17,6 +19,16 @@ import org.apache.poi.ss.usermodel.Row;
*/
public
interface
CellWriteHandler
extends
WriteHandler
{
/**
* Called before create the cell
*
* @param context
*/
default
void
beforeCellCreate
(
CellWriteHandlerContext
context
)
{
beforeCellCreate
(
context
.
getWriteSheetHolder
(),
context
.
getWriteTableHolder
(),
context
.
getRow
(),
context
.
getHeadData
(),
context
.
getColumnIndex
(),
context
.
getRelativeRowIndex
(),
context
.
getHead
());
}
/**
* Called before create the cell
*
...
...
@@ -31,6 +43,16 @@ public interface CellWriteHandler extends WriteHandler {
default
void
beforeCellCreate
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Row
row
,
Head
head
,
Integer
columnIndex
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{}
/**
* Called after the cell is created
*
* @param context
*/
default
void
afterCellCreate
(
CellWriteHandlerContext
context
)
{
afterCellCreate
(
context
.
getWriteSheetHolder
(),
context
.
getWriteTableHolder
(),
context
.
getCell
(),
context
.
getHeadData
(),
context
.
getRelativeRowIndex
(),
context
.
getHead
());
}
/**
* Called after the cell is created
*
...
...
@@ -44,6 +66,18 @@ public interface CellWriteHandler extends WriteHandler {
default
void
afterCellCreate
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{}
/**
* Called after the cell data is converted
*
* @param context
*/
default
void
afterCellDataConverted
(
CellWriteHandlerContext
context
)
{
WriteCellData
<?>
writeCellData
=
CollectionUtils
.
isNotEmpty
(
context
.
getCellDataList
())
?
context
.
getCellDataList
().
get
(
0
)
:
null
;
afterCellDataConverted
(
context
.
getWriteSheetHolder
(),
context
.
getWriteTableHolder
(),
writeCellData
,
context
.
getCell
(),
context
.
getHeadData
(),
context
.
getRelativeRowIndex
(),
context
.
getHead
());
}
/**
* Called after the cell data is converted
*
...
...
@@ -56,7 +90,17 @@ public interface CellWriteHandler extends WriteHandler {
* @param isHead It will always be false when fill data.
*/
default
void
afterCellDataConverted
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
CellData
<?>
cellData
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{}
WriteCellData
<?>
cellData
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{}
/**
* Called after all operations on the cell have been completed
*
* @param context
*/
default
void
afterCellDispose
(
CellWriteHandlerContext
context
)
{
afterCellDispose
(
context
.
getWriteSheetHolder
(),
context
.
getWriteTableHolder
(),
context
.
getCellDataList
(),
context
.
getCell
(),
context
.
getHeadData
(),
context
.
getRelativeRowIndex
(),
context
.
getHead
());
}
/**
* Called after all operations on the cell have been completed
...
...
@@ -70,5 +114,5 @@ public interface CellWriteHandler extends WriteHandler {
* @param isHead It will always be false when fill data.
*/
default
void
afterCellDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{}
List
<
Write
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{}
}
src/main/java/com/alibaba/excel/write/handler/DefaultWriteHandlerLoader.java
浏览文件 @
051e5612
...
...
@@ -5,12 +5,16 @@ import java.util.List;
import
com.alibaba.excel.write.handler.impl.DefaultRowWriteHandler
;
import
com.alibaba.excel.write.handler.impl.DimensionWorkbookWriteHandler
;
import
com.alibaba.excel.write.handler.impl.Fill
DataFormat
CellWriteHandler
;
import
com.alibaba.excel.write.handler.impl.Fill
Style
CellWriteHandler
;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
import
com.alibaba.excel.write.metadata.style.WriteFont
;
import
com.alibaba.excel.write.style.HorizontalCellStyleStrategy
;
import
org.apache.poi.ss.usermodel.BorderStyle
;
import
org.apache.poi.ss.usermodel.FillPatternType
;
import
org.apache.poi.ss.usermodel.HorizontalAlignment
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
org.apache.poi.ss.usermodel.VerticalAlignment
;
/**
* Load default handler
...
...
@@ -24,6 +28,7 @@ public class DefaultWriteHandlerLoader {
static
{
DEFAULT_WRITE_HANDLER_LIST
.
add
(
new
DimensionWorkbookWriteHandler
());
DEFAULT_WRITE_HANDLER_LIST
.
add
(
new
DefaultRowWriteHandler
());
DEFAULT_WRITE_HANDLER_LIST
.
add
(
new
FillStyleCellWriteHandler
());
}
/**
...
...
@@ -35,7 +40,16 @@ public class DefaultWriteHandlerLoader {
List
<
WriteHandler
>
handlerList
=
new
ArrayList
<>();
if
(
useDefaultStyle
)
{
WriteCellStyle
headWriteCellStyle
=
new
WriteCellStyle
();
headWriteCellStyle
.
setWrapped
(
true
);
headWriteCellStyle
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
headWriteCellStyle
.
setHorizontalAlignment
(
HorizontalAlignment
.
CENTER
);
headWriteCellStyle
.
setLocked
(
true
);
headWriteCellStyle
.
setFillPatternType
(
FillPatternType
.
SOLID_FOREGROUND
);
headWriteCellStyle
.
setFillForegroundColor
(
IndexedColors
.
GREY_25_PERCENT
.
getIndex
());
headWriteCellStyle
.
setBorderTop
(
BorderStyle
.
THIN
);
headWriteCellStyle
.
setBorderBottom
(
BorderStyle
.
THIN
);
headWriteCellStyle
.
setBorderLeft
(
BorderStyle
.
THIN
);
headWriteCellStyle
.
setBorderRight
(
BorderStyle
.
THIN
);
WriteFont
headWriteFont
=
new
WriteFont
();
headWriteFont
.
setFontName
(
"宋体"
);
headWriteFont
.
setFontHeightInPoints
((
short
)
14
);
...
...
@@ -44,7 +58,6 @@ public class DefaultWriteHandlerLoader {
handlerList
.
add
(
new
HorizontalCellStyleStrategy
(
headWriteCellStyle
,
new
ArrayList
<>()));
}
handlerList
.
addAll
(
DEFAULT_WRITE_HANDLER_LIST
);
handlerList
.
add
(
new
FillDataFormatCellWriteHandler
());
return
handlerList
;
}
...
...
src/main/java/com/alibaba/excel/write/handler/RowWriteHandler.java
浏览文件 @
051e5612
package
com.alibaba.excel.write.handler
;
import
com.alibaba.excel.write.handler.context.RowWriteHandlerContext
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
...
...
@@ -12,6 +13,16 @@ import org.apache.poi.ss.usermodel.Row;
*/
public
interface
RowWriteHandler
extends
WriteHandler
{
/**
* Called before create the row
*
* @param context
*/
default
void
beforeRowCreate
(
RowWriteHandlerContext
context
)
{
beforeRowCreate
(
context
.
getWriteSheetHolder
(),
context
.
getWriteTableHolder
(),
context
.
getRowIndex
(),
context
.
getRelativeRowIndex
(),
context
.
getHead
());
}
/**
* Called before create the row
*
...
...
@@ -24,6 +35,16 @@ public interface RowWriteHandler extends WriteHandler {
default
void
beforeRowCreate
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Integer
rowIndex
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{}
/**
* Called after the row is created
*
* @param context
*/
default
void
afterRowCreate
(
RowWriteHandlerContext
context
)
{
afterRowCreate
(
context
.
getWriteSheetHolder
(),
context
.
getWriteTableHolder
(),
context
.
getRow
(),
context
.
getRelativeRowIndex
(),
context
.
getHead
());
}
/**
* Called after the row is created
*
...
...
@@ -36,6 +57,16 @@ public interface RowWriteHandler extends WriteHandler {
default
void
afterRowCreate
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Row
row
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{}
/**
* Called after all operations on the row have been completed.This method is not called when fill the data.
*
* @param context
*/
default
void
afterRowDispose
(
RowWriteHandlerContext
context
)
{
afterRowDispose
(
context
.
getWriteSheetHolder
(),
context
.
getWriteTableHolder
(),
context
.
getRow
(),
context
.
getRelativeRowIndex
(),
context
.
getHead
());
}
/**
* Called after all operations on the row have been completed.This method is not called when fill the data.
*
...
...
src/main/java/com/alibaba/excel/write/handler/SheetWriteHandler.java
浏览文件 @
051e5612
package
com.alibaba.excel.write.handler
;
import
com.alibaba.excel.write.handler.context.SheetWriteHandlerContext
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
...
...
@@ -10,6 +11,15 @@ import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
*/
public
interface
SheetWriteHandler
extends
WriteHandler
{
/**
* Called before create the sheet
*
* @param context
*/
default
void
beforeSheetCreate
(
SheetWriteHandlerContext
context
)
{
beforeSheetCreate
(
context
.
getWriteWorkbookHolder
(),
context
.
getWriteSheetHolder
());
}
/**
* Called before create the sheet
*
...
...
@@ -18,6 +28,15 @@ public interface SheetWriteHandler extends WriteHandler {
*/
default
void
beforeSheetCreate
(
WriteWorkbookHolder
writeWorkbookHolder
,
WriteSheetHolder
writeSheetHolder
)
{}
/**
* Called after the sheet is created
*
* @param context
*/
default
void
afterSheetCreate
(
SheetWriteHandlerContext
context
)
{
afterSheetCreate
(
context
.
getWriteWorkbookHolder
(),
context
.
getWriteSheetHolder
());
}
/**
* Called after the sheet is created
*
...
...
src/main/java/com/alibaba/excel/write/handler/WorkbookWriteHandler.java
浏览文件 @
051e5612
package
com.alibaba.excel.write.handler
;
import
com.alibaba.excel.write.handler.context.WorkbookWriteHandlerContext
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
/**
...
...
@@ -9,11 +10,29 @@ import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
*/
public
interface
WorkbookWriteHandler
extends
WriteHandler
{
/**
* Called before create the workbook
*
* @param context
*/
default
void
beforeWorkbookCreate
(
WorkbookWriteHandlerContext
context
)
{
beforeWorkbookCreate
();
}
/**
* Called before create the workbook
*/
default
void
beforeWorkbookCreate
()
{}
/**
* Called after the workbook is created
*
* @param context
*/
default
void
afterWorkbookCreate
(
WorkbookWriteHandlerContext
context
)
{
afterWorkbookCreate
(
context
.
getWriteWorkbookHolder
());
}
/**
* Called after the workbook is created
*
...
...
@@ -21,6 +40,15 @@ public interface WorkbookWriteHandler extends WriteHandler {
*/
default
void
afterWorkbookCreate
(
WriteWorkbookHolder
writeWorkbookHolder
)
{}
/**
* Called after all operations on the workbook have been completed
*
* @param context
*/
default
void
afterWorkbookDispose
(
WorkbookWriteHandlerContext
context
)
{
afterWorkbookDispose
(
context
.
getWriteWorkbookHolder
());
}
/**
* Called after all operations on the workbook have been completed
*
...
...
src/main/java/com/alibaba/excel/write/handler/context/CellWriteHandlerContext.java
0 → 100644
浏览文件 @
051e5612
package
com.alibaba.excel.write.handler.context
;
import
java.util.List
;
import
com.alibaba.excel.context.WriteContext
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Row
;
/**
* cell context
*
* @author Jiaju Zhuang
*/
@Data
@AllArgsConstructor
public
class
CellWriteHandlerContext
{
/**
* write context
*/
private
WriteContext
writeContext
;
/**
* workbook
*/
private
WriteWorkbookHolder
writeWorkbookHolder
;
/**
* sheet
*/
private
WriteSheetHolder
writeSheetHolder
;
/**
* table .Nullable.It is null without using table writes.
*/
private
WriteTableHolder
writeTableHolder
;
/**
* row
*/
private
Row
row
;
/**
* cell
*/
private
Cell
cell
;
/**
* index
*/
private
Integer
columnIndex
;
/**
* Nullable.It is null in the case of fill data.
*/
private
Integer
relativeRowIndex
;
/**
* Nullable.It is null in the case of fill data.
*/
private
Head
headData
;
/**
* Nullable.It is null in the case of add header.There may be several when fill the data.
*/
private
List
<
WriteCellData
<?>>
cellDataList
;
/**
* Nullable.It is null in the case of fill data.
*/
private
Boolean
head
;
}
src/main/java/com/alibaba/excel/write/handler/context/RowWriteHandlerContext.java
0 → 100644
浏览文件 @
051e5612
package
com.alibaba.excel.write.handler.context
;
import
com.alibaba.excel.context.WriteContext
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
org.apache.poi.ss.usermodel.Row
;
/**
* row context
*
* @author Jiaju Zhuang
*/
@Data
@AllArgsConstructor
public
class
RowWriteHandlerContext
{
/**
* write context
*/
private
WriteContext
writeContext
;
/**
* workbook
*/
private
WriteWorkbookHolder
writeWorkbookHolder
;
/**
* sheet
*/
private
WriteSheetHolder
writeSheetHolder
;
/**
* table .Nullable.It is null without using table writes.
*/
private
WriteTableHolder
writeTableHolder
;
/**
* row index
*/
private
Integer
rowIndex
;
/**
* row
*/
private
Row
row
;
/**
* Nullable.It is null in the case of fill data.
*/
private
Integer
relativeRowIndex
;
/**
* Nullable.It is null in the case of fill data.
*/
private
Boolean
head
;
}
src/main/java/com/alibaba/excel/write/handler/context/SheetWriteHandlerContext.java
0 → 100644
浏览文件 @
051e5612
package
com.alibaba.excel.write.handler.context
;
import
com.alibaba.excel.context.WriteContext
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
/**
* sheet context
*
* @author Jiaju Zhuang
*/
@Data
@AllArgsConstructor
public
class
SheetWriteHandlerContext
{
/**
* write context
*/
private
WriteContext
writeContext
;
/**
* workbook
*/
private
WriteWorkbookHolder
writeWorkbookHolder
;
/**
* sheet
*/
private
WriteSheetHolder
writeSheetHolder
;
}
src/main/java/com/alibaba/excel/write/handler/context/WorkbookWriteHandlerContext.java
0 → 100644
浏览文件 @
051e5612
package
com.alibaba.excel.write.handler.context
;
import
com.alibaba.excel.context.WriteContext
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
/**
* workbook context
*
* @author Jiaju Zhuang
*/
@Data
@AllArgsConstructor
public
class
WorkbookWriteHandlerContext
{
/**
* write context
*/
private
WriteContext
writeContext
;
/**
* workbook
*/
private
WriteWorkbookHolder
writeWorkbookHolder
;
}
src/main/java/com/alibaba/excel/write/handler/impl/DefaultRowWriteHandler.java
浏览文件 @
051e5612
package
com.alibaba.excel.write.handler.impl
;
import
com.alibaba.excel.write.handler.RowWriteHandler
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
com.alibaba.excel.write.handler.context.RowWriteHandlerContext
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.poi.ss.usermodel.Row
;
/**
* Default row handler.
...
...
@@ -14,9 +12,10 @@ import org.apache.poi.ss.usermodel.Row;
*/
@Slf4j
public
class
DefaultRowWriteHandler
implements
RowWriteHandler
{
@Override
public
void
afterRowDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Row
row
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
writeSheetHolder
.
setLastRowIndex
(
row
.
getRowNum
());
public
void
afterRowDispose
(
RowWriteHandlerContext
context
)
{
context
.
getWriteSheetHolder
().
setLastRowIndex
(
context
.
getRowIndex
());
}
}
src/main/java/com/alibaba/excel/write/handler/impl/FillDataFormatCellWriteHandler.java
已删除
100644 → 0
浏览文件 @
466287d4
package
com.alibaba.excel.write.handler.impl
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Set
;
import
com.alibaba.excel.constant.OrderConstant
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.event.Order
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.util.DateUtils
;
import
com.alibaba.excel.util.StyleUtil
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.DataFormat
;
import
org.apache.poi.ss.usermodel.Workbook
;
/**
* fill cell style.
*
* @author Jiaju Zhuang
*/
@Slf4j
public
class
FillDataFormatCellWriteHandler
implements
CellWriteHandler
,
Order
{
private
final
Set
<
CellStyle
>
cellStyleSet
=
new
HashSet
<>();
private
CellStyle
defaultDateCellStyle
;
@Override
public
int
order
()
{
return
OrderConstant
.
FILL_DATA_FORMAT
;
}
@Override
public
void
afterCellDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
if
(
CollectionUtils
.
isEmpty
(
cellDataList
)
||
cellDataList
.
size
()
>
1
)
{
return
;
}
CellData
<?>
cellData
=
cellDataList
.
get
(
0
);
CellStyle
cellStyle
=
cell
.
getCellStyle
();
if
(
cellStyle
==
null
||
StyleUtil
.
isDefaultStyle
(
cellStyle
))
{
if
(
cellData
.
getType
()
==
CellDataTypeEnum
.
DATE
)
{
cell
.
setCellStyle
(
getDefaultDateCellStyle
(
writeSheetHolder
));
}
return
;
}
if
(
cellStyleSet
.
contains
(
cellStyle
))
{
return
;
}
if
(
cellData
.
getDataFormat
()
!=
null
&&
cellData
.
getDataFormat
()
>=
0
)
{
cellStyle
.
setDataFormat
(
cellData
.
getDataFormat
());
}
cellStyleSet
.
add
(
cellStyle
);
}
private
CellStyle
getDefaultDateCellStyle
(
WriteSheetHolder
writeSheetHolder
)
{
if
(
defaultDateCellStyle
!=
null
)
{
return
defaultDateCellStyle
;
}
Workbook
workbook
=
writeSheetHolder
.
getParentWriteWorkbookHolder
().
getWorkbook
();
defaultDateCellStyle
=
workbook
.
createCellStyle
();
DataFormat
dataFormat
=
workbook
.
createDataFormat
();
defaultDateCellStyle
.
setDataFormat
(
dataFormat
.
getFormat
(
DateUtils
.
defaultDateFormat
));
return
defaultDateCellStyle
;
}
}
src/main/java/com/alibaba/excel/write/handler/impl/FillStyleCellWriteHandler.java
0 → 100644
浏览文件 @
051e5612
package
com.alibaba.excel.write.handler.impl
;
import
java.util.List
;
import
com.alibaba.excel.constant.OrderConstant
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.alibaba.excel.write.handler.context.CellWriteHandlerContext
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
/**
* fill cell style.
*
* @author Jiaju Zhuang
*/
@Slf4j
public
class
FillStyleCellWriteHandler
implements
CellWriteHandler
{
@Override
public
int
order
()
{
return
OrderConstant
.
FILL_STYLE
;
}
@Override
public
void
afterCellDispose
(
CellWriteHandlerContext
context
)
{
List
<
WriteCellData
<?>>
cellDataList
=
context
.
getCellDataList
();
if
(
CollectionUtils
.
isEmpty
(
cellDataList
)
||
cellDataList
.
size
()
>
1
)
{
return
;
}
WriteCellData
<?>
cellData
=
cellDataList
.
get
(
0
);
WriteCellStyle
writeCellStyle
=
cellData
.
getWriteCellStyle
();
if
(
writeCellStyle
==
null
)
{
return
;
}
WriteWorkbookHolder
writeWorkbookHolder
=
context
.
getWriteWorkbookHolder
();
context
.
getCell
().
setCellStyle
(
writeWorkbookHolder
.
createCellStyle
(
writeCellStyle
));
}
}
src/main/java/com/alibaba/excel/write/merge/AbstractMergeStrategy.java
浏览文件 @
051e5612
package
com.alibaba.excel.write.merge
;
import
java.util.List
;
import
com.alibaba.excel.metadata.data.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
;
import
com.alibaba.excel.write.handler.context.CellWriteHandlerContext
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Sheet
;
...
...
@@ -19,12 +15,12 @@ import org.apache.poi.ss.usermodel.Sheet;
public
abstract
class
AbstractMergeStrategy
implements
CellWriteHandler
{
@Override
public
void
afterCellDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
if
(
isHead
)
{
public
void
afterCellDispose
(
CellWriteHandlerContext
context
)
{
if
(
context
.
getHead
())
{
return
;
}
merge
(
writeSheetHolder
.
getSheet
(),
cell
,
head
,
relativeRowIndex
);
merge
(
context
.
getWriteSheetHolder
().
getSheet
(),
context
.
getCell
(),
context
.
getHeadData
(),
context
.
getRelativeRowIndex
());
}
/**
...
...
src/main/java/com/alibaba/excel/write/metadata/WriteTable.java
浏览文件 @
051e5612
package
com.alibaba.excel.write.metadata
;
import
com.alibaba.excel.write.style.HorizontalCellStyleStrategy
;
import
lombok.Data
;
/**
* table
*
* @author jipengfei
*/
@Data
public
class
WriteTable
extends
WriteBasicParameter
{
/**
* Starting from 0
*/
private
Integer
tableNo
;
/**
*
* @deprecated please use{@link HorizontalCellStyleStrategy}
*/
@Deprecated
private
TableStyle
tableStyle
;
public
Integer
getTableNo
()
{
return
tableNo
;
}
public
void
setTableNo
(
Integer
tableNo
)
{
this
.
tableNo
=
tableNo
;
}
public
TableStyle
getTableStyle
()
{
return
tableStyle
;
}
public
void
setTableStyle
(
TableStyle
tableStyle
)
{
this
.
tableStyle
=
tableStyle
;
}
}
src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java
浏览文件 @
051e5612
...
...
@@ -9,12 +9,6 @@ import java.util.Map;
import
java.util.Set
;
import
java.util.TreeMap
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.poi.ss.usermodel.FillPatternType
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.converters.ConverterKeyBuild
;
import
com.alibaba.excel.converters.DefaultConverterLoader
;
...
...
@@ -22,7 +16,6 @@ import com.alibaba.excel.enums.HeadKindEnum;
import
com.alibaba.excel.event.NotRepeatExecutor
;
import
com.alibaba.excel.event.Order
;
import
com.alibaba.excel.metadata.AbstractHolder
;
import
com.alibaba.excel.metadata.Font
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.property.LoopMergeProperty
;
import
com.alibaba.excel.metadata.property.OnceAbsoluteMergeProperty
;
...
...
@@ -36,16 +29,16 @@ import com.alibaba.excel.write.handler.WriteHandler;
import
com.alibaba.excel.write.merge.LoopMergeStrategy
;
import
com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy
;
import
com.alibaba.excel.write.metadata.WriteBasicParameter
;
import
com.alibaba.excel.write.metadata.WriteSheet
;
import
com.alibaba.excel.write.metadata.WriteTable
;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
import
com.alibaba.excel.write.metadata.style.WriteFont
;
import
com.alibaba.excel.write.property.ExcelWriteHeadProperty
;
import
com.alibaba.excel.write.style.AbstractVerticalCellStyleStrategy
;
import
com.alibaba.excel.write.style.HorizontalCellStyleStrategy
;
import
com.alibaba.excel.write.style.column.AbstractHeadColumnWidthStyleStrategy
;
import
com.alibaba.excel.write.style.row.SimpleRowHeightStyleStrategy
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.apache.commons.collections4.CollectionUtils
;
/**
* Write holder configuration
*
...
...
@@ -182,9 +175,6 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
// Initialization property
this
.
excelWriteHeadProperty
=
new
ExcelWriteHeadProperty
(
this
,
getClazz
(),
getHead
(),
convertAllField
);
// Compatible with old code
compatibleOldCode
(
writeBasicParameter
);
// Set writeHandlerMap
List
<
WriteHandler
>
handlerList
=
new
ArrayList
<
WriteHandler
>();
...
...
@@ -220,77 +210,6 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
}
}
/**
* Compatible with old code
*/
@Deprecated
private
void
compatibleOldCode
(
WriteBasicParameter
writeBasicParameter
)
{
switch
(
holderType
())
{
case
SHEET:
compatibleOldCodeCreateRowCellStyleStrategy
(
writeBasicParameter
,
((
WriteSheet
)
writeBasicParameter
).
getTableStyle
());
compatibleOldCodeCreateHeadColumnWidthStyleStrategy
(
writeBasicParameter
,
((
WriteSheet
)
writeBasicParameter
).
getColumnWidthMap
());
return
;
case
TABLE:
compatibleOldCodeCreateRowCellStyleStrategy
(
writeBasicParameter
,
((
WriteTable
)
writeBasicParameter
).
getTableStyle
());
return
;
default
:
}
}
@Deprecated
private
void
compatibleOldCodeCreateRowCellStyleStrategy
(
WriteBasicParameter
writeBasicParameter
,
TableStyle
tableStyle
)
{
if
(
tableStyle
==
null
)
{
return
;
}
if
(
writeBasicParameter
.
getCustomWriteHandlerList
()
==
null
)
{
writeBasicParameter
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
writeBasicParameter
.
getCustomWriteHandlerList
()
.
add
(
new
HorizontalCellStyleStrategy
(
buildWriteCellStyle
(
tableStyle
.
getTableHeadFont
(),
tableStyle
.
getTableHeadBackGroundColor
()),
buildWriteCellStyle
(
tableStyle
.
getTableContentFont
(),
tableStyle
.
getTableContentBackGroundColor
())));
}
@Deprecated
private
WriteCellStyle
buildWriteCellStyle
(
Font
font
,
IndexedColors
indexedColors
)
{
WriteCellStyle
writeCellStyle
=
new
WriteCellStyle
();
if
(
indexedColors
!=
null
)
{
writeCellStyle
.
setFillPatternType
(
FillPatternType
.
SOLID_FOREGROUND
);
writeCellStyle
.
setFillForegroundColor
(
indexedColors
.
getIndex
());
}
if
(
font
!=
null
)
{
WriteFont
writeFont
=
new
WriteFont
();
writeFont
.
setFontName
(
font
.
getFontName
());
writeFont
.
setFontHeightInPoints
(
font
.
getFontHeightInPoints
());
writeFont
.
setBold
(
font
.
isBold
());
writeCellStyle
.
setWriteFont
(
writeFont
);
}
return
writeCellStyle
;
}
@Deprecated
private
void
compatibleOldCodeCreateHeadColumnWidthStyleStrategy
(
WriteBasicParameter
writeBasicParameter
,
final
Map
<
Integer
,
Integer
>
columnWidthMap
)
{
if
(
columnWidthMap
==
null
||
columnWidthMap
.
isEmpty
())
{
return
;
}
if
(
writeBasicParameter
.
getCustomWriteHandlerList
()
==
null
)
{
writeBasicParameter
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
writeBasicParameter
.
getCustomWriteHandlerList
().
add
(
new
AbstractHeadColumnWidthStyleStrategy
()
{
@Override
protected
Integer
columnWidth
(
Head
head
,
Integer
columnIndex
)
{
if
(
columnWidthMap
.
containsKey
(
head
.
getColumnIndex
()))
{
return
columnWidthMap
.
get
(
head
.
getColumnIndex
())
/
256
;
}
return
20
;
}
});
}
protected
void
initAnnotationConfig
(
List
<
WriteHandler
>
handlerList
,
WriteBasicParameter
writeBasicParameter
)
{
if
(!
HeadKindEnum
.
CLASS
.
equals
(
getExcelWriteHeadProperty
().
getHeadKind
()))
{
...
...
@@ -483,95 +402,6 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
return
false
;
}
public
Boolean
getNeedHead
()
{
return
needHead
;
}
public
void
setNeedHead
(
Boolean
needHead
)
{
this
.
needHead
=
needHead
;
}
public
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
getWriteHandlerMap
()
{
return
writeHandlerMap
;
}
public
void
setWriteHandlerMap
(
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
writeHandlerMap
)
{
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
;
}
public
void
setExcelWriteHeadProperty
(
ExcelWriteHeadProperty
excelWriteHeadProperty
)
{
this
.
excelWriteHeadProperty
=
excelWriteHeadProperty
;
}
public
Integer
getRelativeHeadRowIndex
()
{
return
relativeHeadRowIndex
;
}
public
void
setRelativeHeadRowIndex
(
Integer
relativeHeadRowIndex
)
{
this
.
relativeHeadRowIndex
=
relativeHeadRowIndex
;
}
public
Boolean
getUseDefaultStyle
()
{
return
useDefaultStyle
;
}
public
void
setUseDefaultStyle
(
Boolean
useDefaultStyle
)
{
this
.
useDefaultStyle
=
useDefaultStyle
;
}
public
Boolean
getAutomaticMergeHead
()
{
return
automaticMergeHead
;
}
public
void
setAutomaticMergeHead
(
Boolean
automaticMergeHead
)
{
this
.
automaticMergeHead
=
automaticMergeHead
;
}
public
Collection
<
Integer
>
getExcludeColumnIndexes
()
{
return
excludeColumnIndexes
;
}
public
void
setExcludeColumnIndexes
(
Collection
<
Integer
>
excludeColumnIndexes
)
{
this
.
excludeColumnIndexes
=
excludeColumnIndexes
;
}
public
Collection
<
String
>
getExcludeColumnFieldNames
()
{
return
excludeColumnFieldNames
;
}
public
void
setExcludeColumnFieldNames
(
Collection
<
String
>
excludeColumnFieldNames
)
{
this
.
excludeColumnFieldNames
=
excludeColumnFieldNames
;
}
public
Collection
<
Integer
>
getIncludeColumnIndexes
()
{
return
includeColumnIndexes
;
}
public
void
setIncludeColumnIndexes
(
Collection
<
Integer
>
includeColumnIndexes
)
{
this
.
includeColumnIndexes
=
includeColumnIndexes
;
}
public
Collection
<
String
>
getIncludeColumnFieldNames
()
{
return
includeColumnFieldNames
;
}
public
void
setIncludeColumnFieldNames
(
Collection
<
String
>
includeColumnFieldNames
)
{
this
.
includeColumnFieldNames
=
includeColumnFieldNames
;
}
@Override
public
ExcelWriteHeadProperty
excelWriteHeadProperty
()
{
return
getExcelWriteHeadProperty
();
...
...
src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java
浏览文件 @
051e5612
...
...
@@ -10,7 +10,6 @@ import java.io.OutputStream;
import
java.util.HashMap
;
import
java.util.Map
;
import
com.alibaba.excel.constant.BuiltinFormats
;
import
com.alibaba.excel.enums.HolderEnum
;
import
com.alibaba.excel.exception.ExcelGenerateException
;
import
com.alibaba.excel.metadata.data.DataFormatData
;
...
...
@@ -18,14 +17,15 @@ import com.alibaba.excel.support.ExcelTypeEnum;
import
com.alibaba.excel.util.FileUtils
;
import
com.alibaba.excel.util.IoUtils
;
import
com.alibaba.excel.util.MapUtils
;
import
com.alibaba.excel.util.St
ringUtils
;
import
com.alibaba.excel.util.St
yleUtil
;
import
com.alibaba.excel.write.metadata.WriteWorkbook
;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
import
com.alibaba.excel.write.metadata.style.WriteFont
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.ss.usermodel.DataFormat
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.Font
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.xssf.streaming.SXSSFWorkbook
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
...
...
@@ -120,10 +120,19 @@ public class WriteWorkbookHolder extends AbstractWriteHolder {
* Excel is also written in the event of an exception being thrown.The default false.
*/
private
Boolean
writeExcelOnException
;
/**
* Used to cell style.
*/
private
Map
<
WriteCellStyle
,
CellStyle
>
cellStyleMap
;
/**
* Used to font.
*/
private
Map
<
WriteFont
,
Font
>
fontMap
;
/**
* Used to
cache data F
ormat.
* Used to
data f
ormat.
*/
private
Map
<
String
,
DataFormatData
>
dataFormatCache
;
private
Map
<
DataFormatData
,
Short
>
dataFormatMap
;
public
WriteWorkbookHolder
(
WriteWorkbook
writeWorkbook
)
{
super
(
writeWorkbook
,
null
,
writeWorkbook
.
getConvertAllFiled
());
...
...
@@ -178,7 +187,9 @@ public class WriteWorkbookHolder extends AbstractWriteHolder {
}
else
{
this
.
writeExcelOnException
=
writeWorkbook
.
getWriteExcelOnException
();
}
this
.
dataFormatCache
=
MapUtils
.
newHashMap
();
this
.
cellStyleMap
=
MapUtils
.
newHashMap
();
this
.
fontMap
=
MapUtils
.
newHashMap
();
this
.
dataFormatMap
=
MapUtils
.
newHashMap
();
}
private
void
copyTemplate
()
throws
IOException
{
...
...
@@ -206,22 +217,52 @@ public class WriteWorkbookHolder extends AbstractWriteHolder {
}
/**
* Get a data format.
* create a cell style.
*
* @param writeCellStyle
* @return
*/
public
CellStyle
createCellStyle
(
WriteCellStyle
writeCellStyle
)
{
CellStyle
cellStyle
=
cellStyleMap
.
get
(
writeCellStyle
);
if
(
cellStyle
!=
null
)
{
return
cellStyle
;
}
cellStyle
=
StyleUtil
.
buildCellStyle
(
workbook
,
writeCellStyle
);
cellStyle
.
setDataFormat
(
createDataFormat
(
writeCellStyle
.
getDataFormatData
()));
cellStyle
.
setFont
(
createFont
(
writeCellStyle
.
getWriteFont
()));
cellStyleMap
.
put
(
writeCellStyle
,
cellStyle
);
return
cellStyle
;
}
/**
* create a font.
*
* @param
forma
t
* @param
writeFon
t
* @return
*/
public
DataFormatData
getDataFormat
(
String
format
)
{
if
(
StringUtils
.
isEmpty
(
format
))
{
return
BuiltinFormats
.
GENERAL
;
public
Font
createFont
(
WriteFont
writeFont
)
{
Font
font
=
fontMap
.
get
(
writeFont
);
if
(
font
!=
null
)
{
return
font
;
}
DataFormatData
dataFormat
=
dataFormatCache
.
get
(
format
);
font
=
StyleUtil
.
buildFont
(
workbook
,
writeFont
);
fontMap
.
put
(
writeFont
,
font
);
return
font
;
}
/**
* create a data format.
*
* @param dataFormatData
* @return
*/
public
Short
createDataFormat
(
DataFormatData
dataFormatData
)
{
Short
dataFormat
=
dataFormatMap
.
get
(
dataFormatData
);
if
(
dataFormat
!=
null
)
{
return
dataFormat
;
}
DataFormat
dataFormatCreate
=
workbook
.
createDataFormat
();
dataFormat
=
dataFormatCreate
.
getFormat
(
format
);
dataFormatCache
.
put
(
format
,
dataFormat
);
dataFormat
=
StyleUtil
.
buildDataFormat
(
workbook
,
dataFormatData
);
dataFormatMap
.
put
(
dataFormatData
,
dataFormat
);
return
dataFormat
;
}
...
...
src/main/java/com/alibaba/excel/write/metadata/style/WriteCellStyle.java
浏览文件 @
051e5612
package
com.alibaba.excel.write.metadata.style
;
import
com.alibaba.excel.constant.BuiltinFormats
;
import
com.alibaba.excel.metadata.DataFormat
;
import
com.alibaba.excel.metadata.data.DataFormatData
;
import
com.alibaba.excel.metadata.property.FontProperty
;
import
com.alibaba.excel.metadata.property.StyleProperty
;
...
...
@@ -53,7 +52,6 @@ public class WriteCellStyle {
/**
* Set whether the text should be wrapped. Setting this flag to <code>true</code> make all content visible within a
* cell by displaying it on multiple lines
*
*/
private
Boolean
wrapped
;
/**
...
...
@@ -101,7 +99,6 @@ public class WriteCellStyle {
* Set the color to use for the right border
*
* @see IndexedColors
*
*/
private
Short
rightBorderColor
;
...
...
@@ -109,14 +106,12 @@ public class WriteCellStyle {
* Set the color to use for the top border
*
* @see IndexedColors
*
*/
private
Short
topBorderColor
;
/**
* Set the color to use for the bottom border
*
* @see IndexedColors
*
*/
private
Short
bottomBorderColor
;
/**
...
...
@@ -130,7 +125,6 @@ public class WriteCellStyle {
* Set the background fill color.
*
* @see IndexedColors
*
*/
private
Short
fillBackgroundColor
;
...
...
@@ -138,7 +132,6 @@ public class WriteCellStyle {
* Set the foreground fill color <i>Note: Ensure Foreground color is set prior to background color.</i>
*
* @see IndexedColors
*
*/
private
Short
fillForegroundColor
;
/**
...
...
@@ -152,9 +145,7 @@ public class WriteCellStyle {
}
WriteCellStyle
writeCellStyle
=
new
WriteCellStyle
();
if
(
styleProperty
!=
null
)
{
if
(
styleProperty
.
getDataFormat
()
>=
0
)
{
writeCellStyle
.
setDataFormat
(
styleProperty
.
getDataFormat
());
}
writeCellStyle
.
setDataFormatData
(
styleProperty
.
getDataFormatData
());
writeCellStyle
.
setHidden
(
styleProperty
.
getHidden
());
writeCellStyle
.
setLocked
(
styleProperty
.
getLocked
());
writeCellStyle
.
setQuotePrefix
(
styleProperty
.
getQuotePrefix
());
...
...
src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java
浏览文件 @
051e5612
package
com.alibaba.excel.write.style
;
import
java.util.List
;
import
com.alibaba.excel.event.NotRepeatExecutor
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.constant.OrderConstant
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
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
;
import
com.alibaba.excel.write.handler.context.CellWriteHandlerContext
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Workbook
;
/**
* Cell style strategy
*
* @author Jiaju Zhuang
*/
public
abstract
class
AbstractCellStyleStrategy
implements
CellWriteHandler
,
WorkbookWriteHandler
,
NotRepeatExecutor
{
boolean
hasInitialized
=
false
;
public
abstract
class
AbstractCellStyleStrategy
implements
CellWriteHandler
{
@Override
public
String
uniqueValue
()
{
return
"CellStyleStrategy"
;
public
int
order
()
{
return
OrderConstant
.
DEFINE_STYLE
;
}
@Override
public
void
afterCellDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
if
(
isHead
==
null
)
{
public
void
afterCellDispose
(
CellWriteHandlerContext
context
)
{
if
(
context
.
getHead
()
==
null
)
{
return
;
}
if
(
isHead
)
{
setHeadCellStyle
(
writeSheetHolder
,
writeTableHolder
,
cell
,
head
,
relativeRowIndex
);
if
(
context
.
getHead
()
)
{
setHeadCellStyle
(
context
);
}
else
{
setContentCellStyle
(
writeSheetHolder
,
writeTableHolder
,
cell
,
head
,
relativeRowIndex
);
setContentCellStyle
(
context
);
}
}
@Override
public
void
afterWorkbookCreate
(
WriteWorkbookHolder
writeWorkbookHolder
)
{
initCellStyle
(
writeWorkbookHolder
.
getWorkbook
());
hasInitialized
=
true
;
}
/**
* Initialization cell style
*
* @param workbook
*/
protected
abstract
void
initCellStyle
(
Workbook
workbook
);
/**
* Sets the cell style of header
*
* @param writeSheetHolder
* @param writeTableHolder
* @param cell
* @param head
* @param relativeRowIndex
* @param context
*/
protected
void
setHeadCellStyle
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
)
{
setHeadCellStyle
(
cell
,
head
,
relativeRowIndex
);
protected
void
setHeadCellStyle
(
CellWriteHandlerContext
context
)
{
setHeadCellStyle
(
context
.
getCell
(),
context
.
getHeadData
(),
context
.
getRelativeRowIndex
());
}
/**
...
...
@@ -82,13 +54,10 @@ public abstract class AbstractCellStyleStrategy implements CellWriteHandler, Wor
/**
* Sets the cell style of content
*
* @param cell
* @param head
* @param relativeRowIndex
* @param context
*/
protected
void
setContentCellStyle
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
)
{
setContentCellStyle
(
cell
,
head
,
relativeRowIndex
);
protected
void
setContentCellStyle
(
CellWriteHandlerContext
context
)
{
setContentCellStyle
(
context
.
getCell
(),
context
.
getHeadData
(),
context
.
getRelativeRowIndex
());
}
/**
...
...
src/main/java/com/alibaba/excel/write/style/AbstractVerticalCellStyleStrategy.java
浏览文件 @
051e5612
package
com.alibaba.excel.write.style
;
import
java.util.
Map
;
import
java.util.
List
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.util.MapUtils
;
import
com.alibaba.excel.util.StyleUtil
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.write.handler.context.CellWriteHandlerContext
;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.commons.collections4.CollectionUtils
;
/**
* Use the same style for the column
...
...
@@ -20,77 +16,32 @@ import org.apache.poi.ss.usermodel.Workbook;
*/
public
abstract
class
AbstractVerticalCellStyleStrategy
extends
AbstractCellStyleStrategy
{
private
Workbook
workbook
;
private
final
Map
<
Integer
,
Map
<
Integer
,
Map
<
Integer
,
CellStyle
>>>
headCellStyleCache
=
MapUtils
.
newHashMap
();
private
final
Map
<
Integer
,
Map
<
Integer
,
Map
<
Integer
,
CellStyle
>>>
contentCellStyleCache
=
MapUtils
.
newHashMap
();
@Override
protected
void
initCellStyle
(
Workbook
workbook
)
{
this
.
workbook
=
workbook
;
}
@Override
protected
void
setHeadCellStyle
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
)
{
if
(
head
==
null
)
{
return
;
}
Map
<
Integer
,
CellStyle
>
styleMap
=
getStyleMap
(
headCellStyleCache
,
writeSheetHolder
,
writeTableHolder
);
int
columnIndex
=
head
.
getColumnIndex
();
if
(
styleMap
.
containsKey
(
columnIndex
))
{
CellStyle
cellStyle
=
styleMap
.
get
(
columnIndex
);
if
(
cellStyle
!=
null
)
{
cell
.
setCellStyle
(
cellStyle
);
}
protected
void
setHeadCellStyle
(
CellWriteHandlerContext
context
)
{
if
(!
continueProcessing
(
context
))
{
return
;
}
WriteCellStyle
headCellStyle
=
headCellStyle
(
head
);
if
(
headCellStyle
==
null
)
{
styleMap
.
put
(
columnIndex
,
StyleUtil
.
buildHeadCellStyle
(
workbook
,
null
));
}
else
{
CellStyle
cellStyle
=
StyleUtil
.
buildHeadCellStyle
(
workbook
,
headCellStyle
);
styleMap
.
put
(
columnIndex
,
cellStyle
);
cell
.
setCellStyle
(
cellStyle
);
}
WriteCellData
<?>
cellData
=
context
.
getCellDataList
().
get
(
0
);
cellData
.
setWriteCellStyle
(
headCellStyle
(
context
.
getHeadData
()));
}
@Override
protected
void
setContentCellStyle
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
)
{
if
(
head
==
null
)
{
return
;
}
Map
<
Integer
,
CellStyle
>
styleMap
=
getStyleMap
(
contentCellStyleCache
,
writeSheetHolder
,
writeTableHolder
);
int
columnIndex
=
head
.
getColumnIndex
();
if
(
styleMap
.
containsKey
(
columnIndex
))
{
CellStyle
cellStyle
=
styleMap
.
get
(
columnIndex
);
if
(
cellStyle
!=
null
)
{
cell
.
setCellStyle
(
cellStyle
);
}
protected
void
setContentCellStyle
(
CellWriteHandlerContext
context
)
{
if
(!
continueProcessing
(
context
))
{
return
;
}
WriteCellStyle
contentCellStyle
=
contentCellStyle
(
cell
,
head
,
relativeRowIndex
);
if
(
contentCellStyle
==
null
)
{
styleMap
.
put
(
columnIndex
,
StyleUtil
.
buildContentCellStyle
(
workbook
,
null
));
}
else
{
CellStyle
cellStyle
=
StyleUtil
.
buildContentCellStyle
(
workbook
,
contentCellStyle
);
styleMap
.
put
(
columnIndex
,
cellStyle
);
cell
.
setCellStyle
(
cellStyle
);
}
WriteCellData
<?>
cellData
=
context
.
getCellDataList
().
get
(
0
);
cellData
.
setWriteCellStyle
(
contentCellStyle
(
context
));
}
/**
* Returns the column width corresponding to each column head.
*
* @param cell
* @param head
* @param relativeRowIndex
* @param context
* @return
*/
protected
WriteCellStyle
contentCellStyle
(
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
)
{
return
contentCellStyle
(
head
);
protected
WriteCellStyle
contentCellStyle
(
Cell
WriteHandlerContext
context
)
{
return
contentCellStyle
(
context
.
getHeadData
()
);
}
/**
...
...
@@ -113,15 +64,11 @@ public abstract class AbstractVerticalCellStyleStrategy extends AbstractCellStyl
+
"'contentCellStyle(Head head)' must be implemented."
);
}
private
Map
<
Integer
,
CellStyle
>
getStyleMap
(
Map
<
Integer
,
Map
<
Integer
,
Map
<
Integer
,
CellStyle
>>>
cellStyleCache
,
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
)
{
Map
<
Integer
,
Map
<
Integer
,
CellStyle
>>
tableStyleMap
=
cellStyleCache
.
computeIfAbsent
(
writeSheetHolder
.
getSheetNo
(),
key
->
MapUtils
.
newHashMap
());
Integer
tableNo
=
0
;
if
(
writeTableHolder
!=
null
)
{
tableNo
=
writeTableHolder
.
getTableNo
();
protected
boolean
continueProcessing
(
CellWriteHandlerContext
context
)
{
List
<
WriteCellData
<?>>
cellDataList
=
context
.
getCellDataList
();
if
(
CollectionUtils
.
isEmpty
(
cellDataList
)
||
cellDataList
.
size
()
>
1
)
{
return
false
;
}
return
tableStyleMap
.
computeIfAbsent
(
tableNo
,
key
->
MapUtils
.
newHashMap
())
;
return
context
.
getHeadData
()
!=
null
;
}
}
src/main/java/com/alibaba/excel/write/style/HorizontalCellStyleStrategy.java
浏览文件 @
051e5612
...
...
@@ -4,10 +4,10 @@ import java.util.List;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.util.ListUtils
;
import
com.alibaba.excel.write.handler.context.CellWriteHandlerContext
;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.poi.ss.usermodel.Cell
;
/**
* Use the same style for the row
...
...
@@ -16,8 +16,8 @@ import org.apache.poi.ss.usermodel.Cell;
*/
public
class
HorizontalCellStyleStrategy
extends
AbstractVerticalCellStyleStrategy
{
private
final
WriteCellStyle
headWriteCellStyle
;
private
final
List
<
WriteCellStyle
>
contentWriteCellStyleList
;
private
WriteCellStyle
headWriteCellStyle
;
private
List
<
WriteCellStyle
>
contentWriteCellStyleList
;
public
HorizontalCellStyleStrategy
(
WriteCellStyle
headWriteCellStyle
,
List
<
WriteCellStyle
>
contentWriteCellStyleList
)
{
...
...
@@ -27,8 +27,9 @@ public class HorizontalCellStyleStrategy extends AbstractVerticalCellStyleStrate
public
HorizontalCellStyleStrategy
(
WriteCellStyle
headWriteCellStyle
,
WriteCellStyle
contentWriteCellStyle
)
{
this
.
headWriteCellStyle
=
headWriteCellStyle
;
contentWriteCellStyleList
=
ListUtils
.
newArrayList
();
contentWriteCellStyleList
.
add
(
contentWriteCellStyle
);
if
(
contentWriteCellStyle
!=
null
)
{
this
.
contentWriteCellStyleList
=
ListUtils
.
newArrayList
(
contentWriteCellStyle
);
}
}
@Override
...
...
@@ -37,11 +38,11 @@ public class HorizontalCellStyleStrategy extends AbstractVerticalCellStyleStrate
}
@Override
protected
WriteCellStyle
contentCellStyle
(
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
)
{
protected
WriteCellStyle
contentCellStyle
(
Cell
WriteHandlerContext
context
)
{
if
(
CollectionUtils
.
isEmpty
(
contentWriteCellStyleList
))
{
return
n
ew
WriteCellStyle
()
;
return
n
ull
;
}
return
contentWriteCellStyleList
.
get
(
relativeRowIndex
%
contentWriteCellStyleList
.
size
());
return
contentWriteCellStyleList
.
get
(
context
.
getRelativeRowIndex
()
%
contentWriteCellStyleList
.
size
());
}
}
src/main/java/com/alibaba/excel/write/style/column/AbstractColumnWidthStyleStrategy.java
浏览文件 @
051e5612
...
...
@@ -2,12 +2,11 @@ package com.alibaba.excel.write.style.column;
import
java.util.List
;
import
com.alibaba.excel.event.NotRepeatExecutor
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.
Write
CellData
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.alibaba.excel.write.handler.context.CellWriteHandlerContext
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
org.apache.poi.ss.usermodel.Cell
;
...
...
@@ -16,17 +15,21 @@ import org.apache.poi.ss.usermodel.Cell;
*
* @author Jiaju Zhuang
*/
public
abstract
class
AbstractColumnWidthStyleStrategy
implements
CellWriteHandler
,
NotRepeatExecutor
{
public
abstract
class
AbstractColumnWidthStyleStrategy
implements
CellWriteHandler
{
@Override
public
String
uniqueValue
(
)
{
return
"ColumnWidthStyleStrategy"
;
public
void
afterCellDispose
(
CellWriteHandlerContext
context
)
{
setColumnWidth
(
context
)
;
}
@Override
public
void
afterCellDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
setColumnWidth
(
writeSheetHolder
,
cellDataList
,
cell
,
head
,
relativeRowIndex
,
isHead
);
/**
* Sets the column width when head create
*
* @param context
*/
protected
void
setColumnWidth
(
CellWriteHandlerContext
context
)
{
setColumnWidth
(
context
.
getWriteSheetHolder
(),
context
.
getCellDataList
(),
context
.
getCell
(),
context
.
getHeadData
(),
context
.
getRelativeRowIndex
(),
context
.
getHead
());
}
/**
...
...
@@ -39,7 +42,9 @@ public abstract class AbstractColumnWidthStyleStrategy implements CellWriteHandl
* @param relativeRowIndex
* @param isHead
*/
protected
abstract
void
setColumnWidth
(
WriteSheetHolder
writeSheetHolder
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
);
protected
void
setColumnWidth
(
WriteSheetHolder
writeSheetHolder
,
List
<
WriteCellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
throw
new
UnsupportedOperationException
(
"Custom styles must override the setColumnWidth method."
);
}
}
src/main/java/com/alibaba/excel/write/style/column/AbstractHeadColumnWidthStyleStrategy.java
浏览文件 @
051e5612
...
...
@@ -2,12 +2,12 @@ package com.alibaba.excel.write.style.column;
import
java.util.List
;
import
org.apache.poi.ss.usermodel.Cell
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
org.apache.poi.ss.usermodel.Cell
;
/**
* Returns the column width according to each column header
*
...
...
@@ -16,7 +16,7 @@ import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
public
abstract
class
AbstractHeadColumnWidthStyleStrategy
extends
AbstractColumnWidthStyleStrategy
{
@Override
protected
void
setColumnWidth
(
WriteSheetHolder
writeSheetHolder
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
protected
void
setColumnWidth
(
WriteSheetHolder
writeSheetHolder
,
List
<
Write
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
boolean
needSetWidth
=
relativeRowIndex
!=
null
&&
(
isHead
||
relativeRowIndex
==
0
);
if
(!
needSetWidth
)
{
...
...
src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java
浏览文件 @
051e5612
...
...
@@ -4,14 +4,15 @@ import java.util.HashMap;
import
java.util.List
;
import
java.util.Map
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.poi.ss.usermodel.Cell
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.util.MapUtils
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.poi.ss.usermodel.Cell
;
/**
* Take the width of the longest column as the width.
* <p>
...
...
@@ -24,10 +25,11 @@ public class LongestMatchColumnWidthStyleStrategy extends AbstractColumnWidthSty
private
static
final
int
MAX_COLUMN_WIDTH
=
255
;
private
Map
<
Integer
,
Map
<
Integer
,
Integer
>>
cache
=
new
HashMap
<
Integer
,
Map
<
Integer
,
Integer
>>
(
8
);
private
final
Map
<
Integer
,
Map
<
Integer
,
Integer
>>
cache
=
MapUtils
.
newHashMapWithExpectedSize
(
8
);
@Override
protected
void
setColumnWidth
(
WriteSheetHolder
writeSheetHolder
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
protected
void
setColumnWidth
(
WriteSheetHolder
writeSheetHolder
,
List
<
WriteCellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
boolean
needSetWidth
=
isHead
||
!
CollectionUtils
.
isEmpty
(
cellDataList
);
if
(!
needSetWidth
)
{
...
...
@@ -52,11 +54,11 @@ public class LongestMatchColumnWidthStyleStrategy extends AbstractColumnWidthSty
}
}
private
Integer
dataLength
(
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Boolean
isHead
)
{
private
Integer
dataLength
(
List
<
Write
CellData
<?>>
cellDataList
,
Cell
cell
,
Boolean
isHead
)
{
if
(
isHead
)
{
return
cell
.
getStringCellValue
().
getBytes
().
length
;
}
CellData
cellData
=
cellDataList
.
get
(
0
);
WriteCellData
<?>
cellData
=
cellDataList
.
get
(
0
);
CellDataTypeEnum
type
=
cellData
.
getType
();
if
(
type
==
null
)
{
return
-
1
;
...
...
src/main/java/com/alibaba/excel/write/style/row/AbstractRowHeightStyleStrategy.java
浏览文件 @
051e5612
package
com.alibaba.excel.write.style.row
;
import
org.apache.poi.ss.usermodel.Row
;
import
com.alibaba.excel.event.NotRepeatExecutor
;
import
com.alibaba.excel.write.handler.RowWriteHandler
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
com.alibaba.excel.write.handler.context.RowWriteHandlerContext
;
import
org.apache.poi.ss.usermodel.Row
;
/**
* Set the row height strategy
*
* @author Jiaju Zhuang
*/
public
abstract
class
AbstractRowHeightStyleStrategy
implements
RowWriteHandler
,
NotRepeatExecutor
{
@Override
public
String
uniqueValue
()
{
return
"RowHighStyleStrategy"
;
}
@Override
public
void
beforeRowCreate
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Integer
rowIndex
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
}
@Override
public
void
afterRowCreate
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Row
row
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
}
public
abstract
class
AbstractRowHeightStyleStrategy
implements
RowWriteHandler
{
@Override
public
void
afterRowDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Row
row
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
if
(
isHead
==
null
)
{
public
void
afterRowDispose
(
RowWriteHandlerContext
context
)
{
if
(
context
.
getHead
()
==
null
)
{
return
;
}
if
(
isHead
)
{
setHeadColumnHeight
(
row
,
relativeRowIndex
);
if
(
context
.
getHead
()
)
{
setHeadColumnHeight
(
context
.
getRow
(),
context
.
getRelativeRowIndex
()
);
}
else
{
setContentColumnHeight
(
row
,
relativeRowIndex
);
setContentColumnHeight
(
context
.
getRow
(),
context
.
getRelativeRowIndex
()
);
}
}
...
...
src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataListener.java
浏览文件 @
051e5612
...
...
@@ -3,14 +3,14 @@ package com.alibaba.easyexcel.test.core.celldata;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.junit.Assert
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.fastjson.JSON
;
import
org.junit.Assert
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
/**
* @author Jiaju Zhuang
*/
...
...
@@ -31,7 +31,7 @@ public class CellDataDataListener extends AnalysisEventListener<CellDataData> {
Assert
.
assertEquals
(
cellDataData
.
getDate
().
getStringValue
(),
"2020年01月01日"
);
Assert
.
assertEquals
((
long
)
cellDataData
.
getInteger1
().
getData
(),
2L
);
Assert
.
assertEquals
((
long
)
cellDataData
.
getInteger2
(),
2L
);
Assert
.
assertEquals
(
cellDataData
.
getFormulaValue
().
getFormulaValue
(),
"B2+C2"
);
Assert
.
assertEquals
(
cellDataData
.
getFormulaValue
().
getFormula
Data
().
getFormula
Value
(),
"B2+C2"
);
LOGGER
.
debug
(
"First row:{}"
,
JSON
.
toJSONString
(
list
.
get
(
0
)));
}
}
src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataTest.java
浏览文件 @
051e5612
...
...
@@ -5,19 +5,20 @@ import java.math.BigDecimal;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.junit.BeforeClass
;
import
org.junit.FixMethodOrder
;
import
org.junit.Test
;
import
org.junit.runners.MethodSorters
;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.FormulaData
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.util.DateUtils
;
import
org.junit.BeforeClass
;
import
org.junit.FixMethodOrder
;
import
org.junit.Test
;
import
org.junit.runners.MethodSorters
;
/**
*
* @author Jiaju Zhuang
*/
@FixMethodOrder
(
MethodSorters
.
NAME_ASCENDING
)
...
...
@@ -50,15 +51,16 @@ public class CellDataDataTest {
private
List
<
CellDataData
>
data
()
throws
Exception
{
List
<
CellDataData
>
list
=
new
ArrayList
<
CellDataData
>();
CellDataData
cellDataData
=
new
CellDataData
();
cellDataData
.
setDate
(
new
CellData
<>(
DateUtils
.
parseDate
(
"2020-01-01 01:01:01"
)));
cellDataData
.
setDate
(
new
Write
CellData
<>(
DateUtils
.
parseDate
(
"2020-01-01 01:01:01"
)));
CellData
<
Integer
>
integer1
=
new
CellData
<
Integer
>();
integer1
.
setType
(
CellDataTypeEnum
.
NUMBER
);
integer1
.
setNumberValue
(
BigDecimal
.
valueOf
(
2L
));
cellDataData
.
setInteger1
(
integer1
);
cellDataData
.
setInteger2
(
2
);
CellData
formulaValue
=
new
CellData
();
formulaValue
.
setFormula
(
Boolean
.
TRUE
);
formulaValue
.
setFormulaValue
(
"B2+C2"
);
WriteCellData
<?>
formulaValue
=
new
WriteCellData
<>();
FormulaData
formulaData
=
new
FormulaData
();
formulaValue
.
setFormulaData
(
formulaData
);
formulaData
.
setFormulaValue
(
"B2+C2"
);
cellDataData
.
setFormulaValue
(
formulaValue
);
list
.
add
(
cellDataData
);
return
list
;
...
...
src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityData.java
已删除
100644 → 0
浏览文件 @
466287d4
package
com.alibaba.easyexcel.test.core.compatibility
;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
lombok.Data
;
/**
* @author Jiaju Zhuang
*/
@Data
public
class
CompatibilityData
extends
BaseRowModel
{
@ExcelProperty
(
"字符串标题0"
)
private
String
string0
;
@ExcelProperty
(
"字符串标题1"
)
private
String
string1
;
}
src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityDataListener.java
已删除
100644 → 0
浏览文件 @
466287d4
package
com.alibaba.easyexcel.test.core.compatibility
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.junit.Assert
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.easyexcel.test.core.annotation.AnnotationDataListener
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.fastjson.JSON
;
/**
* @author Jiaju Zhuang
*/
public
class
CompatibilityDataListener
extends
AnalysisEventListener
<
List
<
String
>>
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
AnnotationDataListener
.
class
);
List
<
List
<
String
>>
list
=
new
ArrayList
<
List
<
String
>>();
@Override
public
void
invoke
(
List
<
String
>
data
,
AnalysisContext
context
)
{
list
.
add
(
data
);
}
@Override
public
void
doAfterAllAnalysed
(
AnalysisContext
context
)
{
Assert
.
assertEquals
(
list
.
size
(),
10
);
List
<
String
>
data
=
list
.
get
(
0
);
Assert
.
assertEquals
(
data
.
get
(
0
),
"字符串00"
);
LOGGER
.
debug
(
"First row:{}"
,
JSON
.
toJSONString
(
list
.
get
(
0
)));
}
}
src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityDataTest.java
已删除
100644 → 0
浏览文件 @
466287d4
package
com.alibaba.easyexcel.test.core.compatibility
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileOutputStream
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
org.junit.Assert
;
import
org.junit.BeforeClass
;
import
org.junit.Test
;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.metadata.Font
;
import
com.alibaba.excel.parameter.AnalysisParam
;
import
com.alibaba.excel.parameter.GenerateParam
;
/**
*
* @author Jiaju Zhuang
*/
public
class
CompatibilityDataTest
{
private
static
File
file07
;
private
static
File
file03
;
@BeforeClass
public
static
void
init
()
{
file07
=
TestFileUtil
.
createNewFile
(
"compatibility07.xlsx"
);
file03
=
TestFileUtil
.
createNewFile
(
"compatibility03.xls"
);
}
@Test
public
void
t01ReadAndWrite07
()
throws
Exception
{
readAndWrite
(
file07
);
}
@Test
public
void
t02ReadAndWrite03
()
throws
Exception
{
readAndWrite
(
file03
);
}
private
void
readAndWrite
(
File
file
)
throws
Exception
{
OutputStream
out
=
new
FileOutputStream
(
file
);
GenerateParam
generateParam
=
new
GenerateParam
(
""
,
null
,
out
);
generateParam
.
setSheetName
(
""
);
generateParam
.
setOutputStream
(
out
);
generateParam
.
setClazz
(
null
);
ExcelWriter
writer
=
new
ExcelWriter
(
generateParam
);
// sheet1 width,string head,string data
Sheet
sheet1
=
new
Sheet
(
1
,
3
);
sheet1
.
setSheetName
(
"第一个sheet"
);
Map
columnWidth
=
new
HashMap
();
columnWidth
.
put
(
0
,
10000
);
columnWidth
.
put
(
1
,
50000
);
sheet1
.
setColumnWidthMap
(
columnWidth
);
sheet1
.
setHead
(
head
());
writer
.
write1
(
listData
(),
sheet1
);
// sheet2 style,class head
Sheet
sheet2
=
new
Sheet
(
2
,
3
,
CompatibilityData
.
class
,
"第二个sheet"
,
null
);
sheet2
.
setStartRow
(
5
);
sheet2
.
setTableStyle
(
style
());
writer
.
write
(
data
(),
sheet2
);
writer
.
merge
(
8
,
8
,
0
,
1
);
// sheet3 table
Sheet
sheet3
=
new
Sheet
(
3
,
0
);
sheet3
.
setSheetName
(
"第三个sheet"
);
Table
table1
=
new
Table
(
1
);
table1
.
setHead
(
head
());
writer
.
write1
(
listData
(),
sheet3
,
table1
);
Table
table2
=
new
Table
(
2
);
table2
.
setClazz
(
CompatibilityData
.
class
);
writer
.
write
(
data
(),
sheet3
,
table2
);
writer
.
finish
();
out
.
close
();
InputStream
inputStream
=
new
FileInputStream
(
file
);
List
<
Object
>
data
=
EasyExcel
.
read
(
inputStream
,
new
Sheet
(
1
,
1
));
Assert
.
assertEquals
(
data
.
size
(),
1
);
List
<
String
>
dataList
=
(
List
<
String
>)
data
.
get
(
0
);
Assert
.
assertEquals
(
dataList
.
get
(
0
),
"字符串00"
);
inputStream
.
close
();
inputStream
=
new
FileInputStream
(
file
);
AnalysisParam
param
=
new
AnalysisParam
(
inputStream
,
null
,
new
Object
());
param
.
setIn
(
inputStream
);
param
.
setExcelTypeEnum
(
null
);
param
.
setCustomContent
(
null
);
ExcelReader
excelReader
=
new
ExcelReader
(
param
,
new
CompatibilityDataListener
());
excelReader
.
read
(
new
Sheet
(
2
,
6
));
Assert
.
assertEquals
(
excelReader
.
getSheets
().
size
(),
3
);
Assert
.
assertTrue
(
excelReader
.
getAnalysisContext
()
!=
null
);
inputStream
.
close
();
}
private
List
<
List
<
String
>>
head
()
{
List
<
List
<
String
>>
list
=
new
ArrayList
<
List
<
String
>>();
List
<
String
>
head0
=
new
ArrayList
<
String
>();
head0
.
add
(
"字符串标题0"
);
List
<
String
>
head1
=
new
ArrayList
<
String
>();
head1
.
add
(
"字符串标题1"
);
list
.
add
(
head0
);
list
.
add
(
head1
);
return
list
;
}
private
List
<
List
<
Object
>>
listData
()
{
List
<
List
<
Object
>>
list
=
new
ArrayList
<
List
<
Object
>>();
List
<
Object
>
data0
=
new
ArrayList
<
Object
>();
data0
.
add
(
"字符串00"
);
data0
.
add
(
11
);
list
.
add
(
data0
);
return
list
;
}
private
List
<
CompatibilityData
>
data
()
{
List
<
CompatibilityData
>
list
=
new
ArrayList
<
CompatibilityData
>();
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
CompatibilityData
data
=
new
CompatibilityData
();
data
.
setString0
(
"字符串0"
+
i
);
data
.
setString1
(
"字符串1"
+
i
);
list
.
add
(
data
);
}
return
list
;
}
public
TableStyle
style
()
{
TableStyle
tableStyle
=
new
TableStyle
();
Font
headFont
=
new
Font
();
headFont
.
setBold
(
true
);
headFont
.
setFontHeightInPoints
((
short
)
22
);
headFont
.
setFontName
(
"楷体"
);
tableStyle
.
setTableHeadFont
(
headFont
);
tableStyle
.
setTableHeadBackGroundColor
(
IndexedColors
.
BLUE
);
Font
contentFont
=
new
Font
();
contentFont
.
setBold
(
true
);
contentFont
.
setFontHeightInPoints
((
short
)
22
);
contentFont
.
setFontName
(
"黑体"
);
tableStyle
.
setTableContentFont
(
contentFont
);
tableStyle
.
setTableContentBackGroundColor
(
IndexedColors
.
GREEN
);
return
tableStyle
;
}
}
src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityParameterDataTest.java
已删除
100644 → 0
浏览文件 @
466287d4
package
com.alibaba.easyexcel.test.core.compatibility
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileOutputStream
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.junit.BeforeClass
;
import
org.junit.Test
;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.ExcelWriter
;
/**
*
* @author Jiaju Zhuang
*/
public
class
CompatibilityParameterDataTest
{
private
static
File
file
;
@BeforeClass
public
static
void
init
()
{
file
=
TestFileUtil
.
createNewFile
(
"compatibilityParameter.xlsx"
);
}
@Test
public
void
t01ReadAndWrite
()
throws
Exception
{
readAndWrite1
(
file
);
readAndWrite2
(
file
);
readAndWrite3
(
file
);
readAndWrite4
(
file
);
readAndWrite5
(
file
);
readAndWrite6
(
file
);
}
private
void
readAndWrite1
(
File
file
)
throws
Exception
{
OutputStream
out
=
new
FileOutputStream
(
file
);
ExcelWriter
writer
=
EasyExcel
.
getWriter
(
out
);
Sheet
sheet1
=
new
Sheet
(
1
,
0
);
sheet1
.
setSheetName
(
"第一个sheet"
);
writer
.
write0
(
data
(),
sheet1
);
writer
.
finish
();
out
.
close
();
InputStream
inputStream
=
new
FileInputStream
(
file
);
EasyExcel
.
readBySax
(
inputStream
,
new
Sheet
(
1
,
0
),
new
CompatibilityDataListener
());
inputStream
.
close
();
}
private
void
readAndWrite2
(
File
file
)
throws
Exception
{
OutputStream
out
=
new
FileOutputStream
(
file
);
ExcelWriter
writer
=
EasyExcel
.
getWriter
(
out
,
null
,
false
);
Sheet
sheet1
=
new
Sheet
(
1
,
0
);
sheet1
.
setSheetName
(
"第一个sheet"
);
writer
.
write0
(
data
(),
sheet1
);
writer
.
finish
();
out
.
close
();
InputStream
inputStream
=
new
FileInputStream
(
file
);
EasyExcel
.
readBySax
(
inputStream
,
new
Sheet
(
1
,
0
),
new
CompatibilityDataListener
());
inputStream
.
close
();
}
private
void
readAndWrite3
(
File
file
)
throws
Exception
{
OutputStream
out
=
new
FileOutputStream
(
file
);
ExcelWriter
writer
=
new
ExcelWriter
(
out
,
null
);
Sheet
sheet1
=
new
Sheet
(
1
,
0
);
sheet1
.
setSheetName
(
"第一个sheet"
);
writer
.
write0
(
data
(),
sheet1
);
writer
.
finish
();
out
.
close
();
InputStream
inputStream
=
new
FileInputStream
(
file
);
ExcelReader
excelReader
=
new
ExcelReader
(
inputStream
,
null
,
null
,
new
CompatibilityDataListener
());
excelReader
.
read
(
new
Sheet
(
1
,
0
));
inputStream
.
close
();
}
private
void
readAndWrite4
(
File
file
)
throws
Exception
{
OutputStream
out
=
new
FileOutputStream
(
file
);
ExcelWriter
writer
=
new
ExcelWriter
(
null
,
out
,
null
,
null
);
Sheet
sheet1
=
new
Sheet
(
1
,
0
);
sheet1
.
setSheetName
(
"第一个sheet"
);
writer
.
write0
(
data
(),
sheet1
,
null
);
writer
.
finish
();
out
.
close
();
InputStream
inputStream
=
new
FileInputStream
(
file
);
ExcelReader
excelReader
=
new
ExcelReader
(
inputStream
,
null
,
new
CompatibilityDataListener
());
excelReader
.
read
(
new
Sheet
(
1
,
0
));
inputStream
.
close
();
}
private
void
readAndWrite5
(
File
file
)
throws
Exception
{
OutputStream
out
=
new
FileOutputStream
(
file
);
ExcelWriter
writer
=
EasyExcel
.
getWriterWithTemp
(
null
,
out
,
null
,
false
);
Sheet
sheet1
=
new
Sheet
(
1
,
0
);
sheet1
.
setSheetName
(
"第一个sheet"
);
writer
.
write0
(
data
(),
sheet1
,
null
);
writer
.
finish
();
out
.
close
();
InputStream
inputStream
=
new
FileInputStream
(
file
);
ExcelReader
excelReader
=
EasyExcel
.
getReader
(
inputStream
,
new
CompatibilityDataListener
());
excelReader
.
read
(
new
Sheet
(
1
,
0
));
inputStream
.
close
();
}
private
void
readAndWrite6
(
File
file
)
throws
Exception
{
OutputStream
out
=
new
FileOutputStream
(
file
);
ExcelWriter
writer
=
EasyExcel
.
getWriterWithTempAndHandler
(
null
,
out
,
null
,
false
,
null
);
Sheet
sheet1
=
new
Sheet
(
1
,
0
);
sheet1
.
setSheetName
(
"第一个sheet"
);
writer
.
write0
(
data
(),
sheet1
,
null
);
writer
.
finish
();
out
.
close
();
InputStream
inputStream
=
new
FileInputStream
(
file
);
ExcelReader
excelReader
=
EasyExcel
.
getReader
(
inputStream
,
new
CompatibilityDataListener
());
excelReader
.
read
(
new
Sheet
(
1
,
0
));
inputStream
.
close
();
}
private
List
<
CompatibilityData
>
data
()
{
List
<
CompatibilityData
>
list
=
new
ArrayList
<
CompatibilityData
>();
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
CompatibilityData
data
=
new
CompatibilityData
();
data
.
setString0
(
"字符串0"
+
i
);
data
.
setString1
(
"字符串1"
+
i
);
list
.
add
(
data
);
}
return
list
;
}
}
src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityReadData.java
已删除
100644 → 0
浏览文件 @
466287d4
package
com.alibaba.easyexcel.test.core.compatibility
;
import
lombok.Data
;
/**
* @author Jiaju Zhuang
*/
@Data
public
class
CompatibilityReadData
extends
BaseRowModel
{
private
String
string0
;
private
String
string1
;
}
src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterData.java
浏览文件 @
051e5612
...
...
@@ -4,7 +4,7 @@ import java.math.BigDecimal;
import
java.util.Date
;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.
Write
CellData
;
import
lombok.Data
;
...
...
@@ -34,5 +34,5 @@ public class ConverterData {
@ExcelProperty
(
"字符串"
)
private
String
string
;
@ExcelProperty
(
"自定义"
)
private
CellData
<?>
cellData
;
private
Write
CellData
<?>
cellData
;
}
src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataTest.java
浏览文件 @
051e5612
...
...
@@ -6,17 +6,17 @@ import java.math.BigDecimal;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.junit.BeforeClass
;
import
org.junit.FixMethodOrder
;
import
org.junit.Test
;
import
org.junit.runners.MethodSorters
;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.
Write
CellData
;
import
com.alibaba.excel.util.DateUtils
;
import
com.alibaba.excel.util.FileUtils
;
import
org.junit.BeforeClass
;
import
org.junit.FixMethodOrder
;
import
org.junit.Test
;
import
org.junit.runners.MethodSorters
;
/**
*
* @author Jiaju Zhuang
...
...
@@ -110,7 +110,7 @@ public class ConverterDataTest {
converterData
.
setDoubleData
(
1.0
);
converterData
.
setFloatData
((
float
)
1.0
);
converterData
.
setString
(
"测试"
);
converterData
.
setCellData
(
new
CellData
(
"自定义"
));
converterData
.
setCellData
(
new
WriteCellData
<>
(
"自定义"
));
list
.
add
(
converterData
);
return
list
;
}
...
...
src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandler.java
浏览文件 @
051e5612
...
...
@@ -2,12 +2,8 @@ package com.alibaba.easyexcel.test.core.handler;
import
java.util.List
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.junit.Assert
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.alibaba.excel.write.handler.RowWriteHandler
;
import
com.alibaba.excel.write.handler.SheetWriteHandler
;
...
...
@@ -16,9 +12,11 @@ import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.junit.Assert
;
/**
*
*
* @author JiaJu Zhuang
**/
public
class
WriteHandler
implements
WorkbookWriteHandler
,
SheetWriteHandler
,
RowWriteHandler
,
CellWriteHandler
{
...
...
@@ -36,7 +34,6 @@ public class WriteHandler implements WorkbookWriteHandler, SheetWriteHandler, Ro
private
long
afterWorkbookCreate
=
0L
;
private
long
afterWorkbookDispose
=
0L
;
@Override
public
void
beforeCellCreate
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Row
row
,
Head
head
,
Integer
columnIndex
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
...
...
@@ -80,7 +77,7 @@ public class WriteHandler implements WorkbookWriteHandler, SheetWriteHandler, Ro
@Override
public
void
afterCellDataConverted
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
CellData
cellData
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
WriteCellData
<?>
cellData
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
Assert
.
assertEquals
(
1L
,
beforeCellCreate
);
Assert
.
assertEquals
(
1L
,
afterCellCreate
);
Assert
.
assertEquals
(
0L
,
afterCellDataConverted
);
...
...
@@ -98,7 +95,7 @@ public class WriteHandler implements WorkbookWriteHandler, SheetWriteHandler, Ro
@Override
public
void
afterCellDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
List
<
Write
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
if
(
isHead
)
{
Assert
.
assertEquals
(
1L
,
beforeCellCreate
);
Assert
.
assertEquals
(
1L
,
afterCellCreate
);
...
...
src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataTest.java
浏览文件 @
051e5612
...
...
@@ -4,20 +4,10 @@ import java.io.File;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.apache.poi.ss.usermodel.BorderStyle
;
import
org.apache.poi.ss.usermodel.FillPatternType
;
import
org.apache.poi.ss.usermodel.Font
;
import
org.apache.poi.ss.usermodel.HorizontalAlignment
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
org.apache.poi.ss.usermodel.VerticalAlignment
;
import
org.junit.BeforeClass
;
import
org.junit.FixMethodOrder
;
import
org.junit.Test
;
import
org.junit.runners.MethodSorters
;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.DataFormatData
;
import
com.alibaba.excel.write.merge.LoopMergeStrategy
;
import
com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy
;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
...
...
@@ -27,8 +17,18 @@ import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import
com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy
;
import
com.alibaba.excel.write.style.row.SimpleRowHeightStyleStrategy
;
import
org.apache.poi.ss.usermodel.BorderStyle
;
import
org.apache.poi.ss.usermodel.FillPatternType
;
import
org.apache.poi.ss.usermodel.Font
;
import
org.apache.poi.ss.usermodel.HorizontalAlignment
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
org.apache.poi.ss.usermodel.VerticalAlignment
;
import
org.junit.BeforeClass
;
import
org.junit.FixMethodOrder
;
import
org.junit.Test
;
import
org.junit.runners.MethodSorters
;
/**
*
* @author Jiaju Zhuang
*/
@FixMethodOrder
(
MethodSorters
.
NAME_ASCENDING
)
...
...
@@ -60,7 +60,9 @@ public class StyleDataTest {
protected
WriteCellStyle
headCellStyle
(
Head
head
)
{
WriteCellStyle
writeCellStyle
=
new
WriteCellStyle
();
writeCellStyle
.
setFillPatternType
(
FillPatternType
.
SOLID_FOREGROUND
);
writeCellStyle
.
setDataFormat
((
short
)
0
);
DataFormatData
dataFormatData
=
new
DataFormatData
();
dataFormatData
.
setIndex
((
short
)
0
);
writeCellStyle
.
setDataFormatData
(
dataFormatData
);
writeCellStyle
.
setHidden
(
false
);
writeCellStyle
.
setLocked
(
true
);
writeCellStyle
.
setQuotePrefix
(
true
);
...
...
src/test/java/com/alibaba/easyexcel/test/demo/read/CustomStringStringConverter.java
浏览文件 @
051e5612
...
...
@@ -2,8 +2,9 @@ package com.alibaba.easyexcel.test.demo.read;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.GlobalConfiguration
;
import
com.alibaba.excel.metadata.data.ReadCellData
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
/**
...
...
@@ -13,7 +14,7 @@ import com.alibaba.excel.metadata.property.ExcelContentProperty;
*/
public
class
CustomStringStringConverter
implements
Converter
<
String
>
{
@Override
public
Class
supportJavaTypeKey
()
{
public
Class
<?>
supportJavaTypeKey
()
{
return
String
.
class
;
}
...
...
@@ -34,7 +35,7 @@ public class CustomStringStringConverter implements Converter<String> {
* @return
*/
@Override
public
String
convertToJavaData
(
CellData
cellData
,
ExcelContentProperty
contentProperty
,
public
String
convertToJavaData
(
ReadCellData
<?>
cellData
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
"自定义:"
+
cellData
.
getStringValue
();
}
...
...
@@ -51,9 +52,9 @@ public class CustomStringStringConverter implements Converter<String> {
* @return
*/
@Override
public
CellData
convertToExcelData
(
String
value
,
ExcelContentProperty
contentProperty
,
public
WriteCellData
<?>
convertToExcelData
(
String
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
value
);
return
new
WriteCellData
<>
(
value
);
}
}
src/test/java/com/alibaba/easyexcel/test/demo/write/CustomCellWriteHandler.java
浏览文件 @
051e5612
...
...
@@ -2,6 +2,12 @@ package com.alibaba.easyexcel.test.demo.write;
import
java.util.List
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
org.apache.poi.common.usermodel.HyperlinkType
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.CreationHelper
;
...
...
@@ -9,12 +15,6 @@ import org.apache.poi.ss.usermodel.Hyperlink;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.metadata.data.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
*
...
...
@@ -26,7 +26,7 @@ public class CustomCellWriteHandler implements CellWriteHandler {
@Override
public
void
afterCellDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
List
<
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
List
<
Write
CellData
<?>>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
// 这里可以对cell进行任何操作
LOGGER
.
info
(
"第{}行,第{}列写入完成。"
,
cell
.
getRowIndex
(),
cell
.
getColumnIndex
());
if
(
isHead
&&
cell
.
getColumnIndex
()
==
0
)
{
...
...
src/test/java/com/alibaba/easyexcel/test/demo/write/CustomStringStringConverter.java
浏览文件 @
051e5612
...
...
@@ -2,8 +2,9 @@ package com.alibaba.easyexcel.test.demo.write;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.GlobalConfiguration
;
import
com.alibaba.excel.metadata.data.ReadCellData
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
/**
...
...
@@ -13,7 +14,7 @@ import com.alibaba.excel.metadata.property.ExcelContentProperty;
*/
public
class
CustomStringStringConverter
implements
Converter
<
String
>
{
@Override
public
Class
supportJavaTypeKey
()
{
public
Class
<?>
supportJavaTypeKey
()
{
return
String
.
class
;
}
...
...
@@ -25,16 +26,13 @@ public class CustomStringStringConverter implements Converter<String> {
/**
* 这里是读的时候会调用 不用管
*
* @param cellData
* NotNull
* @param contentProperty
* Nullable
* @param globalConfiguration
* NotNull
* @param cellData NotNull
* @param contentProperty Nullable
* @param globalConfiguration NotNull
* @return
*/
@Override
public
String
convertToJavaData
(
CellData
cellData
,
ExcelContentProperty
contentProperty
,
public
String
convertToJavaData
(
ReadCellData
<?>
cellData
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
cellData
.
getStringValue
();
}
...
...
@@ -42,18 +40,15 @@ public class CustomStringStringConverter implements Converter<String> {
/**
* 这里是写的时候会调用 不用管
*
* @param value
* NotNull
* @param contentProperty
* Nullable
* @param globalConfiguration
* NotNull
* @param value NotNull
* @param contentProperty Nullable
* @param globalConfiguration NotNull
* @return
*/
@Override
public
CellData
convertToExcelData
(
String
value
,
ExcelContentProperty
contentProperty
,
public
WriteCellData
<?>
convertToExcelData
(
String
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
"自定义:"
+
value
);
return
new
WriteCellData
<>
(
"自定义:"
+
value
);
}
}
src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatData.java
浏览文件 @
051e5612
package
com.alibaba.easyexcel.test.temp.dataformat
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.data.ReadCellData
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
lombok.Data
;
...
...
@@ -11,6 +12,6 @@ import lombok.Data;
**/
@Data
public
class
DataFormatData
{
private
CellData
<
String
>
date
;
private
CellData
<
String
>
num
;
private
Read
CellData
<
String
>
date
;
private
Read
CellData
<
String
>
num
;
}
src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatTest.java
浏览文件 @
051e5612
...
...
@@ -9,6 +9,12 @@ import java.util.List;
import
java.util.Locale
;
import
java.util.regex.Pattern
;
import
com.alibaba.easyexcel.test.core.dataformat.DateFormatData
;
import
com.alibaba.easyexcel.test.temp.Lock2Test
;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.fastjson.JSON
;
import
org.apache.poi.openxml4j.exceptions.InvalidFormatException
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.DataFormatter
;
...
...
@@ -21,12 +27,6 @@ import org.junit.Test;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.easyexcel.test.core.dataformat.DateFormatData
;
import
com.alibaba.easyexcel.test.temp.Lock2Test
;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.fastjson.JSON
;
/**
* 格式测试
*
...
...
@@ -44,9 +44,9 @@ public class DataFormatTest {
EasyExcel
.
read
(
file
,
DataFormatData
.
class
,
null
).
sheet
().
headRowNumber
(
0
).
doReadSync
();
LOGGER
.
info
(
"数据:{}"
,
list
.
size
());
for
(
DataFormatData
data
:
list
)
{
Short
dataFormat
=
data
.
getDate
().
getDataFormat
();
Short
dataFormat
=
data
.
getDate
().
getDataFormat
Data
().
getIndex
();
String
dataFormatString
=
data
.
getDate
().
get
DataFormatString
();
String
dataFormatString
=
data
.
getDate
().
get
FormulaData
().
getFormulaValue
();
if
(
dataFormat
==
null
||
dataFormatString
==
null
)
{
...
...
@@ -67,9 +67,9 @@ public class DataFormatTest {
EasyExcel
.
read
(
file
,
DataFormatData
.
class
,
null
).
sheet
().
headRowNumber
(
0
).
doReadSync
();
LOGGER
.
info
(
"数据:{}"
,
list
.
size
());
for
(
DataFormatData
data
:
list
)
{
Short
dataFormat
=
data
.
getDate
().
getDataFormat
();
Short
dataFormat
=
data
.
getDate
().
getDataFormat
Data
().
getIndex
();
String
dataFormatString
=
data
.
getDate
().
get
DataFormatString
();
String
dataFormatString
=
data
.
getDate
().
get
FormulaData
().
getFormulaValue
();
if
(
dataFormat
==
null
||
dataFormatString
==
null
)
{
...
...
src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadTest.java
浏览文件 @
051e5612
package
com.alibaba.easyexcel.test.temp.read
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.cache.Ehcache
;
import
org.junit.Ignore
;
import
org.junit.Test
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.cache.Ehcache
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
/**
* 临时测试
*
...
...
@@ -22,13 +19,6 @@ import com.alibaba.excel.support.ExcelTypeEnum;
@Ignore
public
class
HeadReadTest
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
HeadReadTest
.
class
);
@Test
public
void
testread
()
throws
Exception
{
FileInputStream
fileInputStream
=
new
FileInputStream
(
"D://test/t1.xlsx"
);
ExcelReader
excelReader
=
new
ExcelReader
(
fileInputStream
,
ExcelTypeEnum
.
XLSX
,
null
,
new
TestListener
());
excelReader
.
read
();
}
@Test
public
void
test
()
throws
Exception
{
...
...
src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteCellHandler.java
浏览文件 @
051e5612
package
com.alibaba.easyexcel.test.temp.simple
;
import
com.alibaba.excel.metadata.data.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.data.WriteCellData
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
...
...
@@ -21,7 +21,7 @@ public class WriteCellHandler implements CellWriteHandler {
@Override
public
void
afterCellDataConverted
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
CellData
cellData
,
Cell
cell
,
Head
head
,
Integer
integer
,
Boolean
isHead
)
{
WriteCellData
<?>
cellData
,
Cell
cell
,
Head
head
,
Integer
integer
,
Boolean
isHead
)
{
if
(!
isHead
)
{
CreationHelper
createHelper
=
writeSheetHolder
.
getSheet
().
getWorkbook
().
getCreationHelper
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录