Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
不停的脚步
easyexcel
提交
5ac5c0e8
E
easyexcel
项目概览
不停的脚步
/
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,体验更适合开发者的 AI 搜索 >>
提交
5ac5c0e8
编写于
7月 25, 2019
作者:
Z
zhuangjiaju
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化读写的写法,方便读写
上级
e2bb1999
变更
58
展开全部
隐藏空白更改
内联
并排
Showing
58 changed file
with
1751 addition
and
2646 deletion
+1751
-2646
src/main/java/com/alibaba/excel/EasyExcelFactory.java
src/main/java/com/alibaba/excel/EasyExcelFactory.java
+29
-14
src/main/java/com/alibaba/excel/ExcelReader.java
src/main/java/com/alibaba/excel/ExcelReader.java
+75
-50
src/main/java/com/alibaba/excel/ExcelWriter.java
src/main/java/com/alibaba/excel/ExcelWriter.java
+89
-59
src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java
src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java
+3
-3
src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
...in/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
+11
-8
src/main/java/com/alibaba/excel/analysis/ExcelExecutor.java
src/main/java/com/alibaba/excel/analysis/ExcelExecutor.java
+2
-2
src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
...n/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
+17
-17
src/main/java/com/alibaba/excel/analysis/v03/handlers/BOFRecordHandler.java
...alibaba/excel/analysis/v03/handlers/BOFRecordHandler.java
+15
-13
src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
.../java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
+34
-31
src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java
...excel/analysis/v07/handlers/ProcessResultCellHandler.java
+1
-1
src/main/java/com/alibaba/excel/context/AnalysisContext.java
src/main/java/com/alibaba/excel/context/AnalysisContext.java
+27
-5
src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java
...n/java/com/alibaba/excel/context/AnalysisContextImpl.java
+89
-16
src/main/java/com/alibaba/excel/context/WriteContext.java
src/main/java/com/alibaba/excel/context/WriteContext.java
+19
-19
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
...main/java/com/alibaba/excel/context/WriteContextImpl.java
+111
-110
src/main/java/com/alibaba/excel/event/AbstractIgnoreExceptionReadListener.java
...baba/excel/event/AbstractIgnoreExceptionReadListener.java
+27
-0
src/main/java/com/alibaba/excel/event/SyncReadListener.java
src/main/java/com/alibaba/excel/event/SyncReadListener.java
+31
-0
src/main/java/com/alibaba/excel/exception/ExcelCommonException.java
...ava/com/alibaba/excel/exception/ExcelCommonException.java
+22
-0
src/main/java/com/alibaba/excel/metadata/CellData.java
src/main/java/com/alibaba/excel/metadata/CellData.java
+14
-21
src/main/java/com/alibaba/excel/metadata/Sheet.java
src/main/java/com/alibaba/excel/metadata/Sheet.java
+8
-14
src/main/java/com/alibaba/excel/metadata/Table.java
src/main/java/com/alibaba/excel/metadata/Table.java
+6
-4
src/main/java/com/alibaba/excel/metadata/holder/read/AbstractWriteConfiguration.java
...xcel/metadata/holder/read/AbstractWriteConfiguration.java
+0
-494
src/main/java/com/alibaba/excel/metadata/holder/read/ReadConfiguration.java
...alibaba/excel/metadata/holder/read/ReadConfiguration.java
+0
-39
src/main/java/com/alibaba/excel/metadata/holder/read/SheetHolder.java
...a/com/alibaba/excel/metadata/holder/read/SheetHolder.java
+0
-235
src/main/java/com/alibaba/excel/metadata/holder/read/TableHolder.java
...a/com/alibaba/excel/metadata/holder/read/TableHolder.java
+0
-138
src/main/java/com/alibaba/excel/metadata/holder/read/WorkbookHolder.java
...om/alibaba/excel/metadata/holder/read/WorkbookHolder.java
+0
-325
src/main/java/com/alibaba/excel/metadata/holder/write/SheetHolder.java
.../com/alibaba/excel/metadata/holder/write/SheetHolder.java
+0
-234
src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java
...va/com/alibaba/excel/read/builder/ExcelReaderBuilder.java
+232
-3
src/main/java/com/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java
...m/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java
+189
-0
src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java
.../alibaba/excel/read/listener/ModelBuildEventListener.java
+18
-20
src/main/java/com/alibaba/excel/read/listener/ReadListener.java
...in/java/com/alibaba/excel/read/listener/ReadListener.java
+1
-1
src/main/java/com/alibaba/excel/read/metadata/ReadSheet.java
src/main/java/com/alibaba/excel/read/metadata/ReadSheet.java
+11
-0
src/main/java/com/alibaba/excel/read/metadata/ReadWorkbook.java
...in/java/com/alibaba/excel/read/metadata/ReadWorkbook.java
+32
-2
src/main/java/com/alibaba/excel/read/metadata/holder/AbstractReadHolder.java
...libaba/excel/read/metadata/holder/AbstractReadHolder.java
+19
-12
src/main/java/com/alibaba/excel/read/metadata/holder/ReadRowHolder.java
...com/alibaba/excel/read/metadata/holder/ReadRowHolder.java
+6
-21
src/main/java/com/alibaba/excel/read/metadata/holder/ReadSheetHolder.java
...m/alibaba/excel/read/metadata/holder/ReadSheetHolder.java
+85
-0
src/main/java/com/alibaba/excel/read/metadata/holder/ReadWorkbookHolder.java
...libaba/excel/read/metadata/holder/ReadWorkbookHolder.java
+185
-0
src/main/java/com/alibaba/excel/read/metadata/holder/SheetHolder.java
...a/com/alibaba/excel/read/metadata/holder/SheetHolder.java
+0
-239
src/main/java/com/alibaba/excel/read/metadata/holder/TableHolder.java
...a/com/alibaba/excel/read/metadata/holder/TableHolder.java
+0
-138
src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java
src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java
+21
-8
src/main/java/com/alibaba/excel/util/WorkBookUtil.java
src/main/java/com/alibaba/excel/util/WorkBookUtil.java
+13
-13
src/main/java/com/alibaba/excel/write/ExcelBuilder.java
src/main/java/com/alibaba/excel/write/ExcelBuilder.java
+8
-8
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
+49
-49
src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java
...a/com/alibaba/excel/write/builder/ExcelWriterBuilder.java
+55
-47
src/main/java/com/alibaba/excel/write/builder/ExcelWriterSheetBuilder.java
.../alibaba/excel/write/builder/ExcelWriterSheetBuilder.java
+45
-33
src/main/java/com/alibaba/excel/write/builder/ExcelWriterTableBuilder.java
.../alibaba/excel/write/builder/ExcelWriterTableBuilder.java
+36
-32
src/main/java/com/alibaba/excel/write/handler/CellWriteHandler.java
...ava/com/alibaba/excel/write/handler/CellWriteHandler.java
+10
-10
src/main/java/com/alibaba/excel/write/handler/RowWriteHandler.java
...java/com/alibaba/excel/write/handler/RowWriteHandler.java
+10
-10
src/main/java/com/alibaba/excel/write/handler/SheetWriteHandler.java
...va/com/alibaba/excel/write/handler/SheetWriteHandler.java
+8
-8
src/main/java/com/alibaba/excel/write/handler/WorkbookWriteHandler.java
...com/alibaba/excel/write/handler/WorkbookWriteHandler.java
+3
-3
src/main/java/com/alibaba/excel/write/metadata/WriteWorkbook.java
.../java/com/alibaba/excel/write/metadata/WriteWorkbook.java
+1
-1
src/main/java/com/alibaba/excel/write/metadata/holder/UTils.java
...n/java/com/alibaba/excel/write/metadata/holder/UTils.java
+0
-86
src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java
...alibaba/excel/write/metadata/holder/WriteSheetHolder.java
+10
-12
src/main/java/com/alibaba/excel/write/metadata/holder/WriteTableHolder.java
...alibaba/excel/write/metadata/holder/WriteTableHolder.java
+6
-6
src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java
...baba/excel/write/metadata/holder/WriteWorkbookHolder.java
+11
-1
src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java
.../alibaba/excel/write/style/AbstractCellStyleStrategy.java
+11
-10
src/main/java/com/alibaba/excel/write/style/column/AbstractColumnWidthStyleStrategy.java
.../write/style/column/AbstractColumnWidthStyleStrategy.java
+9
-7
src/main/java/com/alibaba/excel/write/style/row/AbstractRowHeightStyleStrategy.java
...excel/write/style/row/AbstractRowHeightStyleStrategy.java
+6
-6
src/test/java/com/alibaba/easyexcel/test/read/large/LargeData07Test.java
...om/alibaba/easyexcel/test/read/large/LargeData07Test.java
+31
-8
未找到文件。
src/main/java/com/alibaba/excel/EasyExcelFactory.java
浏览文件 @
5ac5c0e8
...
...
@@ -8,7 +8,9 @@ import java.util.List;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.event.WriteHandler
;
import
com.alibaba.excel.write.metadata.Sheet
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.read.builder.ExcelReaderBuilder
;
import
com.alibaba.excel.read.builder.ExcelReaderSheetBuilder
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.builder.ExcelWriterBuilder
;
import
com.alibaba.excel.write.builder.ExcelWriterSheetBuilder
;
...
...
@@ -29,7 +31,9 @@ public class EasyExcelFactory {
* @param sheet
* read sheet.
* @return analysis result.
* @deprecated please use 'EasyExcelFactory.read().file(in).sheet(sheetNo).doReadSync();'
*/
@Deprecated
public
static
List
<
Object
>
read
(
InputStream
in
,
Sheet
sheet
)
{
final
List
<
Object
>
rows
=
new
ArrayList
<
Object
>();
new
ExcelReader
(
in
,
null
,
new
AnalysisEventListener
<
Object
>()
{
...
...
@@ -53,7 +57,9 @@ public class EasyExcelFactory {
* read sheet.
* @param listener
* Callback method after each row is parsed.
* @deprecated please use 'EasyExcelFactory.read().registerReadListener(listener).file(in).sheet(sheetNo).doRead().finish();'
*/
@Deprecated
public
static
void
readBySax
(
InputStream
in
,
Sheet
sheet
,
AnalysisEventListener
listener
)
{
new
ExcelReader
(
in
,
null
,
listener
).
read
(
sheet
);
}
...
...
@@ -66,7 +72,9 @@ public class EasyExcelFactory {
* @param listener
* Callback method after each row is parsed.
* @return ExcelReader.
* @deprecated please use {@link EasyExcelFactory#read()} build 'ExcelReader'
*/
@Deprecated
public
static
ExcelReader
getReader
(
InputStream
in
,
AnalysisEventListener
listener
)
{
return
new
ExcelReader
(
in
,
null
,
listener
);
}
...
...
@@ -77,12 +85,11 @@ public class EasyExcelFactory {
* @param outputStream
* the java OutputStream you wish to write the value to.
* @return new ExcelWriter.
* @deprecated please use {@link EasyExcelFactory#write
rBuilder
()}
* @deprecated please use {@link EasyExcelFactory#write()}
*/
@Deprecated
public
static
ExcelWriter
getWriter
(
OutputStream
outputStream
)
{
return
writerBuilder
().
outputFile
(
outputStream
).
autoCloseStream
(
Boolean
.
FALSE
).
convertAllFiled
(
Boolean
.
FALSE
)
.
build
();
return
write
().
file
(
outputStream
).
autoCloseStream
(
Boolean
.
FALSE
).
convertAllFiled
(
Boolean
.
FALSE
).
build
();
}
/**
...
...
@@ -95,12 +102,12 @@ public class EasyExcelFactory {
* @param needHead
* Do you need to write the header to the file?
* @return new ExcelWriter
* @deprecated please use {@link EasyExcelFactory#write
rBuilder
()}
* @deprecated please use {@link EasyExcelFactory#write()}
*/
@Deprecated
public
static
ExcelWriter
getWriter
(
OutputStream
outputStream
,
ExcelTypeEnum
typeEnum
,
boolean
needHead
)
{
return
write
rBuilder
().
outputFile
(
outputStream
).
excelType
(
typeEnum
).
needHead
(
needHead
)
.
autoCloseStream
(
Boolean
.
FALSE
).
convertAllFiled
(
Boolean
.
FALSE
).
build
();
return
write
().
file
(
outputStream
).
excelType
(
typeEnum
).
needHead
(
needHead
).
autoCloseStream
(
Boolean
.
FALSE
)
.
convertAllFiled
(
Boolean
.
FALSE
).
build
();
}
/**
...
...
@@ -114,12 +121,12 @@ public class EasyExcelFactory {
* @param typeEnum
* 03 or 07
* @return new ExcelWriter
* @deprecated please use {@link EasyExcelFactory#write
rBuilder
()}
* @deprecated please use {@link EasyExcelFactory#write()}
*/
@Deprecated
public
static
ExcelWriter
getWriterWithTemp
(
InputStream
temp
,
OutputStream
outputStream
,
ExcelTypeEnum
typeEnum
,
boolean
needHead
)
{
return
write
rBuilder
().
withTemplate
(
temp
).
outputF
ile
(
outputStream
).
excelType
(
typeEnum
).
needHead
(
needHead
)
return
write
().
withTemplate
(
temp
).
f
ile
(
outputStream
).
excelType
(
typeEnum
).
needHead
(
needHead
)
.
autoCloseStream
(
Boolean
.
FALSE
).
convertAllFiled
(
Boolean
.
FALSE
).
build
();
}
...
...
@@ -137,24 +144,32 @@ public class EasyExcelFactory {
* @param handler
* User-defined callback
* @return new ExcelWriter
* @deprecated please use {@link EasyExcelFactory#write
rBuilder
()}
* @deprecated please use {@link EasyExcelFactory#write()}
*/
@Deprecated
public
static
ExcelWriter
getWriterWithTempAndHandler
(
InputStream
temp
,
OutputStream
outputStream
,
ExcelTypeEnum
typeEnum
,
boolean
needHead
,
WriteHandler
handler
)
{
return
write
rBuilder
().
withTemplate
(
temp
).
outputF
ile
(
outputStream
).
excelType
(
typeEnum
).
needHead
(
needHead
)
return
write
().
withTemplate
(
temp
).
f
ile
(
outputStream
).
excelType
(
typeEnum
).
needHead
(
needHead
)
.
registerWriteHandler
(
handler
).
autoCloseStream
(
Boolean
.
FALSE
).
convertAllFiled
(
Boolean
.
FALSE
).
build
();
}
public
static
ExcelWriterBuilder
write
rBuilder
()
{
public
static
ExcelWriterBuilder
write
()
{
return
new
ExcelWriterBuilder
();
}
public
static
ExcelWriterSheetBuilder
writerSheet
Builder
()
{
public
static
ExcelWriterSheetBuilder
writerSheet
()
{
return
new
ExcelWriterSheetBuilder
();
}
public
static
ExcelWriterTableBuilder
writerTable
Builder
()
{
public
static
ExcelWriterTableBuilder
writerTable
()
{
return
new
ExcelWriterTableBuilder
();
}
public
static
ExcelReaderBuilder
read
()
{
return
new
ExcelReaderBuilder
();
}
public
static
ExcelReaderSheetBuilder
readSheet
()
{
return
new
ExcelReaderSheetBuilder
();
}
}
src/main/java/com/alibaba/excel/ExcelReader.java
浏览文件 @
5ac5c0e8
package
com.alibaba.excel
;
import
java.io.InputStream
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.slf4j.Logger
;
...
...
@@ -9,12 +10,15 @@ import org.slf4j.LoggerFactory;
import
com.alibaba.excel.analysis.ExcelAnalyser
;
import
com.alibaba.excel.analysis.ExcelAnalyserImpl
;
import
com.alibaba.excel.analysis.ExcelExecutor
;
import
com.alibaba.excel.cache.MapCache
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.parameter.AnalysisParam
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
import
com.alibaba.excel.read.metadata.ReadWorkbook
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
/**
...
...
@@ -43,6 +47,7 @@ public class ExcelReader {
* {@link AnalysisEventListener#invoke(Object, AnalysisContext) }AnalysisContext
* @param eventListener
* Callback method after each row is parsed.
* @deprecated please use {@link EasyExcelFactory#read()} build 'ExcelReader'
*/
@Deprecated
public
ExcelReader
(
InputStream
in
,
ExcelTypeEnum
excelTypeEnum
,
Object
customContent
,
...
...
@@ -59,24 +64,11 @@ public class ExcelReader {
* {@link AnalysisEventListener#invoke(Object, AnalysisContext) }AnalysisContext
* @param eventListener
* Callback method after each row is parsed
* @deprecated please use {@link EasyExcelFactory#read()} build 'ExcelReader'
*/
@Deprecated
public
ExcelReader
(
InputStream
in
,
Object
customContent
,
AnalysisEventListener
eventListener
)
{
this
(
in
,
customContent
,
eventListener
,
null
,
true
);
}
/**
* Create new reader
*
* @param in
* the POI filesystem that contains the Workbook stream
* @param customContent
* {@link AnalysisEventListener#invoke(Object, AnalysisContext) }AnalysisContext
* @param eventListener
* Callback method after each row is parsed
*/
public
ExcelReader
(
InputStream
in
,
Object
customContent
,
AnalysisEventListener
eventListener
,
List
<
Converter
>
converters
)
{
this
(
in
,
customContent
,
eventListener
,
converters
,
true
);
this
(
in
,
customContent
,
eventListener
,
true
);
}
/**
...
...
@@ -86,6 +78,7 @@ public class ExcelReader {
* old param Deprecated
* @param eventListener
* Callback method after each row is parsed.
* @deprecated please use {@link EasyExcelFactory#read()} build 'ExcelReader'
*/
@Deprecated
public
ExcelReader
(
AnalysisParam
param
,
AnalysisEventListener
eventListener
)
{
...
...
@@ -96,59 +89,59 @@ public class ExcelReader {
* Create new reader
*
* @param in
* the POI filesystem that contains the Workbook stream
* @param excelTypeEnum
* 03 or 07
* @param customContent
* {@link AnalysisEventListener#invoke(Object, AnalysisContext) }AnalysisContext
* @param eventListener
* Callback method after each row is parsed.
* @param trim
* The content of the form is empty and needs to be empty. The purpose is to be fault-tolerant, because
* there are often table contents with spaces that can not be converted into custom types. For example:
* '1234 ' contain a space cannot be converted to int.
* @deprecated please use {@link EasyExcelFactory#read()} build 'ExcelReader'
*/
@Deprecated
public
ExcelReader
(
InputStream
in
,
ExcelTypeEnum
excelTypeEnum
,
Object
customContent
,
AnalysisEventListener
eventListener
,
boolean
trim
)
{
this
(
in
,
excelTypeEnum
,
customContent
,
eventListener
,
null
,
trim
);
public
ExcelReader
(
InputStream
in
,
Object
customContent
,
AnalysisEventListener
eventListener
,
boolean
trim
)
{
this
(
in
,
null
,
customContent
,
eventListener
,
trim
);
}
/**
* Create new reader
*
* @param in
* the POI filesystem that contains the Workbook stream
* @param excelTypeEnum
* 03 or 07
* @param customContent
* {@link AnalysisEventListener#invoke(Object, AnalysisContext) }AnalysisContext
* @param eventListener
* Callback method after each row is parsed.
* @param trim
* The content of the form is empty and needs to be empty. The purpose is to be fault-tolerant, because
* there are often table contents with spaces that can not be converted into custom types. For example:
* '1234 ' contain a space cannot be converted to int.
* @deprecated please use {@link EasyExcelFactory#read()} build 'ExcelReader'
*/
public
ExcelReader
(
InputStream
in
,
Object
customContent
,
AnalysisEventListener
eventListener
,
List
<
Converter
>
converters
,
boolean
trim
)
{
this
(
in
,
ExcelTypeEnum
.
valueOf
(
in
),
customContent
,
eventListener
,
converters
,
trim
);
}
public
ExcelReader
(
InputStream
in
,
Object
excelTypeEnum
,
AnalysisEventListener
<
Object
>
eventListener
,
boolean
trim
)
{
this
(
in
,
ExcelTypeEnum
.
valueOf
(
in
),
null
,
eventListener
,
null
,
trim
);
}
@Deprecated
public
ExcelReader
(
InputStream
in
,
ExcelTypeEnum
excelTypeEnum
,
Object
customContent
,
AnalysisEventListener
eventListener
,
List
<
Converter
>
converters
,
boolean
trim
)
{
validateParam
(
in
,
eventListener
);
analyser
=
new
ExcelAnalyserImpl
(
in
,
excelTypeEnum
,
customContent
,
eventListener
,
trim
);
initConverters
(
analyser
,
converters
);
AnalysisEventListener
eventListener
,
boolean
trim
)
{
ReadWorkbook
readWorkbook
=
new
ReadWorkbook
();
readWorkbook
.
setInputStream
(
in
);
readWorkbook
.
setExcelType
(
excelTypeEnum
);
readWorkbook
.
setCustomObject
(
customContent
);
if
(
eventListener
!=
null
)
{
List
<
ReadListener
>
customReadListenerList
=
new
ArrayList
<
ReadListener
>();
customReadListenerList
.
add
(
eventListener
);
readWorkbook
.
setCustomReadListenerList
(
customReadListenerList
);
}
readWorkbook
.
setAutoTrim
(
trim
);
readWorkbook
.
setAutoCloseStream
(
Boolean
.
FALSE
);
readWorkbook
.
setMandatoryUseInputStream
(
Boolean
.
TRUE
);
readWorkbook
.
setReadCache
(
new
MapCache
());
readWorkbook
.
setConvertAllFiled
(
Boolean
.
FALSE
);
excelAnalyser
=
new
ExcelAnalyserImpl
(
readWorkbook
);
}
private
void
initConverters
(
ExcelAnalyser
analyser
,
List
<
Converter
>
converters
)
{
if
(
converters
!=
null
&&
converters
.
size
()
>
0
)
{
for
(
Converter
c
:
converters
)
{
analyser
.
getAnalysisContext
().
getConverterRegistryCenter
().
register
(
c
);
}
}
public
ExcelReader
(
ReadWorkbook
readWorkbook
)
{
excelAnalyser
=
new
ExcelAnalyserImpl
(
readWorkbook
);
}
/**
...
...
@@ -160,20 +153,42 @@ public class ExcelReader {
LOGGER
.
warn
(
"Excel doesn't have any sheets."
);
return
;
}
for
(
Sheet
s
heet
:
excelExecutor
.
sheetList
())
{
read
(
s
heet
);
for
(
ReadSheet
readS
heet
:
excelExecutor
.
sheetList
())
{
read
(
readS
heet
);
}
}
/**
* Parse the specified sheet,SheetNo start from 1
*
* @param readSheet
* Read sheet
*/
public
ExcelReader
read
(
ReadSheet
readSheet
)
{
checkFinished
();
excelAnalyser
.
analysis
(
readSheet
);
return
this
;
}
/**
* Parse the specified sheet,SheetNo start from 1
*
* @param sheet
* Read sheet
* @deprecated please us {@link #read(ReadSheet)}
*/
@Deprecated
public
void
read
(
Sheet
sheet
)
{
checkFinished
();
excelAnalyser
.
analysis
(
sheet
);
ReadSheet
readSheet
=
null
;
if
(
sheet
!=
null
)
{
readSheet
=
new
ReadSheet
();
readSheet
.
setSheetNo
(
sheet
.
getSheetNo
()
-
1
);
readSheet
.
setSheetName
(
sheet
.
getSheetName
());
readSheet
.
setClazz
(
sheet
.
getClazz
());
readSheet
.
setHead
(
sheet
.
getHead
());
readSheet
.
setHeadRowNumber
(
sheet
.
getHeadLineMun
());
}
read
(
readSheet
);
}
/**
...
...
@@ -223,7 +238,17 @@ public class ExcelReader {
*/
@Deprecated
public
List
<
Sheet
>
getSheets
()
{
return
excelExecutor
().
sheetList
();
List
<
ReadSheet
>
sheetList
=
excelExecutor
().
sheetList
();
List
<
Sheet
>
sheets
=
new
ArrayList
<
Sheet
>();
if
(
sheetList
==
null
||
sheetList
.
isEmpty
())
{
return
sheets
;
}
for
(
ReadSheet
readSheet
:
sheetList
)
{
Sheet
sheet
=
new
Sheet
(
readSheet
.
getSheetNo
()
+
1
);
sheet
.
setSheetName
(
readSheet
.
getSheetName
());
sheets
.
add
(
sheet
);
}
return
sheets
;
}
/**
...
...
src/main/java/com/alibaba/excel/ExcelWriter.java
浏览文件 @
5ac5c0e8
...
...
@@ -4,18 +4,19 @@ import java.io.InputStream;
import
java.io.OutputStream
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.write.metadata.Sheet
;
import
com.alibaba.excel.write.metadata.Table
;
import
com.alibaba.excel.write.metadata.Workbook
;
import
com.alibaba.excel.exception.ExcelGenerateException
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.metadata.Table
;
import
com.alibaba.excel.parameter.GenerateParam
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.ExcelBuilder
;
import
com.alibaba.excel.write.ExcelBuilderImpl
;
import
com.alibaba.excel.write.handler.WriteHandler
;
import
com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy
;
import
com.alibaba.excel.write.metadata.WriteSheet
;
import
com.alibaba.excel.write.metadata.WriteTable
;
import
com.alibaba.excel.write.metadata.WriteWorkbook
;
/**
* Excel Writer This tool is used to write value out to Excel via POI. This object can perform the following two
...
...
@@ -31,39 +32,13 @@ import com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy;
public
class
ExcelWriter
{
private
ExcelBuilder
excelBuilder
;
/**
* Create new writer
*
* @param templateInputStream
* Append value after a POI file ,Can be null(the template POI filesystem that contains the Workbook
* stream)
* @param outputStream
* the java OutputStream you wish to write the value to
* @param excelType
* 03 or 07
* @param needHead
* @param customConverterMap
* @param customWriteHandlerList
*/
public
ExcelWriter
(
InputStream
templateInputStream
,
OutputStream
outputStream
,
ExcelTypeEnum
excelType
,
boolean
needHead
,
Map
<
Class
,
Converter
>
customConverterMap
,
List
<
WriteHandler
>
customWriteHandlerList
)
{
Workbook
workbook
=
new
Workbook
();
workbook
.
setInputStream
(
templateInputStream
);
workbook
.
setOutputStream
(
outputStream
);
workbook
.
setExcelType
(
excelType
);
workbook
.
setNeedHead
(
needHead
);
workbook
.
setCustomConverterMap
(
customConverterMap
);
workbook
.
setCustomWriteHandlerList
(
customWriteHandlerList
);
excelBuilder
=
new
ExcelBuilderImpl
(
workbook
);
}
/**
* Create new writer
*
* @param workbook
* @param w
riteW
orkbook
*/
public
ExcelWriter
(
W
orkbook
w
orkbook
)
{
excelBuilder
=
new
ExcelBuilderImpl
(
workbook
);
public
ExcelWriter
(
W
riteWorkbook
writeW
orkbook
)
{
excelBuilder
=
new
ExcelBuilderImpl
(
w
riteW
orkbook
);
}
/**
...
...
@@ -94,7 +69,7 @@ public class ExcelWriter {
*/
@Deprecated
public
ExcelWriter
(
OutputStream
outputStream
,
ExcelTypeEnum
typeEnum
,
boolean
needHead
)
{
this
(
null
,
outputStream
,
typeEnum
,
needHead
,
null
,
null
);
this
(
null
,
outputStream
,
typeEnum
,
needHead
,
null
);
}
/**
...
...
@@ -112,7 +87,7 @@ public class ExcelWriter {
@Deprecated
public
ExcelWriter
(
InputStream
templateInputStream
,
OutputStream
outputStream
,
ExcelTypeEnum
typeEnum
,
Boolean
needHead
)
{
this
(
templateInputStream
,
outputStream
,
typeEnum
,
needHead
,
null
,
null
);
this
(
templateInputStream
,
outputStream
,
typeEnum
,
needHead
,
null
);
}
/**
...
...
@@ -134,13 +109,13 @@ public class ExcelWriter {
Boolean
needHead
,
WriteHandler
writeHandler
)
{
List
<
WriteHandler
>
customWriteHandlerList
=
new
ArrayList
<
WriteHandler
>();
customWriteHandlerList
.
add
(
writeHandler
);
W
orkbook
workbook
=
new
Workbook
();
w
orkbook
.
set
InputStream
(
templateInputStream
);
workbook
.
setOutputStream
(
outputStream
);
workbook
.
setExcelType
(
typeEnum
);
workbook
.
setNeedHead
(
needHead
);
workbook
.
setCustomWriteHandlerList
(
customWriteHandlerList
);
excelBuilder
=
new
ExcelBuilderImpl
(
workbook
);
W
riteWorkbook
writeWorkbook
=
new
Write
Workbook
();
w
riteWorkbook
.
setTemplate
InputStream
(
templateInputStream
);
w
riteW
orkbook
.
setOutputStream
(
outputStream
);
w
riteW
orkbook
.
setExcelType
(
typeEnum
);
w
riteW
orkbook
.
setNeedHead
(
needHead
);
w
riteW
orkbook
.
setCustomWriteHandlerList
(
customWriteHandlerList
);
excelBuilder
=
new
ExcelBuilderImpl
(
w
riteW
orkbook
);
}
/**
...
...
@@ -157,12 +132,12 @@ public class ExcelWriter {
*
* @param data
* Data to be written
* @param
s
heet
* @param
writeS
heet
* Write to this sheet
* @return this current writer
*/
public
ExcelWriter
write
(
List
data
,
Sheet
s
heet
)
{
return
write
(
data
,
s
heet
,
null
);
public
ExcelWriter
write
(
List
data
,
WriteSheet
writeS
heet
)
{
return
write
(
data
,
writeS
heet
,
null
);
}
/**
...
...
@@ -170,45 +145,85 @@ public class ExcelWriter {
*
* @param data
* Data to be written
* @param
s
heet
* @param
writeS
heet
* Write to this sheet
* @param
t
able
* @param
writeT
able
* Write to this table
* @return this
*/
public
ExcelWriter
write
(
List
data
,
Sheet
sheet
,
Table
t
able
)
{
excelBuilder
.
addContent
(
data
,
sheet
,
t
able
);
public
ExcelWriter
write
(
List
data
,
WriteSheet
writeSheet
,
WriteTable
writeT
able
)
{
excelBuilder
.
addContent
(
data
,
writeSheet
,
writeT
able
);
return
this
;
}
/**
* Write data to a sheet
*
* @param data
* Data to be written
* @param sheet
* Write to this sheet
* @return this current writer
* @deprecated please use {@link ExcelWriter#write(List, WriteSheet)}
*/
@Deprecated
public
ExcelWriter
write
(
List
data
,
Sheet
sheet
)
{
return
write
(
data
,
sheet
,
null
);
}
/**
* Write value to a sheet
*
* @param data
* Data to be written
* @param sheet
* Write to this sheet
* @param table
* Write to this table
* @return this
* @deprecated
please use {@link ExcelWriter#write(List, Sheet
)}
* @deprecated
* @deprecated please use {@link ExcelWriter#write(List, WriteSheet,WriteTable
)}
*/
@Deprecated
public
ExcelWriter
write1
(
List
data
,
Sheet
sheet
)
{
return
write
(
data
,
sheet
);
public
ExcelWriter
write
(
List
data
,
Sheet
sheet
,
Table
table
)
{
WriteSheet
writeSheet
=
null
;
if
(
sheet
!=
null
)
{
if
(
sheet
.
getStartRow
()
!=
0
)
{
throw
new
ExcelGenerateException
(
"Specifying a line to start is no longer supported.Please 'WriteSheet.relativeHeadRowIndex' him instead."
);
}
writeSheet
=
new
WriteSheet
();
writeSheet
.
setSheetNo
(
sheet
.
getSheetNo
()
-
1
);
writeSheet
.
setSheetName
(
sheet
.
getSheetName
());
writeSheet
.
setClazz
(
sheet
.
getClazz
());
writeSheet
.
setHead
(
sheet
.
getHead
());
writeSheet
.
setTableStyle
(
sheet
.
getTableStyle
());
writeSheet
.
setColumnWidthMap
(
sheet
.
getColumnWidthMap
());
}
WriteTable
writeTable
=
null
;
if
(
table
!=
null
)
{
writeTable
=
new
WriteTable
();
writeTable
.
setTableNo
(
table
.
getTableNo
());
writeTable
.
setClazz
(
table
.
getClazz
());
writeTable
.
setHead
(
table
.
getHead
());
writeTable
.
setTableStyle
(
table
.
getTableStyle
());
}
return
write
(
data
,
writeSheet
,
writeTable
);
}
/**
* Write
value
to a sheet
* Write
data
to a sheet
*
* @param data
* Data to be written
* @param sheet
* Write to this sheet
* @deprecated please use {@link ExcelWriter#write(List, Sheet)}
* @return this current writer
* @deprecated please use {@link ExcelWriter#write(List, WriteSheet)}
*/
@Deprecated
public
ExcelWriter
write0
(
List
data
,
Sheet
sheet
)
{
return
write
(
data
,
sheet
);
return
write
(
data
,
sheet
,
null
);
}
/**
...
...
@@ -220,12 +235,27 @@ public class ExcelWriter {
* Write to this sheet
* @param table
* Write to this table
* @deprecated please use {@link ExcelWriter#write(List, Sheet,Table)}
* @return this
* @deprecated * @deprecated please use {@link ExcelWriter#write(List, WriteSheet,WriteTable)}
*/
@Deprecated
public
ExcelWriter
write0
(
List
data
,
Sheet
sheet
,
Table
table
)
{
return
write
(
data
,
sheet
,
table
);
}
/**
* Write data to a sheet
*
* @param data
* Data to be written
* @param sheet
* Write to this sheet
* @return this current writer
* @deprecated please use {@link ExcelWriter#write(List, WriteSheet)}
*/
@Deprecated
public
ExcelWriter
write1
(
List
data
,
Sheet
sheet
)
{
return
write
(
data
,
sheet
,
null
);
}
/**
...
...
@@ -237,12 +267,12 @@ public class ExcelWriter {
* Write to this sheet
* @param table
* Write to this table
* @deprecated please use {@link ExcelWriter#write(List, Sheet,Table)}
* @return this
* @deprecated * @deprecated please use {@link ExcelWriter#write(List, WriteSheet,WriteTable)}
*/
@Deprecated
public
ExcelWriter
write1
(
List
data
,
Sheet
sheet
,
Table
table
)
{
return
write
(
data
,
sheet
,
table
);
}
/**
...
...
src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.analysis
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.
write.metadata.
Sheet
;
import
com.alibaba.excel.
read.metadata.Read
Sheet
;
/**
* Excel file analyser
...
...
@@ -12,9 +12,9 @@ public interface ExcelAnalyser {
/**
* parse one sheet
*
* @param
sheetParam
* @param
readSheet
*/
void
analysis
(
Sheet
sheetParam
);
void
analysis
(
ReadSheet
readSheet
);
/**
* Complete the entire read file.Release the cache and close stream
...
...
src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
浏览文件 @
5ac5c0e8
...
...
@@ -5,8 +5,8 @@ import com.alibaba.excel.analysis.v07.XlsxSaxAnalyser;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.context.AnalysisContextImpl
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.
write.metadata.
Sheet
;
import
com.alibaba.excel.
write.metadata.
Workbook
;
import
com.alibaba.excel.
read.metadata.Read
Sheet
;
import
com.alibaba.excel.
read.metadata.Read
Workbook
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
/**
...
...
@@ -18,14 +18,14 @@ public class ExcelAnalyserImpl implements ExcelAnalyser {
private
ExcelExecutor
excelExecutor
;
public
ExcelAnalyserImpl
(
Workbook
w
orkbook
)
{
analysisContext
=
new
AnalysisContextImpl
(
w
orkbook
);
public
ExcelAnalyserImpl
(
ReadWorkbook
readW
orkbook
)
{
analysisContext
=
new
AnalysisContextImpl
(
readW
orkbook
);
choiceExcelExecutor
();
}
private
void
choiceExcelExecutor
()
{
try
{
ExcelTypeEnum
excelType
=
analysisContext
.
current
WorkbookHolder
().
getExcelType
();
ExcelTypeEnum
excelType
=
analysisContext
.
read
WorkbookHolder
().
getExcelType
();
if
(
excelType
==
null
)
{
excelExecutor
=
new
XlsxSaxAnalyser
(
analysisContext
);
return
;
...
...
@@ -46,12 +46,15 @@ public class ExcelAnalyserImpl implements ExcelAnalyser {
}
@Override
public
void
analysis
(
Sheet
s
heet
)
{
analysisContext
.
currentSheet
(
s
heet
);
public
void
analysis
(
ReadSheet
readS
heet
)
{
analysisContext
.
currentSheet
(
excelExecutor
,
readS
heet
);
excelExecutor
.
execute
();
analysisContext
.
getEventListener
().
do
AfterAllAnalysed
(
analysisContext
);
analysisContext
.
readSheetHolder
().
notify
AfterAllAnalysed
(
analysisContext
);
}
@Override
public
void
finish
()
{}
@Override
public
com
.
alibaba
.
excel
.
analysis
.
ExcelExecutor
excelExecutor
()
{
return
excelExecutor
;
...
...
src/main/java/com/alibaba/excel/analysis/ExcelExecutor.java
浏览文件 @
5ac5c0e8
...
...
@@ -2,7 +2,7 @@ package com.alibaba.excel.analysis;
import
java.util.List
;
import
com.alibaba.excel.
write.metadata.
Sheet
;
import
com.alibaba.excel.
read.metadata.Read
Sheet
;
/**
* Excel file Executor
...
...
@@ -11,7 +11,7 @@ import com.alibaba.excel.write.metadata.Sheet;
*/
public
interface
ExcelExecutor
{
List
<
Sheet
>
sheetList
();
List
<
Read
Sheet
>
sheetList
();
void
execute
();
...
...
src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
浏览文件 @
5ac5c0e8
...
...
@@ -27,9 +27,10 @@ import com.alibaba.excel.analysis.v03.handlers.NumberRecordHandler;
import
com.alibaba.excel.analysis.v03.handlers.RKRecordHandler
;
import
com.alibaba.excel.analysis.v03.handlers.SSTRecordHandler
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.read.listener.event.EachRowAnalysisFinishEvent
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.write.metadata.Sheet
;
import
com.alibaba.excel.read.listener.event.EachRowAnalysisFinishEvent
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
import
com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder
;
import
com.alibaba.excel.util.CollectionUtils
;
/**
...
...
@@ -59,28 +60,27 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelExecutor {
private
FormatTrackingHSSFListener
formatListener
;
private
List
<
String
>
records
;
private
boolean
notAllEmpty
=
false
;
private
List
<
Sheet
>
sheets
=
new
ArrayList
<
Sheet
>();
private
List
<
ReadSheet
>
sheets
=
new
ArrayList
<
Read
Sheet
>();
private
HSSFWorkbook
stubWorkbook
;
private
List
<
XlsRecordHandler
>
recordHandlers
=
new
ArrayList
<
XlsRecordHandler
>();
private
AnalysisContext
analysisContext
;
public
XlsSaxAnalyser
(
AnalysisContext
context
)
throws
IOException
{
this
.
analysisContext
=
context
;
this
.
records
=
new
ArrayList
<
String
>();
context
.
setCurrentRowNum
(
0
);
this
.
fs
=
new
POIFSFileSystem
(
analysisContext
.
getInputStream
());
ReadWorkbookHolder
readWorkbookHolder
=
analysisContext
.
readWorkbookHolder
();
if
(
readWorkbookHolder
.
getFile
()
!=
null
)
{
this
.
fs
=
new
POIFSFileSystem
(
readWorkbookHolder
.
getFile
());
}
else
{
this
.
fs
=
new
POIFSFileSystem
(
readWorkbookHolder
.
getInputStream
());
}
}
@Override
public
List
<
Sheet
>
getSheets
()
{
public
List
<
ReadSheet
>
sheetList
()
{
return
sheets
;
}
@Override
public
List
<
Sheet
>
sheetList
()
{
return
null
;
}
@Override
public
void
execute
()
{
MissingRecordAwareHSSFListener
listener
=
new
MissingRecordAwareHSSFListener
(
this
);
...
...
@@ -112,10 +112,11 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelExecutor {
lastColumnNumber
=
0
;
records
=
new
ArrayList
<
String
>();
notAllEmpty
=
false
;
sheets
=
new
ArrayList
<
Sheet
>();
sheets
=
new
ArrayList
<
Read
Sheet
>();
buildXlsRecordHandlers
();
}
@Override
public
void
processRecord
(
Record
record
)
{
int
thisRow
=
-
1
;
int
thisColumn
=
-
1
;
...
...
@@ -129,10 +130,9 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelExecutor {
break
;
}
}
// If we got something to print out, do so
if
(
thisStr
!=
null
)
{
if
(
analysisContext
.
t
rim
())
{
if
(
analysisContext
.
currentReadHolder
().
globalConfiguration
().
getAutoT
rim
())
{
thisStr
=
thisStr
.
trim
();
}
if
(!
""
.
equals
(
thisStr
))
{
...
...
@@ -165,9 +165,9 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelExecutor {
if
(
lastColumnNumber
==
-
1
)
{
lastColumnNumber
=
0
;
}
analysisContext
.
setCurrentRowNum
(
row
);
if
(
notAllEmpty
)
{
notify
(
new
EachRowAnalysisFinishEvent
(
new
ArrayList
<
String
>(
records
)));
analysisContext
.
readSheetHolder
()
.
notifyEndOneRow
(
new
EachRowAnalysisFinishEvent
(
new
ArrayList
<
String
>(
records
)),
analysisContext
);
}
records
.
clear
();
lastColumnNumber
=
-
1
;
...
...
src/main/java/com/alibaba/excel/analysis/v03/handlers/BOFRecordHandler.java
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.analysis.v03.handlers
;
import
com.alibaba.excel.analysis.v03.AbstractXlsRecordHandler
;
import
com.alibaba.excel.context.AnalysisContex
t
;
import
com.alibaba.excel.write.metadata.Sheet
;
import
java.util.ArrayList
;
import
java.util.Lis
t
;
import
org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder
;
import
org.apache.poi.hssf.record.BOFRecord
;
import
org.apache.poi.hssf.record.BoundSheetRecord
;
import
org.apache.poi.hssf.record.Record
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.alibaba.excel.analysis.v03.AbstractXlsRecordHandler
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
public
class
BOFRecordHandler
extends
AbstractXlsRecordHandler
{
private
List
<
BoundSheetRecord
>
boundSheetRecords
=
new
ArrayList
<
BoundSheetRecord
>();
private
BoundSheetRecord
[]
orderedBSRs
;
private
int
sheetIndex
;
private
List
<
Sheet
>
sheets
;
private
List
<
Read
Sheet
>
sheets
;
private
AnalysisContext
context
;
private
boolean
analyAllSheet
;
private
EventWorkbookBuilder
.
SheetRecordCollectingListener
workbookBuildingListener
;
public
BOFRecordHandler
(
EventWorkbookBuilder
.
SheetRecordCollectingListener
workbookBuildingListener
,
AnalysisContext
context
,
List
<
Sheet
>
sheets
)
{
public
BOFRecordHandler
(
EventWorkbookBuilder
.
SheetRecordCollectingListener
workbookBuildingListener
,
AnalysisContext
context
,
List
<
ReadSheet
>
sheets
)
{
this
.
context
=
context
;
this
.
workbookBuildingListener
=
workbookBuildingListener
;
this
.
sheets
=
sheets
;
}
@Override
public
boolean
support
(
Record
record
)
{
return
BoundSheetRecord
.
sid
==
record
.
getSid
()
||
BOFRecord
.
sid
==
record
.
getSid
();
...
...
@@ -40,12 +44,10 @@ public class BOFRecordHandler extends AbstractXlsRecordHandler {
orderedBSRs
=
BoundSheetRecord
.
orderByBofPosition
(
boundSheetRecords
);
}
sheetIndex
++;
Sheet
sheet
=
new
Sheet
(
sheetIndex
,
0
);
sheet
.
setSheetName
(
orderedBSRs
[
sheetIndex
-
1
].
getSheetname
());
sheets
.
add
(
sheet
);
ReadSheet
readSheet
=
new
ReadSheet
(
sheetIndex
,
orderedBSRs
[
sheetIndex
-
1
].
getSheetname
());
sheets
.
add
(
readSheet
);
if
(
this
.
analyAllSheet
)
{
context
.
setCurrentSheet
(
s
heet
);
context
.
currentSheet
(
null
,
readS
heet
);
}
}
}
...
...
@@ -53,7 +55,7 @@ public class BOFRecordHandler extends AbstractXlsRecordHandler {
@Override
public
void
init
()
{
if
(
context
.
getCurrentSheet
()
==
null
)
{
if
(
context
.
readSheetHolder
()
==
null
)
{
this
.
analyAllSheet
=
true
;
}
sheetIndex
=
0
;
...
...
src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
浏览文件 @
5ac5c0e8
...
...
@@ -26,8 +26,8 @@ import com.alibaba.excel.analysis.ExcelExecutor;
import
com.alibaba.excel.cache.Ehcache
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.
write.metadata.
Sheet
;
import
com.alibaba.excel.
write.metadata.holder.
WorkbookHolder
;
import
com.alibaba.excel.
read.metadata.Read
Sheet
;
import
com.alibaba.excel.
read.metadata.holder.Read
WorkbookHolder
;
import
com.alibaba.excel.util.FileUtils
;
/**
...
...
@@ -36,82 +36,85 @@ import com.alibaba.excel.util.FileUtils;
*/
public
class
XlsxSaxAnalyser
implements
ExcelExecutor
{
private
AnalysisContext
analysisContext
;
private
List
<
Sheet
>
sheetList
;
private
List
<
Read
Sheet
>
sheetList
;
private
Map
<
Integer
,
InputStream
>
sheetMap
;
public
XlsxSaxAnalyser
(
AnalysisContext
analysisContext
)
throws
Exception
{
this
.
analysisContext
=
analysisContext
;
analysisContext
.
setCurrentRowNum
(
0
);
WorkbookHolder
workbookHolder
=
analysisContext
.
current
WorkbookHolder
();
if
(
w
orkbookHolder
.
getReadCache
()
==
null
)
{
w
orkbookHolder
.
setReadCache
(
new
Ehcache
());
// Initialize cache
ReadWorkbookHolder
readWorkbookHolder
=
analysisContext
.
read
WorkbookHolder
();
if
(
readW
orkbookHolder
.
getReadCache
()
==
null
)
{
readW
orkbookHolder
.
setReadCache
(
new
Ehcache
());
}
w
orkbookHolder
.
getReadCache
().
init
(
analysisContext
);
readW
orkbookHolder
.
getReadCache
().
init
(
analysisContext
);
OPCPackage
pkg
=
readOpcPackage
(
w
orkbookHolder
);
OPCPackage
pkg
=
readOpcPackage
(
readW
orkbookHolder
);
// Analysis sharedStringsTable.xml
analysisSharedStringsTable
(
pkg
,
w
orkbookHolder
);
analysisSharedStringsTable
(
pkg
,
readW
orkbookHolder
);
XSSFReader
xssfReader
=
new
XSSFReader
(
pkg
);
analysisUse1904WindowDate
(
xssfReader
,
w
orkbookHolder
);
analysisUse1904WindowDate
(
xssfReader
,
readW
orkbookHolder
);
sheetList
=
new
ArrayList
<
Sheet
>();
sheetList
=
new
ArrayList
<
Read
Sheet
>();
sheetMap
=
new
HashMap
<
Integer
,
InputStream
>();
XSSFReader
.
SheetIterator
ite
=
(
XSSFReader
.
SheetIterator
)
xssfReader
.
getSheetsData
();
int
index
=
0
;
if
(!
ite
.
hasNext
())
{
throw
new
ExcelAnalysisException
(
"Can not find any sheet!"
);
}
while
(
ite
.
hasNext
())
{
InputStream
inputStream
=
ite
.
next
();
Sheet
sheet
=
new
Sheet
();
sheet
.
setSheetNo
(
index
);
sheet
.
setSheetName
(
ite
.
getSheetName
());
sheetList
.
add
(
sheet
);
sheetList
.
add
(
new
ReadSheet
(
index
,
ite
.
getSheetName
()));
sheetMap
.
put
(
index
,
inputStream
);
index
++;
}
}
private
void
analysisUse1904WindowDate
(
XSSFReader
xssfReader
,
WorkbookHolder
workbookHolder
)
throws
Exception
{
private
void
analysisUse1904WindowDate
(
XSSFReader
xssfReader
,
ReadWorkbookHolder
readWorkbookHolder
)
throws
Exception
{
if
(
readWorkbookHolder
.
globalConfiguration
().
getUse1904windowing
()
!=
null
)
{
return
;
}
InputStream
workbookXml
=
xssfReader
.
getWorkbookData
();
WorkbookDocument
ctWorkbook
=
WorkbookDocument
.
Factory
.
parse
(
workbookXml
);
CTWorkbook
wb
=
ctWorkbook
.
getWorkbook
();
CTWorkbookPr
prefix
=
wb
.
getWorkbookPr
();
if
(
prefix
!=
null
&&
prefix
.
getDate1904
())
{
workbookHolder
.
setUse1904windowing
(
Boolean
.
TRUE
);
readWorkbookHolder
.
getGlobalConfiguration
()
.
setUse1904windowing
(
Boolean
.
TRUE
);
}
}
private
void
analysisSharedStringsTable
(
OPCPackage
pkg
,
WorkbookHolder
w
orkbookHolder
)
throws
Exception
{
ContentHandler
handler
=
new
SharedStringsTableHandler
(
w
orkbookHolder
.
getReadCache
());
private
void
analysisSharedStringsTable
(
OPCPackage
pkg
,
ReadWorkbookHolder
readW
orkbookHolder
)
throws
Exception
{
ContentHandler
handler
=
new
SharedStringsTableHandler
(
readW
orkbookHolder
.
getReadCache
());
parseXmlSource
(
pkg
.
getPartsByContentType
(
XSSFRelation
.
SHARED_STRINGS
.
getContentType
()).
get
(
0
).
getInputStream
(),
handler
);
w
orkbookHolder
.
getReadCache
().
putFinished
();
readW
orkbookHolder
.
getReadCache
().
putFinished
();
}
private
OPCPackage
readOpcPackage
(
WorkbookHolder
w
orkbookHolder
)
throws
Exception
{
if
(
w
orkbookHolder
.
getFile
()
!=
null
)
{
return
OPCPackage
.
open
(
w
orkbookHolder
.
getFile
());
private
OPCPackage
readOpcPackage
(
ReadWorkbookHolder
readW
orkbookHolder
)
throws
Exception
{
if
(
readW
orkbookHolder
.
getFile
()
!=
null
)
{
return
OPCPackage
.
open
(
readW
orkbookHolder
.
getFile
());
}
if
(
w
orkbookHolder
.
getMandatoryUseInputStream
())
{
return
OPCPackage
.
open
(
w
orkbookHolder
.
getInputStream
());
if
(
readW
orkbookHolder
.
getMandatoryUseInputStream
())
{
return
OPCPackage
.
open
(
readW
orkbookHolder
.
getInputStream
());
}
File
readTempFile
=
FileUtils
.
createCacheTmpFile
();
workbookHolder
.
setRead
TempFile
(
readTempFile
);
readWorkbookHolder
.
set
TempFile
(
readTempFile
);
File
tempFile
=
new
File
(
readTempFile
.
getPath
(),
UUID
.
randomUUID
().
toString
()
+
".xlsx"
);
FileUtils
.
writeToFile
(
readTempFile
,
w
orkbookHolder
.
getInputStream
());
FileUtils
.
writeToFile
(
readTempFile
,
readW
orkbookHolder
.
getInputStream
());
return
OPCPackage
.
open
(
tempFile
);
}
@Override
public
List
<
Sheet
>
sheetList
()
{
public
List
<
Read
Sheet
>
sheetList
()
{
return
sheetList
;
}
@Override
public
void
execute
()
{
parseXmlSource
(
sheetMap
.
get
(
analysisContext
.
current
SheetHolder
().
getSheetNo
()),
parseXmlSource
(
sheetMap
.
get
(
analysisContext
.
read
SheetHolder
().
getSheetNo
()),
new
XlsxRowHandler
(
analysisContext
));
}
...
...
src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java
浏览文件 @
5ac5c0e8
...
...
@@ -28,7 +28,7 @@ public class ProcessResultCellHandler implements XlsxCellHandler {
@Override
public
void
endHandle
(
String
name
)
{
analysisContext
.
current
SheetHolder
().
notifyEndOneRow
(
analysisContext
.
read
SheetHolder
().
notifyEndOneRow
(
new
EachRowAnalysisFinishEvent
(
rowResultHandler
.
getCurRowContent
(),
rowResultHandler
.
getColumnSize
()),
analysisContext
);
rowResultHandler
.
clearResult
();
...
...
src/main/java/com/alibaba/excel/context/AnalysisContext.java
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.context
;
import
com.alibaba.excel.analysis.ExcelExecutor
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
import
com.alibaba.excel.read.metadata.holder.ReadHolder
;
import
com.alibaba.excel.read.metadata.holder.ReadRowHolder
;
import
com.alibaba.excel.read.metadata.holder.ReadSheetHolder
;
import
com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder
;
...
...
@@ -14,29 +16,49 @@ import com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder;
public
interface
AnalysisContext
{
/**
* Select the current table
*
*
* @param excelExecutor
* @param readSheet
*/
void
currentSheet
(
ReadSheet
readSheet
);
void
currentSheet
(
ExcelExecutor
excelExecutor
,
ReadSheet
readSheet
);
/**
* All information about the workbook you are currently working on
*
* @return
*/
ReadWorkbookHolder
current
WorkbookHolder
();
ReadWorkbookHolder
read
WorkbookHolder
();
/**
* All information about the sheet you are currently working on
*
* @return
*/
ReadSheetHolder
currentSheetHolder
();
ReadSheetHolder
readSheetHolder
();
/**
* Set row of currently operated cell
*
* @param readRowHolder
*/
void
readRowHolder
(
ReadRowHolder
readRowHolder
);
/**
* Row of currently operated cell
*
* @return
*/
ReadRowHolder
currentRowHolder
();
ReadRowHolder
readRowHolder
();
/**
* The current read operation corresponds to the 'readSheetHolder' or 'readWorkbookHolder'
*
* @return
*/
ReadHolder
currentReadHolder
();
/**
* Custom attribute
*/
Object
getCustom
();
}
src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java
浏览文件 @
5ac5c0e8
...
...
@@ -3,10 +3,15 @@ package com.alibaba.excel.context;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.write.metadata.holder.SheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WorkbookHolder
;
import
com.alibaba.excel.write.metadata.Sheet
;
import
com.alibaba.excel.write.metadata.Workbook
;
import
com.alibaba.excel.analysis.ExcelExecutor
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
import
com.alibaba.excel.read.metadata.ReadWorkbook
;
import
com.alibaba.excel.read.metadata.holder.ReadHolder
;
import
com.alibaba.excel.read.metadata.holder.ReadRowHolder
;
import
com.alibaba.excel.read.metadata.holder.ReadSheetHolder
;
import
com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder
;
import
com.alibaba.excel.util.StringUtils
;
/**
*
...
...
@@ -17,33 +22,101 @@ public class AnalysisContextImpl implements AnalysisContext {
/**
* The Workbook currently written
*/
private
WorkbookHolder
current
WorkbookHolder
;
private
ReadWorkbookHolder
read
WorkbookHolder
;
/**
* Current sheet holder
*/
private
SheetHolder
currentSheetHolder
;
private
ReadSheetHolder
readSheetHolder
;
/**
* Current row holder
*/
private
ReadRowHolder
readRowHolder
;
/**
* Configuration of currently operated cell
*/
private
ReadHolder
currentReadHolder
;
public
AnalysisContextImpl
(
Workbook
w
orkbook
)
{
if
(
w
orkbook
==
null
)
{
public
AnalysisContextImpl
(
ReadWorkbook
readW
orkbook
)
{
if
(
readW
orkbook
==
null
)
{
throw
new
IllegalArgumentException
(
"Workbook argument cannot be null"
);
}
currentWorkbookHolder
=
WorkbookHolder
.
buildReadWorkbookHolder
(
workbook
);
readWorkbookHolder
=
new
ReadWorkbookHolder
(
readWorkbook
);
currentReadHolder
=
readWorkbookHolder
;
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Initialization 'AnalysisContextImpl' complete"
);
}
}
@Override
public
void
currentSheet
(
Sheet
s
heet
)
{
if
(
s
heet
==
null
)
{
public
void
currentSheet
(
ExcelExecutor
excelExecutor
,
ReadSheet
readS
heet
)
{
if
(
readS
heet
==
null
)
{
throw
new
IllegalArgumentException
(
"Sheet argument cannot be null"
);
}
if
(
sheet
.
getSheetNo
()
==
null
||
sheet
.
getSheetNo
()
<=
0
)
{
sheet
.
setSheetNo
(
0
);
}
currentSheetHolder
=
SheetHolder
.
buildReadWorkSheetHolder
(
sheet
,
currentWorkbookHolder
);
readSheetHolder
=
new
ReadSheetHolder
(
readSheet
,
readWorkbookHolder
);
currentReadHolder
=
readSheetHolder
;
selectSheet
(
excelExecutor
);
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Began to read:{}"
,
sheet
);
LOGGER
.
debug
(
"Began to read:{}"
,
readSheet
);
}
}
private
void
selectSheet
(
ExcelExecutor
excelExecutor
)
{
if
(
readSheetHolder
.
getSheetNo
()
!=
null
&&
readSheetHolder
.
getSheetNo
()
>=
0
)
{
for
(
ReadSheet
readSheetExcel
:
excelExecutor
.
sheetList
())
{
if
(
readSheetExcel
.
getSheetNo
().
equals
(
readSheetHolder
.
getSheetNo
()))
{
readSheetHolder
.
setSheetName
(
readSheetExcel
.
getSheetName
());
return
;
}
}
throw
new
ExcelAnalysisException
(
"Can not find sheet:"
+
readSheetHolder
.
getSheetNo
());
}
if
(!
StringUtils
.
isEmpty
(
readSheetHolder
.
getSheetName
()))
{
for
(
ReadSheet
readSheetExcel
:
excelExecutor
.
sheetList
())
{
String
sheetName
=
readSheetExcel
.
getSheetName
();
if
(
sheetName
==
null
)
{
continue
;
}
if
(
readSheetHolder
.
globalConfiguration
().
getAutoTrim
())
{
sheetName
=
sheetName
.
trim
();
}
if
(
sheetName
.
equals
(
readSheetHolder
.
getSheetName
()))
{
readSheetHolder
.
setSheetNo
(
readSheetHolder
.
getSheetNo
());
return
;
}
}
}
ReadSheet
readSheetExcel
=
excelExecutor
.
sheetList
().
get
(
0
);
readSheetHolder
.
setSheetNo
(
readSheetExcel
.
getSheetNo
());
readSheetHolder
.
setSheetName
(
readSheetExcel
.
getSheetName
());
}
@Override
public
ReadWorkbookHolder
readWorkbookHolder
()
{
return
readWorkbookHolder
;
}
@Override
public
ReadSheetHolder
readSheetHolder
()
{
return
readSheetHolder
;
}
@Override
public
ReadRowHolder
readRowHolder
()
{
return
readRowHolder
;
}
@Override
public
void
readRowHolder
(
ReadRowHolder
readRowHolder
)
{
this
.
readRowHolder
=
readRowHolder
;
}
@Override
public
ReadHolder
currentReadHolder
()
{
return
readSheetHolder
;
}
@Override
public
Object
getCustom
()
{
return
readWorkbookHolder
.
getCustomObject
();
}
}
src/main/java/com/alibaba/excel/context/WriteContext.java
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.context
;
import
com.alibaba.excel.write.metadata.
Table
;
import
com.alibaba.excel.write.metadata.
holder.WriteConfiguration
;
import
com.alibaba.excel.write.metadata.holder.
Sheet
Holder
;
import
com.alibaba.excel.write.metadata.holder.
Table
Holder
;
import
com.alibaba.excel.write.metadata.holder.W
orkbook
Holder
;
import
com.alibaba.excel.write.metadata.
Sheet
;
import
com.alibaba.excel.write.metadata.
WriteSheet
;
import
com.alibaba.excel.write.metadata.
WriteTable
;
import
com.alibaba.excel.write.metadata.holder.
Write
Holder
;
import
com.alibaba.excel.write.metadata.holder.
WriteSheet
Holder
;
import
com.alibaba.excel.write.metadata.holder.W
riteTable
Holder
;
import
com.alibaba.excel.write.metadata.
holder.WriteWorkbookHolder
;
/**
* Write context
...
...
@@ -16,44 +16,44 @@ public interface WriteContext {
/**
* If the current sheet already exists, select it; if not, create it
*
* @param
s
heet
* @param
writeS
heet
*/
void
currentSheet
(
Sheet
s
heet
);
void
currentSheet
(
WriteSheet
writeS
heet
);
/**
* If the current table already exists, select it; if not, create it
*
* @param
t
able
* @param
writeT
able
*/
void
currentTable
(
Table
t
able
);
void
currentTable
(
WriteTable
writeT
able
);
/**
*
Configuration of currently operated cell
*
All information about the workbook you are currently working on
*
* @return
*/
Write
Configuration
currentConfiguration
();
Write
WorkbookHolder
writeWorkbookHolder
();
/**
* All information about the
workbook
you are currently working on
* All information about the
sheet
you are currently working on
*
* @return
*/
W
orkbookHolder
currentWorkbook
Holder
();
W
riteSheetHolder
writeSheet
Holder
();
/**
* All information about the
sheet
you are currently working on
* All information about the
table
you are currently working on
*
* @return
*/
SheetHolder
currentSheet
Holder
();
WriteTableHolder
writeTable
Holder
();
/**
*
All information about the table you are currently working on
*
*
Configuration of currently operated cell. May be 'writeSheetHolder' or 'writeTableHolder' or 'writeWorkbookHolder'
*
* @return
*/
TableHolder
currentTabl
eHolder
();
WriteHolder
currentWrit
eHolder
();
/**
* close
...
...
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/event/AbstractIgnoreExceptionReadListener.java
0 → 100644
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.event
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.read.listener.ReadListener
;
/**
* Receives the return of each piece of data parsed
*
* @author jipengfei
*/
public
abstract
class
AbstractIgnoreExceptionReadListener
<
T
>
implements
ReadListener
<
T
>
{
/**
* All listeners receive this method when any one Listener does an error report. If an exception is thrown here, the
* entire read will terminate.
*
* @param exception
* @param context
*/
@Override
public
void
onException
(
Exception
exception
,
AnalysisContext
context
)
{}
@Override
public
boolean
hasNext
(
AnalysisContext
context
)
{
return
true
;
}
}
src/main/java/com/alibaba/excel/event/SyncReadListener.java
0 → 100644
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.event
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.alibaba.excel.context.AnalysisContext
;
/**
* Synchronous data reading
*
* @author zhuangjiaju
*/
public
class
SyncReadListener
extends
AnalysisEventListener
<
Object
>
{
private
List
<
Object
>
list
=
new
ArrayList
<
Object
>();
@Override
public
void
invoke
(
Object
object
,
AnalysisContext
context
)
{
list
.
add
(
object
);
}
@Override
public
void
doAfterAllAnalysed
(
AnalysisContext
context
)
{}
public
List
<
Object
>
getList
()
{
return
list
;
}
public
void
setList
(
List
<
Object
>
list
)
{
this
.
list
=
list
;
}
}
src/main/java/com/alibaba/excel/exception/ExcelCommonException.java
0 → 100644
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.exception
;
/**
*
* @author zhuangjiaju
*/
public
class
ExcelCommonException
extends
RuntimeException
{
public
ExcelCommonException
()
{}
public
ExcelCommonException
(
String
message
)
{
super
(
message
);
}
public
ExcelCommonException
(
String
message
,
Throwable
cause
)
{
super
(
message
,
cause
);
}
public
ExcelCommonException
(
Throwable
cause
)
{
super
(
cause
);
}
}
src/main/java/com/alibaba/excel/metadata/CellData.java
浏览文件 @
5ac5c0e8
...
...
@@ -21,15 +21,8 @@ public class CellData {
* {@link CellDataTypeEnum#BOOLEAN}
*/
private
Boolean
booleanValue
;
/**
* Support only when reading
*/
private
Boolean
readIsFormula
;
/**
* Support only when reading
*/
private
String
readFormula
;
private
Boolean
formula
;
private
String
formulaValue
;
public
CellData
(
String
stringValue
)
{
this
(
CellDataTypeEnum
.
STRING
,
stringValue
);
...
...
@@ -44,7 +37,7 @@ public class CellData {
}
this
.
type
=
type
;
this
.
stringValue
=
stringValue
;
this
.
readIsF
ormula
=
Boolean
.
FALSE
;
this
.
f
ormula
=
Boolean
.
FALSE
;
}
public
CellData
(
Double
doubleValue
)
{
...
...
@@ -53,7 +46,7 @@ public class CellData {
}
this
.
type
=
CellDataTypeEnum
.
NUMBER
;
this
.
doubleValue
=
doubleValue
;
this
.
readIsF
ormula
=
Boolean
.
FALSE
;
this
.
f
ormula
=
Boolean
.
FALSE
;
}
public
CellData
(
Boolean
booleanValue
)
{
...
...
@@ -62,7 +55,7 @@ public class CellData {
}
this
.
type
=
CellDataTypeEnum
.
BOOLEAN
;
this
.
booleanValue
=
booleanValue
;
this
.
readIsF
ormula
=
Boolean
.
FALSE
;
this
.
f
ormula
=
Boolean
.
FALSE
;
}
public
CellData
(
CellDataTypeEnum
type
)
{
...
...
@@ -70,7 +63,7 @@ public class CellData {
throw
new
IllegalArgumentException
(
"Type can not be null"
);
}
this
.
type
=
type
;
this
.
readIsF
ormula
=
Boolean
.
FALSE
;
this
.
f
ormula
=
Boolean
.
FALSE
;
}
public
CellDataTypeEnum
getType
()
{
...
...
@@ -105,20 +98,20 @@ public class CellData {
this
.
booleanValue
=
booleanValue
;
}
public
Boolean
get
ReadIs
Formula
()
{
return
readIsF
ormula
;
public
Boolean
getFormula
()
{
return
f
ormula
;
}
public
void
set
ReadIsFormula
(
Boolean
readIsF
ormula
)
{
this
.
readIsFormula
=
readIsF
ormula
;
public
void
set
Formula
(
Boolean
f
ormula
)
{
this
.
formula
=
f
ormula
;
}
public
String
get
ReadFormula
()
{
return
readFormula
;
public
String
get
FormulaValue
()
{
return
formulaValue
;
}
public
void
set
ReadFormula
(
String
readFormula
)
{
this
.
readFormula
=
readFormula
;
public
void
set
FormulaValue
(
String
formulaValue
)
{
this
.
formulaValue
=
formulaValue
;
}
@Override
...
...
src/main/java/com/alibaba/excel/metadata/Sheet.java
浏览文件 @
5ac5c0e8
...
...
@@ -7,7 +7,10 @@ import java.util.Map;
/**
*
* @author jipengfei
* @deprecated pleas use {@link com.alibaba.excel.write.metadata.WriteSheet} or
* {@link com.alibaba.excel.read.metadata.ReadSheet}
*/
@Deprecated
public
class
Sheet
{
/**
...
...
@@ -39,7 +42,7 @@ public class Sheet {
/**
* column with
*/
private
Map
<
Integer
,
Integer
>
columnWidthMap
=
new
HashMap
<
Integer
,
Integer
>();
private
Map
<
Integer
,
Integer
>
columnWidthMap
=
new
HashMap
<
Integer
,
Integer
>();
/**
*
...
...
@@ -51,7 +54,6 @@ public class Sheet {
*/
private
int
startRow
=
0
;
public
Sheet
(
int
sheetNo
)
{
this
.
sheetNo
=
sheetNo
;
}
...
...
@@ -68,7 +70,7 @@ public class Sheet {
}
public
Sheet
(
int
sheetNo
,
int
headLineMun
,
Class
<?
extends
BaseRowModel
>
clazz
,
String
sheetName
,
List
<
List
<
String
>>
head
)
{
List
<
List
<
String
>>
head
)
{
this
.
sheetNo
=
sheetNo
;
this
.
clazz
=
clazz
;
this
.
headLineMun
=
headLineMun
;
...
...
@@ -127,8 +129,6 @@ public class Sheet {
this
.
tableStyle
=
tableStyle
;
}
public
Map
<
Integer
,
Integer
>
getColumnWidthMap
()
{
return
columnWidthMap
;
}
...
...
@@ -139,15 +139,9 @@ public class Sheet {
@Override
public
String
toString
()
{
return
"Sheet{"
+
"headLineMun="
+
headLineMun
+
", sheetNo="
+
sheetNo
+
", sheetName='"
+
sheetName
+
'\''
+
", clazz="
+
clazz
+
", head="
+
head
+
", tableStyle="
+
tableStyle
+
", columnWidthMap="
+
columnWidthMap
+
'}'
;
return
"Sheet{"
+
"headLineMun="
+
headLineMun
+
", sheetNo="
+
sheetNo
+
", sheetName='"
+
sheetName
+
'\''
+
", clazz="
+
clazz
+
", head="
+
head
+
", tableStyle="
+
tableStyle
+
", columnWidthMap="
+
columnWidthMap
+
'}'
;
}
public
Boolean
getAutoWidth
()
{
...
...
src/main/java/com/alibaba/excel/metadata/Table.java
浏览文件 @
5ac5c0e8
...
...
@@ -4,7 +4,9 @@ import java.util.List;
/**
* @author jipengfei
* @deprecated please use {@link com.alibaba.excel.write.metadata.WriteTable}
*/
@Deprecated
public
class
Table
{
/**
*/
...
...
@@ -22,6 +24,10 @@ public class Table {
*/
private
TableStyle
tableStyle
;
public
Table
(
Integer
tableNo
)
{
this
.
tableNo
=
tableNo
;
}
public
TableStyle
getTableStyle
()
{
return
tableStyle
;
}
...
...
@@ -30,10 +36,6 @@ public class Table {
this
.
tableStyle
=
tableStyle
;
}
public
Table
(
Integer
tableNo
)
{
this
.
tableNo
=
tableNo
;
}
public
Class
<?
extends
BaseRowModel
>
getClazz
()
{
return
clazz
;
}
...
...
src/main/java/com/alibaba/excel/metadata/holder/read/AbstractWriteConfiguration.java
已删除
100644 → 0
浏览文件 @
e2bb1999
package
com.alibaba.excel.metadata.holder.read
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.TreeMap
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.converters.ConverterKey
;
import
com.alibaba.excel.enums.HeadKindEnum
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.event.NotRepeatExecutor
;
import
com.alibaba.excel.event.Order
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.exception.ExcelDataConvertException
;
import
com.alibaba.excel.metadata.CellData
;
import
com.alibaba.excel.metadata.CellStyle
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.holder.write.WriteConfiguration
;
import
com.alibaba.excel.metadata.property.CellStyleProperty
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
import
com.alibaba.excel.metadata.property.RowHeightProperty
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.listener.ReadListenerRegistryCenter
;
import
com.alibaba.excel.read.listener.event.AnalysisFinishEvent
;
import
com.alibaba.excel.util.StringUtils
;
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.style.AbstractColumnCellStyleStrategy
;
import
com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy
;
import
com.alibaba.excel.write.style.row.SimpleRowHeightStyleStrategy
;
/**
* sheet holder
*
* @author zhuangjiaju
*/
public
abstract
class
AbstractWriteConfiguration
implements
WriteConfiguration
,
ReadConfiguration
,
ReadListenerRegistryCenter
{
/**
* Need Head
*/
private
Boolean
needHead
;
/**
* Write handler for workbook
*/
private
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
writeHandlerMap
;
/**
* Read listener
*/
private
List
<
ReadListener
>
readListenerList
;
/**
* Converter for workbook
*/
private
Map
<
ConverterKey
,
Converter
>
readConverterMap
;
/**
* Converter for workbook
*/
private
Map
<
Class
,
Converter
>
writeConverterMap
;
/**
* Excel head property
*/
private
ExcelHeadProperty
excelHeadProperty
;
/**
* Writes the head relative to the existing contents of the sheet. Indexes are zero-based.
*/
private
Integer
writeRelativeHeadRowIndex
;
/**
* Record whether it's new or from cache
*/
private
Boolean
newInitialization
;
/**
* Count the number of added heads when read sheet.
*
* <li>0 - This Sheet has no head ,since the first row are the data
* <li>1 - This Sheet has one row head , this is the default
* <li>2 - This Sheet has two row head ,since the third row is the data
*/
private
Integer
readHeadRowNumber
;
/**
* You can only choose one of the {@link AbstractWriteConfiguration#head} and
* {@link AbstractWriteConfiguration#clazz}
*/
private
List
<
List
<
String
>>
head
;
/**
* You can only choose one of the {@link AbstractWriteConfiguration#head} and
* {@link AbstractWriteConfiguration#clazz}
*/
private
Class
clazz
;
/**
* Automatic trim includes sheet name and content
*/
private
Boolean
autoTrim
;
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
ExcelHeadProperty
getExcelHeadProperty
()
{
return
excelHeadProperty
;
}
public
void
setExcelHeadProperty
(
ExcelHeadProperty
excelHeadProperty
)
{
this
.
excelHeadProperty
=
excelHeadProperty
;
}
public
Integer
getWriteRelativeHeadRowIndex
()
{
return
writeRelativeHeadRowIndex
;
}
public
void
setWriteRelativeHeadRowIndex
(
Integer
writeRelativeHeadRowIndex
)
{
this
.
writeRelativeHeadRowIndex
=
writeRelativeHeadRowIndex
;
}
public
Boolean
getNewInitialization
()
{
return
newInitialization
;
}
public
void
setNewInitialization
(
Boolean
newInitialization
)
{
this
.
newInitialization
=
newInitialization
;
}
public
List
<
List
<
String
>>
getHead
()
{
return
head
;
}
public
void
setHead
(
List
<
List
<
String
>>
head
)
{
this
.
head
=
head
;
}
public
Class
getClazz
()
{
return
clazz
;
}
public
void
setClazz
(
Class
clazz
)
{
this
.
clazz
=
clazz
;
}
public
Boolean
getAutoTrim
()
{
return
autoTrim
;
}
public
void
setAutoTrim
(
Boolean
autoTrim
)
{
this
.
autoTrim
=
autoTrim
;
}
public
List
<
ReadListener
>
getReadListenerList
()
{
return
readListenerList
;
}
public
void
setReadListenerList
(
List
<
ReadListener
>
readListenerList
)
{
this
.
readListenerList
=
readListenerList
;
}
public
Map
<
ConverterKey
,
Converter
>
getReadConverterMap
()
{
return
readConverterMap
;
}
public
void
setReadConverterMap
(
Map
<
ConverterKey
,
Converter
>
readConverterMap
)
{
this
.
readConverterMap
=
readConverterMap
;
}
public
Map
<
Class
,
Converter
>
getWriteConverterMap
()
{
return
writeConverterMap
;
}
public
void
setWriteConverterMap
(
Map
<
Class
,
Converter
>
writeConverterMap
)
{
this
.
writeConverterMap
=
writeConverterMap
;
}
public
Integer
getReadHeadRowNumber
()
{
return
readHeadRowNumber
;
}
public
void
setReadHeadRowNumber
(
Integer
readHeadRowNumber
)
{
this
.
readHeadRowNumber
=
readHeadRowNumber
;
}
@Override
public
void
register
(
AnalysisEventListener
listener
)
{
readListenerList
.
add
(
listener
);
}
@Override
public
void
notifyEndOneRow
(
AnalysisFinishEvent
event
,
AnalysisContext
analysisContext
)
{
List
<
CellData
>
cellDataList
=
(
List
<
CellData
>)
event
.
getAnalysisResult
();
if
(
analysisContext
.
currentRowNum
()
>
analysisContext
.
currentSheetHolder
().
getReadHeadRowNumber
())
{
for
(
ReadListener
readListener
:
readListenerList
)
{
try
{
readListener
.
invoke
(
analysisContext
.
currentRowAnalysisResult
(),
analysisContext
);
}
catch
(
Exception
e
)
{
for
(
ReadListener
readListenerException
:
readListenerList
)
{
try
{
readListenerException
.
onException
(
e
,
analysisContext
);
}
catch
(
Exception
exception
)
{
throw
new
ExcelAnalysisException
(
"Listen error!"
,
exception
);
}
}
}
}
}
// Now is header
if
(
analysisContext
.
currentRowNum
().
equals
(
analysisContext
.
currentSheetHolder
().
getReadHeadRowNumber
()))
{
buildHead
(
analysisContext
,
cellDataList
);
}
}
@Override
public
void
notifyAfterAllAnalysed
(
AnalysisContext
analysisContext
)
{
for
(
ReadListener
readListener
:
readListenerList
)
{
readListener
.
doAfterAllAnalysed
(
analysisContext
);
}
}
private
void
buildHead
(
AnalysisContext
analysisContext
,
List
<
CellData
>
cellDataList
)
{
if
(!
HeadKindEnum
.
CLASS
.
equals
(
analysisContext
.
currentConfiguration
().
excelHeadProperty
().
getHeadKind
()))
{
return
;
}
List
<
String
>
dataList
=
(
List
<
String
>)
buildStringList
(
cellDataList
,
analysisContext
.
currentConfiguration
());
ExcelHeadProperty
excelHeadPropertyData
=
analysisContext
.
currentConfiguration
().
excelHeadProperty
();
Map
<
Integer
,
Head
>
headMapData
=
excelHeadPropertyData
.
getHeadMap
();
Map
<
Integer
,
ExcelContentProperty
>
contentPropertyMapData
=
excelHeadPropertyData
.
getContentPropertyMap
();
Map
<
Integer
,
Head
>
tmpHeadMap
=
new
HashMap
<
Integer
,
Head
>(
headMapData
.
size
()
*
4
/
3
+
1
);
Map
<
Integer
,
ExcelContentProperty
>
tmpContentPropertyMap
=
new
HashMap
<
Integer
,
ExcelContentProperty
>(
contentPropertyMapData
.
size
()
*
4
/
3
+
1
);
for
(
Map
.
Entry
<
Integer
,
Head
>
entry
:
headMapData
.
entrySet
())
{
Head
headData
=
entry
.
getValue
();
if
(
headData
.
getForceIndex
())
{
tmpHeadMap
.
put
(
entry
.
getKey
(),
headData
);
tmpContentPropertyMap
.
put
(
entry
.
getKey
(),
contentPropertyMapData
.
get
(
entry
.
getKey
()));
continue
;
}
String
headName
=
headData
.
getHeadNameList
().
get
(
0
);
for
(
int
i
=
0
;
i
<
dataList
.
size
();
i
++)
{
String
headString
=
dataList
.
get
(
i
);
if
(
StringUtils
.
isEmpty
(
headString
))
{
continue
;
}
if
(
analysisContext
.
currentSheetHolder
().
getAutoTrim
())
{
headString
=
headString
.
trim
();
}
if
(
headName
.
equals
(
headString
))
{
headData
.
setColumnIndex
(
i
);
tmpHeadMap
.
put
(
i
,
headData
);
tmpContentPropertyMap
.
put
(
i
,
contentPropertyMapData
.
get
(
entry
.
getKey
()));
break
;
}
}
}
excelHeadPropertyData
.
setHeadMap
(
tmpHeadMap
);
excelHeadPropertyData
.
setContentPropertyMap
(
tmpContentPropertyMap
);
}
private
Object
buildStringList
(
List
<
CellData
>
data
,
ReadConfiguration
readConfiguration
)
{
List
<
String
>
list
=
new
ArrayList
<
String
>();
for
(
CellData
cellData
:
data
)
{
Converter
converter
=
readConfiguration
.
readConverterMap
()
.
get
(
ConverterKey
.
buildConverterKey
(
String
.
class
,
cellData
.
getType
()));
if
(
converter
==
null
)
{
throw
new
ExcelDataConvertException
(
"Converter not found, convert "
+
cellData
.
getType
()
+
" to String"
);
}
try
{
list
.
add
((
String
)(
converter
.
convertToJavaData
(
cellData
,
null
)));
}
catch
(
Exception
e
)
{
throw
new
ExcelDataConvertException
(
"Convert data "
+
cellData
+
" to String error "
,
e
);
}
}
return
list
;
}
protected
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
sortAndClearUpHandler
(
List
<
WriteHandler
>
handlerList
,
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
parentHandlerMap
)
{
// add
if
(
parentHandlerMap
!=
null
)
{
for
(
List
<
WriteHandler
>
parentHandlerList
:
parentHandlerMap
.
values
())
{
handlerList
.
addAll
(
parentHandlerList
);
}
}
// sort
Map
<
Integer
,
List
<
WriteHandler
>>
orderExcelWriteHandlerMap
=
new
TreeMap
<
Integer
,
List
<
WriteHandler
>>();
for
(
WriteHandler
handler
:
handlerList
)
{
int
order
=
Integer
.
MIN_VALUE
;
if
(
handler
instanceof
Order
)
{
order
=
((
Order
)
handler
).
order
();
}
if
(
orderExcelWriteHandlerMap
.
containsKey
(
order
))
{
orderExcelWriteHandlerMap
.
get
(
order
).
add
(
handler
);
}
else
{
List
<
WriteHandler
>
tempHandlerList
=
new
ArrayList
<
WriteHandler
>();
tempHandlerList
.
add
(
handler
);
orderExcelWriteHandlerMap
.
put
(
order
,
tempHandlerList
);
}
}
// clean up
Set
<
String
>
alreadyExistedHandlerSet
=
new
HashSet
<
String
>();
List
<
WriteHandler
>
cleanUpHandlerList
=
new
ArrayList
<
WriteHandler
>();
for
(
Map
.
Entry
<
Integer
,
List
<
WriteHandler
>>
entry
:
orderExcelWriteHandlerMap
.
entrySet
())
{
for
(
WriteHandler
handler
:
entry
.
getValue
())
{
if
(
handler
instanceof
NotRepeatExecutor
)
{
String
uniqueValue
=
((
NotRepeatExecutor
)
handler
).
uniqueValue
();
if
(
alreadyExistedHandlerSet
.
contains
(
uniqueValue
))
{
continue
;
}
alreadyExistedHandlerSet
.
add
(
uniqueValue
);
}
cleanUpHandlerList
.
add
(
handler
);
}
}
// classify
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
result
=
new
HashMap
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>();
result
.
put
(
WriteHandler
.
class
,
new
ArrayList
<
WriteHandler
>());
result
.
put
(
WorkbookWriteHandler
.
class
,
new
ArrayList
<
WriteHandler
>());
result
.
put
(
SheetWriteHandler
.
class
,
new
ArrayList
<
WriteHandler
>());
result
.
put
(
RowWriteHandler
.
class
,
new
ArrayList
<
WriteHandler
>());
result
.
put
(
CellWriteHandler
.
class
,
new
ArrayList
<
WriteHandler
>());
for
(
WriteHandler
writeHandler
:
cleanUpHandlerList
)
{
if
(
writeHandler
instanceof
CellWriteHandler
)
{
result
.
get
(
CellWriteHandler
.
class
).
add
(
writeHandler
);
}
if
(
writeHandler
instanceof
RowWriteHandler
)
{
result
.
get
(
RowWriteHandler
.
class
).
add
(
writeHandler
);
}
if
(
writeHandler
instanceof
SheetWriteHandler
)
{
result
.
get
(
SheetWriteHandler
.
class
).
add
(
writeHandler
);
}
if
(
writeHandler
instanceof
SheetWriteHandler
)
{
result
.
get
(
SheetWriteHandler
.
class
).
add
(
writeHandler
);
}
if
(
writeHandler
instanceof
WorkbookWriteHandler
)
{
result
.
get
(
WorkbookWriteHandler
.
class
).
add
(
writeHandler
);
}
result
.
get
(
WriteHandler
.
class
).
add
(
writeHandler
);
}
return
result
;
}
protected
void
initAnnotationConfig
(
List
<
WriteHandler
>
handlerList
)
{
if
(!
HeadKindEnum
.
CLASS
.
equals
(
getExcelHeadProperty
().
getHeadKind
()))
{
return
;
}
Map
<
Integer
,
Head
>
headMap
=
getExcelHeadProperty
().
getHeadMap
();
Map
<
Integer
,
ExcelContentProperty
>
contentPropertyMap
=
getExcelHeadProperty
().
getContentPropertyMap
();
boolean
hasCellStyle
=
false
;
boolean
hasColumnWidth
=
false
;
for
(
Map
.
Entry
<
Integer
,
Head
>
entry
:
headMap
.
entrySet
())
{
if
(
entry
.
getValue
().
getCellStyleProperty
()
!=
null
)
{
hasCellStyle
=
true
;
}
if
(
entry
.
getValue
().
getColumnWidthProperty
()
!=
null
)
{
hasColumnWidth
=
true
;
}
ExcelContentProperty
excelContentProperty
=
contentPropertyMap
.
get
(
entry
.
getKey
());
if
(
excelContentProperty
.
getCellStyleProperty
()
!=
null
)
{
hasCellStyle
=
true
;
}
}
if
(
hasCellStyle
)
{
dealCellStyle
(
handlerList
,
contentPropertyMap
);
}
if
(
hasColumnWidth
)
{
dealColumnWidth
(
handlerList
);
}
dealRowHigh
(
handlerList
,
contentPropertyMap
);
}
private
void
dealRowHigh
(
List
<
WriteHandler
>
handlerList
,
Map
<
Integer
,
ExcelContentProperty
>
contentPropertyMap
)
{
RowHeightProperty
headRowHeightProperty
=
excelHeadProperty
.
getHeadRowHeightProperty
();
RowHeightProperty
contentRowHeightProperty
=
excelHeadProperty
.
getContentRowHeightProperty
();
if
(
headRowHeightProperty
==
null
&&
contentRowHeightProperty
==
null
)
{
return
;
}
Short
headRowHeight
=
null
;
if
(
headRowHeightProperty
!=
null
)
{
headRowHeight
=
headRowHeightProperty
.
getHeight
();
}
Short
contentRowHeight
=
null
;
if
(
contentRowHeightProperty
!=
null
)
{
contentRowHeight
=
contentRowHeightProperty
.
getHeight
();
}
handlerList
.
add
(
new
SimpleRowHeightStyleStrategy
(
headRowHeight
,
contentRowHeight
));
}
private
void
dealColumnWidth
(
List
<
WriteHandler
>
handlerList
)
{
WriteHandler
columnWidthStyleStrategy
=
new
AbstractColumnWidthStyleStrategy
()
{
@Override
protected
void
setColumnWidth
(
Sheet
sheet
,
Cell
cell
,
Head
head
)
{
if
(
head
==
null
)
{
return
;
}
if
(
head
.
getColumnWidthProperty
()
!=
null
)
{
sheet
.
setColumnWidth
(
head
.
getColumnIndex
(),
head
.
getColumnWidthProperty
().
getWidth
());
}
}
};
handlerList
.
add
(
columnWidthStyleStrategy
);
}
private
void
dealCellStyle
(
List
<
WriteHandler
>
handlerList
,
final
Map
<
Integer
,
ExcelContentProperty
>
contentPropertyMap
)
{
WriteHandler
columnCellStyleStrategy
=
new
AbstractColumnCellStyleStrategy
()
{
@Override
protected
CellStyle
headCellStyle
(
Head
head
)
{
if
(
head
==
null
||
head
.
getCellStyleProperty
()
==
null
)
{
return
null
;
}
CellStyleProperty
cellStyleProperty
=
head
.
getCellStyleProperty
();
return
new
CellStyle
(
cellStyleProperty
.
getFontName
(),
cellStyleProperty
.
getFontHeightInPoints
(),
cellStyleProperty
.
getBold
(),
cellStyleProperty
.
getIndexedColors
());
}
@Override
protected
CellStyle
contentCellStyle
(
Head
head
)
{
if
(
head
==
null
)
{
return
null
;
}
ExcelContentProperty
excelContentProperty
=
contentPropertyMap
.
get
(
head
.
getColumnIndex
());
if
(
excelContentProperty
==
null
||
excelContentProperty
.
getCellStyleProperty
()
==
null
)
{
return
null
;
}
CellStyleProperty
cellStyleProperty
=
excelContentProperty
.
getCellStyleProperty
();
return
new
CellStyle
(
cellStyleProperty
.
getFontName
(),
cellStyleProperty
.
getFontHeightInPoints
(),
cellStyleProperty
.
getBold
(),
cellStyleProperty
.
getIndexedColors
());
}
};
handlerList
.
add
(
columnCellStyleStrategy
);
}
@Override
public
Map
<
Class
<?
extends
WriteHandler
>,
List
<
WriteHandler
>>
writeHandlerMap
()
{
return
getWriteHandlerMap
();
}
@Override
public
boolean
needHead
()
{
return
getNeedHead
();
}
@Override
public
int
writeRelativeHeadRowIndex
()
{
return
getWriteRelativeHeadRowIndex
();
}
@Override
public
ExcelHeadProperty
excelHeadProperty
()
{
return
getExcelHeadProperty
();
}
@Override
public
boolean
isNew
()
{
return
getNewInitialization
();
}
@Override
public
List
<
ReadListener
>
readListenerList
()
{
return
getReadListenerList
();
}
@Override
public
Map
<
ConverterKey
,
Converter
>
readConverterMap
()
{
return
getReadConverterMap
();
}
@Override
public
Map
<
Class
,
Converter
>
writeConverterMap
()
{
return
getWriteConverterMap
();
}
}
src/main/java/com/alibaba/excel/metadata/holder/read/ReadConfiguration.java
已删除
100644 → 0
浏览文件 @
e2bb1999
package
com.alibaba.excel.metadata.holder.read
;
import
java.util.List
;
import
java.util.Map
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.converters.ConverterKey
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
import
com.alibaba.excel.read.listener.ReadListener
;
/**
*
* Get the corresponding configuration
*
* @author zhuangjiaju
**/
public
interface
ReadConfiguration
{
/**
* What handler does the currently operated cell need to execute
*
* @return
*/
List
<
ReadListener
>
readListenerList
();
/**
* What converter does the currently operated cell need to execute
*
* @return
*/
Map
<
ConverterKey
,
Converter
>
readConverterMap
();
/**
* What 'ExcelHeadProperty' does the currently operated cell need to execute
*
* @return
*/
ExcelHeadProperty
excelHeadProperty
();
}
src/main/java/com/alibaba/excel/metadata/holder/read/SheetHolder.java
已删除
100644 → 0
浏览文件 @
e2bb1999
package
com.alibaba.excel.metadata.holder.read
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.converters.ConverterKey
;
import
com.alibaba.excel.metadata.CellStyle
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.TableStyle
;
import
com.alibaba.excel.metadata.holder.write.AbstractWriteConfiguration
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.write.handler.WriteHandler
;
import
com.alibaba.excel.write.style.RowCellStyleStrategy
;
import
com.alibaba.excel.write.style.column.AbstractHeadColumnWidthStyleStrategy
;
/**
* sheet holder
*
* @author zhuangjiaju
*/
public
class
SheetHolder
extends
AbstractWriteConfiguration
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
SheetHolder
.
class
);
/***
* poi sheet
*/
private
Sheet
sheet
;
/***
* sheetNo
*/
private
Integer
sheetNo
;
/***
* sheetName
*/
private
String
sheetName
;
/***
* poi sheet
*/
private
WorkbookHolder
parentWorkBook
;
/***
* has been initialized table
*/
private
Map
<
Integer
,
TableHolder
>
hasBeenInitializedTable
;
/**
* current param
*/
private
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheetParam
;
public
static
SheetHolder
buildWriteWorkSheetHolder
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
,
WorkbookHolder
workbookHolder
)
{
SheetHolder
sheetHolder
=
buildBaseSheetHolder
(
sheet
,
workbookHolder
);
sheetHolder
.
setNewInitialization
(
Boolean
.
TRUE
);
if
(
sheet
.
getNeedHead
()
==
null
)
{
sheetHolder
.
setNeedHead
(
workbookHolder
.
needHead
());
}
else
{
sheetHolder
.
setNeedHead
(
sheet
.
getNeedHead
());
}
if
(
sheet
.
getWriteRelativeHeadRowIndex
()
==
null
)
{
sheetHolder
.
setWriteRelativeHeadRowIndex
(
workbookHolder
.
writeRelativeHeadRowIndex
());
}
else
{
sheetHolder
.
setWriteRelativeHeadRowIndex
(
sheet
.
getWriteRelativeHeadRowIndex
());
}
// Compatible with old code
compatibleOldCode
(
sheet
);
List
<
WriteHandler
>
handlerList
=
new
ArrayList
<
WriteHandler
>();
if
(
sheet
.
getCustomWriteHandlerList
()
!=
null
&&
!
sheet
.
getCustomWriteHandlerList
().
isEmpty
())
{
handlerList
.
addAll
(
sheet
.
getCustomWriteHandlerList
());
}
// Initialization Annotation
sheetHolder
.
initAnnotationConfig
(
handlerList
);
sheetHolder
.
setWriteHandlerMap
(
sheetHolder
.
sortAndClearUpHandler
(
handlerList
,
workbookHolder
.
getWriteHandlerMap
()));
Map
<
Class
,
Converter
>
converterMap
=
new
HashMap
<
Class
,
Converter
>(
workbookHolder
.
getWriteConverterMap
());
if
(
sheet
.
getCustomConverterList
()
!=
null
&&
!
sheet
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
sheet
.
getCustomConverterList
())
{
converterMap
.
put
(
converter
.
getClass
(),
converter
);
}
}
sheetHolder
.
setWriteConverterMap
(
converterMap
);
sheetHolder
.
setHasBeenInitializedTable
(
new
HashMap
<
Integer
,
TableHolder
>());
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Sheet writeHandlerMap:{}"
,
sheetHolder
.
getWriteHandlerMap
());
}
return
sheetHolder
;
}
public
static
SheetHolder
buildReadWorkSheetHolder
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
,
WorkbookHolder
workbookHolder
)
{
SheetHolder
sheetHolder
=
buildBaseSheetHolder
(
sheet
,
workbookHolder
);
if
(
sheet
.
getReadHeadRowNumber
()
==
null
)
{
if
(
workbookHolder
.
getReadHeadRowNumber
()
==
null
)
{
sheetHolder
.
setReadHeadRowNumber
(
sheetHolder
.
getExcelHeadProperty
().
getHeadRowNumber
());
}
else
{
sheetHolder
.
setReadHeadRowNumber
(
workbookHolder
.
getReadHeadRowNumber
());
}
}
else
{
sheetHolder
.
setReadHeadRowNumber
(
sheet
.
getReadHeadRowNumber
());
}
Map
<
ConverterKey
,
Converter
>
converterMap
=
new
HashMap
<
ConverterKey
,
Converter
>(
workbookHolder
.
getReadConverterMap
());
if
(
sheet
.
getCustomConverterList
()
!=
null
&&
!
sheet
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
sheet
.
getCustomConverterList
())
{
converterMap
.
put
(
ConverterKey
.
buildConverterKey
(
converter
),
converter
);
}
}
sheetHolder
.
setReadConverterMap
(
converterMap
);
List
<
ReadListener
>
readListenerList
=
new
ArrayList
<
ReadListener
>();
if
(
sheet
.
getCustomReadListenerList
()
!=
null
&&
!
sheet
.
getCustomReadListenerList
().
isEmpty
())
{
readListenerList
.
addAll
(
sheet
.
getCustomReadListenerList
());
}
sheetHolder
.
setReadListenerList
(
readListenerList
);
return
sheetHolder
;
}
private
static
SheetHolder
buildBaseSheetHolder
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
,
WorkbookHolder
workbookHolder
)
{
SheetHolder
sheetHolder
=
new
SheetHolder
();
sheetHolder
.
setSheetParam
(
sheet
);
sheetHolder
.
setParentWorkBook
(
workbookHolder
);
boolean
noHead
=
(
sheet
.
getHead
()
==
null
||
sheet
.
getHead
().
isEmpty
())
&&
sheet
.
getClazz
()
==
null
;
if
(
noHead
)
{
// Use parent
sheetHolder
.
setHead
(
workbookHolder
.
getHead
());
sheetHolder
.
setClazz
(
workbookHolder
.
getClazz
());
}
else
{
sheetHolder
.
setHead
(
sheet
.
getHead
());
sheetHolder
.
setClazz
(
sheet
.
getClazz
());
}
if
(
sheet
.
getAutoTrim
()
==
null
)
{
workbookHolder
.
setAutoTrim
(
workbookHolder
.
getAutoTrim
());
}
else
{
workbookHolder
.
setAutoTrim
(
sheet
.
getNeedHead
());
}
// Initialization property
sheetHolder
.
setExcelHeadProperty
(
new
ExcelHeadProperty
(
sheetHolder
.
getClazz
(),
sheetHolder
.
getHead
(),
workbookHolder
));
return
sheetHolder
;
}
/**
* Compatible with old code
*/
@Deprecated
private
static
void
compatibleOldCode
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
)
{
if
(
sheet
.
getColumnWidthMap
()
!=
null
&&
!
sheet
.
getColumnWidthMap
().
isEmpty
())
{
final
Map
<
Integer
,
Integer
>
columnWidthMap
=
sheet
.
getColumnWidthMap
();
if
(
sheet
.
getCustomWriteHandlerList
()
==
null
)
{
sheet
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
sheet
.
getCustomWriteHandlerList
().
add
(
new
AbstractHeadColumnWidthStyleStrategy
()
{
@Override
protected
Integer
columnWidth
(
Head
head
)
{
if
(
columnWidthMap
.
containsKey
(
head
.
getColumnIndex
()))
{
columnWidthMap
.
get
(
head
.
getColumnIndex
());
}
return
20
;
}
});
}
if
(
sheet
.
getTableStyle
()
!=
null
)
{
final
TableStyle
tableStyle
=
sheet
.
getTableStyle
();
if
(
sheet
.
getCustomWriteHandlerList
()
==
null
)
{
sheet
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
CellStyle
headCellStyle
=
new
CellStyle
();
headCellStyle
.
setFont
(
tableStyle
.
getTableHeadFont
());
headCellStyle
.
setIndexedColors
(
tableStyle
.
getTableContentBackGroundColor
());
CellStyle
contentCellStyle
=
new
CellStyle
();
contentCellStyle
.
setFont
(
tableStyle
.
getTableContentFont
());
contentCellStyle
.
setIndexedColors
(
tableStyle
.
getTableContentBackGroundColor
());
sheet
.
getCustomWriteHandlerList
().
add
(
new
RowCellStyleStrategy
(
headCellStyle
,
contentCellStyle
));
}
}
public
Sheet
getSheet
()
{
return
sheet
;
}
public
void
setSheet
(
Sheet
sheet
)
{
this
.
sheet
=
sheet
;
}
public
Integer
getSheetNo
()
{
return
sheetNo
;
}
public
void
setSheetNo
(
Integer
sheetNo
)
{
this
.
sheetNo
=
sheetNo
;
}
public
String
getSheetName
()
{
return
sheetName
;
}
public
void
setSheetName
(
String
sheetName
)
{
this
.
sheetName
=
sheetName
;
}
public
WorkbookHolder
getParentWorkBook
()
{
return
parentWorkBook
;
}
public
void
setParentWorkBook
(
WorkbookHolder
parentWorkBook
)
{
this
.
parentWorkBook
=
parentWorkBook
;
}
public
Map
<
Integer
,
TableHolder
>
getHasBeenInitializedTable
()
{
return
hasBeenInitializedTable
;
}
public
void
setHasBeenInitializedTable
(
Map
<
Integer
,
TableHolder
>
hasBeenInitializedTable
)
{
this
.
hasBeenInitializedTable
=
hasBeenInitializedTable
;
}
public
com
.
alibaba
.
excel
.
metadata
.
Sheet
getSheetParam
()
{
return
sheetParam
;
}
public
void
setSheetParam
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheetParam
)
{
this
.
sheetParam
=
sheetParam
;
}
}
src/main/java/com/alibaba/excel/metadata/holder/read/TableHolder.java
已删除
100644 → 0
浏览文件 @
e2bb1999
package
com.alibaba.excel.metadata.holder.read
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.metadata.CellStyle
;
import
com.alibaba.excel.metadata.Table
;
import
com.alibaba.excel.metadata.TableStyle
;
import
com.alibaba.excel.metadata.holder.write.AbstractWriteConfiguration
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
import
com.alibaba.excel.write.handler.WriteHandler
;
import
com.alibaba.excel.write.style.RowCellStyleStrategy
;
/**
* sheet holder
*
* @author zhuangjiaju
*/
public
class
TableHolder
extends
AbstractWriteConfiguration
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
TableHolder
.
class
);
/***
* poi sheet
*/
private
SheetHolder
parentSheet
;
/***
* tableNo
*/
private
Integer
tableNo
;
/**
* current table param
*/
private
Table
tableParam
;
public
static
TableHolder
buildWriteWorkTableHolder
(
Table
table
,
SheetHolder
sheetHolder
,
WorkbookHolder
workbookHolder
)
{
TableHolder
tableHolder
=
new
TableHolder
();
tableHolder
.
setTableParam
(
table
);
tableHolder
.
setParentSheet
(
sheetHolder
);
tableHolder
.
setTableNo
(
table
.
getTableNo
());
boolean
noHead
=
(
table
.
getHead
()
==
null
||
table
.
getHead
().
isEmpty
())
&&
table
.
getClazz
()
==
null
;
if
(
noHead
)
{
// Use parent
tableHolder
.
setHead
(
sheetHolder
.
getHead
());
tableHolder
.
setClazz
(
sheetHolder
.
getClazz
());
}
else
{
tableHolder
.
setHead
(
table
.
getHead
());
tableHolder
.
setClazz
(
table
.
getClazz
());
}
tableHolder
.
setNewInitialization
(
Boolean
.
TRUE
);
// Initialization property
tableHolder
.
setExcelHeadProperty
(
new
ExcelHeadProperty
(
tableHolder
.
getClazz
(),
tableHolder
.
getHead
(),
workbookHolder
.
getConvertAllFiled
()));
if
(
table
.
getNeedHead
()
==
null
)
{
tableHolder
.
setNeedHead
(
sheetHolder
.
needHead
());
}
else
{
tableHolder
.
setNeedHead
(
table
.
getNeedHead
());
}
if
(
table
.
getWriteRelativeHeadRowIndex
()
==
null
)
{
tableHolder
.
setWriteRelativeHeadRowIndex
(
sheetHolder
.
writeRelativeHeadRowIndex
());
}
else
{
tableHolder
.
setWriteRelativeHeadRowIndex
(
table
.
getWriteRelativeHeadRowIndex
());
}
// Compatible with old code
compatibleOldCode
(
table
);
List
<
WriteHandler
>
handlerList
=
new
ArrayList
<
WriteHandler
>();
if
(
table
.
getCustomWriteHandlerList
()
!=
null
&&
!
table
.
getCustomWriteHandlerList
().
isEmpty
())
{
handlerList
.
addAll
(
table
.
getCustomWriteHandlerList
());
}
// Initialization Annotation
tableHolder
.
initAnnotationConfig
(
handlerList
);
tableHolder
.
setWriteHandlerMap
(
tableHolder
.
sortAndClearUpHandler
(
handlerList
,
sheetHolder
.
getWriteHandlerMap
()));
Map
<
Class
,
Converter
>
converterMap
=
new
HashMap
<
Class
,
Converter
>(
sheetHolder
.
getWriteConverterMap
());
if
(
table
.
getCustomConverterList
()
!=
null
&&
!
table
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
table
.
getCustomConverterList
())
{
converterMap
.
put
(
converter
.
getClass
(),
converter
);
}
}
tableHolder
.
setWriteConverterMap
(
converterMap
);
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Table writeHandlerMap:{}"
,
tableHolder
.
getWriteHandlerMap
());
}
return
tableHolder
;
}
/**
* Compatible with old code
*/
@Deprecated
private
static
void
compatibleOldCode
(
Table
table
)
{
if
(
table
.
getTableStyle
()
!=
null
)
{
final
TableStyle
tableStyle
=
table
.
getTableStyle
();
if
(
table
.
getCustomWriteHandlerList
()
==
null
)
{
table
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
CellStyle
headCellStyle
=
new
CellStyle
();
headCellStyle
.
setFont
(
tableStyle
.
getTableHeadFont
());
headCellStyle
.
setIndexedColors
(
tableStyle
.
getTableContentBackGroundColor
());
CellStyle
contentCellStyle
=
new
CellStyle
();
contentCellStyle
.
setFont
(
tableStyle
.
getTableContentFont
());
contentCellStyle
.
setIndexedColors
(
tableStyle
.
getTableContentBackGroundColor
());
table
.
getCustomWriteHandlerList
().
add
(
new
RowCellStyleStrategy
(
headCellStyle
,
contentCellStyle
));
}
}
public
SheetHolder
getParentSheet
()
{
return
parentSheet
;
}
public
void
setParentSheet
(
SheetHolder
parentSheet
)
{
this
.
parentSheet
=
parentSheet
;
}
public
Integer
getTableNo
()
{
return
tableNo
;
}
public
void
setTableNo
(
Integer
tableNo
)
{
this
.
tableNo
=
tableNo
;
}
public
Table
getTableParam
()
{
return
tableParam
;
}
public
void
setTableParam
(
Table
tableParam
)
{
this
.
tableParam
=
tableParam
;
}
}
src/main/java/com/alibaba/excel/metadata/holder/read/WorkbookHolder.java
已删除
100644 → 0
浏览文件 @
e2bb1999
package
com.alibaba.excel.metadata.holder.read
;
import
java.io.File
;
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.Workbook
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.cache.ReadCache
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.converters.ConverterKey
;
import
com.alibaba.excel.converters.DefaultConverterLoader
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.metadata.holder.write.AbstractWriteConfiguration
;
import
com.alibaba.excel.read.listener.ModelBuildEventListener
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.handler.DefaultWriteHandlerLoader
;
import
com.alibaba.excel.write.handler.WriteHandler
;
/**
* Workbook holder
*
* @author zhuangjiaju
*/
public
class
WorkbookHolder
extends
AbstractWriteConfiguration
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
WorkbookHolder
.
class
);
/***
* poi Workbook
*/
private
Workbook
workbook
;
/**
* prevent duplicate creation of sheet objects
*/
private
Map
<
Integer
,
SheetHolder
>
hasBeenInitializedSheet
;
/**
* current param
*/
private
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbookParam
;
/**
* Final output stream
*/
private
OutputStream
outputStream
;
/**
* <li>write: Template input stream
* <li>read: Read InputStream
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
private
InputStream
inputStream
;
/**
* <li>write: Template file
* <li>read: Read file
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
private
File
file
;
/**
* Default true
*/
private
Boolean
autoCloseStream
;
/**
* Excel type
*/
private
ExcelTypeEnum
excelType
;
/**
* This object can be read in the Listener {@link AnalysisEventListener#invoke(Object, AnalysisContext)}
* {@link AnalysisContext#getCustom()}
*
*/
private
Object
readCustomObject
;
/**
* A cache that stores temp data to save memory.Default use {@link com.alibaba.excel.cache.Ehcache}
*/
private
ReadCache
readCache
;
/**
* true if date uses 1904 windowing, or false if using 1900 date windowing.
*
* @return
*/
private
Boolean
use1904windowing
;
/**
* Mmandatory use 'inputStream'
*/
private
Boolean
mandatoryUseInputStream
;
/**
* Temporary files when reading excel
*/
private
File
readTempFile
;
/**
* The default is all excel objects.if true , you can use {@link com.alibaba.excel.annotation.ExcelIgnore} ignore a
* field. if false , you must use {@link com.alibaba.excel.annotation.ExcelProperty} to use a filed.
*
* @deprecated Just to be compatible with historical data, The default is always going to be convert all filed.
*/
@Deprecated
private
Boolean
convertAllFiled
;
/**
* Write handler
*
* @deprecated please use {@link WriteHandler}
*/
@Deprecated
private
com
.
alibaba
.
excel
.
event
.
WriteHandler
writeHandler
;
public
static
WorkbookHolder
buildWriteWorkbookHolder
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbook
)
{
WorkbookHolder
workbookHolder
=
buildBaseWorkbookHolder
(
workbook
);
workbookHolder
.
setNewInitialization
(
Boolean
.
TRUE
);
if
(
workbook
.
getNeedHead
()
==
null
)
{
workbookHolder
.
setNeedHead
(
Boolean
.
TRUE
);
}
else
{
workbookHolder
.
setNeedHead
(
workbook
.
getNeedHead
());
}
if
(
workbook
.
getWriteRelativeHeadRowIndex
()
==
null
)
{
workbookHolder
.
setWriteRelativeHeadRowIndex
(
0
);
}
else
{
workbookHolder
.
setWriteRelativeHeadRowIndex
(
workbook
.
getWriteRelativeHeadRowIndex
());
}
List
<
WriteHandler
>
handlerList
=
new
ArrayList
<
WriteHandler
>();
if
(
workbook
.
getCustomWriteHandlerList
()
!=
null
&&
!
workbook
.
getCustomWriteHandlerList
().
isEmpty
())
{
handlerList
.
addAll
(
workbook
.
getCustomWriteHandlerList
());
}
handlerList
.
addAll
(
DefaultWriteHandlerLoader
.
loadDefaultHandler
());
workbookHolder
.
setWriteHandlerMap
(
workbookHolder
.
sortAndClearUpHandler
(
handlerList
,
null
));
Map
<
Class
,
Converter
>
converterMap
=
DefaultConverterLoader
.
loadDefaultWriteConverter
();
if
(
workbook
.
getCustomConverterList
()
!=
null
&&
!
workbook
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
workbook
.
getCustomConverterList
())
{
converterMap
.
put
(
converter
.
getClass
(),
converter
);
}
}
workbookHolder
.
setWriteConverterMap
(
converterMap
);
workbookHolder
.
setHasBeenInitializedSheet
(
new
HashMap
<
Integer
,
SheetHolder
>());
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Wookbook writeHandlerMap:{}"
,
workbookHolder
.
getWriteHandlerMap
());
}
return
workbookHolder
;
}
public
static
WorkbookHolder
buildReadWorkbookHolder
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbook
)
{
WorkbookHolder
workbookHolder
=
buildBaseWorkbookHolder
(
workbook
);
if
(
workbook
.
getFile
()
==
null
&&
workbookHolder
.
getInputStream
()
==
null
)
{
throw
new
ExcelAnalysisException
(
"Read excel 'file' and 'inputStream' cannot be empty at the same time!"
);
}
workbookHolder
.
setReadCustomObject
(
workbook
.
getReadCustomObject
());
workbookHolder
.
setReadHeadRowNumber
(
workbook
.
getReadHeadRowNumber
());
workbookHolder
.
setReadCache
(
workbook
.
getReadCache
());
Map
<
ConverterKey
,
Converter
>
converterMap
=
DefaultConverterLoader
.
loadDefaultReadConverter
();
if
(
workbook
.
getCustomConverterList
()
!=
null
&&
!
workbook
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
workbook
.
getCustomConverterList
())
{
converterMap
.
put
(
ConverterKey
.
buildConverterKey
(
converter
),
converter
);
}
}
workbookHolder
.
setReadConverterMap
(
converterMap
);
List
<
ReadListener
>
readListenerList
=
new
ArrayList
<
ReadListener
>();
readListenerList
.
add
(
new
ModelBuildEventListener
());
if
(
workbook
.
getCustomReadListenerList
()
!=
null
&&
!
workbook
.
getCustomReadListenerList
().
isEmpty
())
{
readListenerList
.
addAll
(
workbook
.
getCustomReadListenerList
());
}
workbookHolder
.
setReadListenerList
(
readListenerList
);
return
workbookHolder
;
}
private
static
WorkbookHolder
buildBaseWorkbookHolder
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbook
)
{
WorkbookHolder
workbookHolder
=
new
WorkbookHolder
();
workbookHolder
.
setUse1904windowing
(
workbook
.
getUse1904windowing
());
workbookHolder
.
setWorkbookParam
(
workbook
);
workbookHolder
.
setInputStream
(
workbook
.
getInputStream
());
workbookHolder
.
setFile
(
workbook
.
getFile
());
workbookHolder
.
setExcelType
(
workbook
.
getExcelType
());
workbookHolder
.
setHead
(
workbook
.
getHead
());
workbookHolder
.
setClazz
(
workbook
.
getClazz
());
if
(
workbook
.
getConvertAllFiled
()
==
null
)
{
workbookHolder
.
setConvertAllFiled
(
Boolean
.
TRUE
);
}
else
{
workbookHolder
.
setConvertAllFiled
(
workbook
.
getConvertAllFiled
());
}
if
(
workbook
.
getAutoCloseStream
()
==
null
)
{
workbookHolder
.
setAutoCloseStream
(
Boolean
.
TRUE
);
}
else
{
workbookHolder
.
setAutoCloseStream
(
workbook
.
getAutoCloseStream
());
}
if
(
workbook
.
getAutoTrim
()
==
null
)
{
workbookHolder
.
setAutoTrim
(
Boolean
.
TRUE
);
}
else
{
workbookHolder
.
setAutoTrim
(
workbook
.
getNeedHead
());
}
return
workbookHolder
;
}
public
Workbook
getWorkbook
()
{
return
workbook
;
}
public
void
setWorkbook
(
Workbook
workbook
)
{
this
.
workbook
=
workbook
;
}
public
Map
<
Integer
,
SheetHolder
>
getHasBeenInitializedSheet
()
{
return
hasBeenInitializedSheet
;
}
public
void
setHasBeenInitializedSheet
(
Map
<
Integer
,
SheetHolder
>
hasBeenInitializedSheet
)
{
this
.
hasBeenInitializedSheet
=
hasBeenInitializedSheet
;
}
public
com
.
alibaba
.
excel
.
metadata
.
Workbook
getWorkbookParam
()
{
return
workbookParam
;
}
public
void
setWorkbookParam
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbookParam
)
{
this
.
workbookParam
=
workbookParam
;
}
public
OutputStream
getOutputStream
()
{
return
outputStream
;
}
public
void
setOutputStream
(
OutputStream
outputStream
)
{
this
.
outputStream
=
outputStream
;
}
public
InputStream
getInputStream
()
{
return
inputStream
;
}
public
void
setInputStream
(
InputStream
inputStream
)
{
this
.
inputStream
=
inputStream
;
}
public
com
.
alibaba
.
excel
.
event
.
WriteHandler
getWriteHandler
()
{
return
writeHandler
;
}
public
void
setWriteHandler
(
com
.
alibaba
.
excel
.
event
.
WriteHandler
writeHandler
)
{
this
.
writeHandler
=
writeHandler
;
}
public
Boolean
getAutoCloseStream
()
{
return
autoCloseStream
;
}
public
void
setAutoCloseStream
(
Boolean
autoCloseStream
)
{
this
.
autoCloseStream
=
autoCloseStream
;
}
public
Boolean
getConvertAllFiled
()
{
return
convertAllFiled
;
}
public
void
setConvertAllFiled
(
Boolean
convertAllFiled
)
{
this
.
convertAllFiled
=
convertAllFiled
;
}
public
File
getFile
()
{
return
file
;
}
public
void
setFile
(
File
file
)
{
this
.
file
=
file
;
}
public
ExcelTypeEnum
getExcelType
()
{
return
excelType
;
}
public
void
setExcelType
(
ExcelTypeEnum
excelType
)
{
this
.
excelType
=
excelType
;
}
public
Object
getReadCustomObject
()
{
return
readCustomObject
;
}
public
void
setReadCustomObject
(
Object
readCustomObject
)
{
this
.
readCustomObject
=
readCustomObject
;
}
public
ReadCache
getReadCache
()
{
return
readCache
;
}
public
void
setReadCache
(
ReadCache
readCache
)
{
this
.
readCache
=
readCache
;
}
public
Boolean
getUse1904windowing
()
{
return
use1904windowing
;
}
public
void
setUse1904windowing
(
Boolean
use1904windowing
)
{
this
.
use1904windowing
=
use1904windowing
;
}
public
Boolean
getMandatoryUseInputStream
()
{
return
mandatoryUseInputStream
;
}
public
void
setMandatoryUseInputStream
(
Boolean
mandatoryUseInputStream
)
{
this
.
mandatoryUseInputStream
=
mandatoryUseInputStream
;
}
public
File
getReadTempFile
()
{
return
readTempFile
;
}
public
void
setReadTempFile
(
File
readTempFile
)
{
this
.
readTempFile
=
readTempFile
;
}
}
src/main/java/com/alibaba/excel/metadata/holder/write/SheetHolder.java
已删除
100644 → 0
浏览文件 @
e2bb1999
package
com.alibaba.excel.metadata.holder.write
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.converters.ConverterKey
;
import
com.alibaba.excel.metadata.CellStyle
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.TableStyle
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.write.handler.WriteHandler
;
import
com.alibaba.excel.write.style.RowCellStyleStrategy
;
import
com.alibaba.excel.write.style.column.AbstractHeadColumnWidthStyleStrategy
;
/**
* sheet holder
*
* @author zhuangjiaju
*/
public
class
SheetHolder
extends
AbstractWriteConfiguration
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
SheetHolder
.
class
);
/***
* poi sheet
*/
private
Sheet
sheet
;
/***
* sheetNo
*/
private
Integer
sheetNo
;
/***
* sheetName
*/
private
String
sheetName
;
/***
* poi sheet
*/
private
WorkbookHolder
parentWorkBook
;
/***
* has been initialized table
*/
private
Map
<
Integer
,
TableHolder
>
hasBeenInitializedTable
;
/**
* current param
*/
private
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheetParam
;
public
static
SheetHolder
buildWriteWorkSheetHolder
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
,
WorkbookHolder
workbookHolder
)
{
SheetHolder
sheetHolder
=
buildBaseSheetHolder
(
sheet
,
workbookHolder
);
sheetHolder
.
setNewInitialization
(
Boolean
.
TRUE
);
if
(
sheet
.
getNeedHead
()
==
null
)
{
sheetHolder
.
setNeedHead
(
workbookHolder
.
needHead
());
}
else
{
sheetHolder
.
setNeedHead
(
sheet
.
getNeedHead
());
}
if
(
sheet
.
getWriteRelativeHeadRowIndex
()
==
null
)
{
sheetHolder
.
setWriteRelativeHeadRowIndex
(
workbookHolder
.
writeRelativeHeadRowIndex
());
}
else
{
sheetHolder
.
setWriteRelativeHeadRowIndex
(
sheet
.
getWriteRelativeHeadRowIndex
());
}
// Compatible with old code
compatibleOldCode
(
sheet
);
List
<
WriteHandler
>
handlerList
=
new
ArrayList
<
WriteHandler
>();
if
(
sheet
.
getCustomWriteHandlerList
()
!=
null
&&
!
sheet
.
getCustomWriteHandlerList
().
isEmpty
())
{
handlerList
.
addAll
(
sheet
.
getCustomWriteHandlerList
());
}
// Initialization Annotation
sheetHolder
.
initAnnotationConfig
(
handlerList
);
sheetHolder
.
setWriteHandlerMap
(
sheetHolder
.
sortAndClearUpHandler
(
handlerList
,
workbookHolder
.
getWriteHandlerMap
()));
Map
<
Class
,
Converter
>
converterMap
=
new
HashMap
<
Class
,
Converter
>(
workbookHolder
.
getWriteConverterMap
());
if
(
sheet
.
getCustomConverterList
()
!=
null
&&
!
sheet
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
sheet
.
getCustomConverterList
())
{
converterMap
.
put
(
converter
.
getClass
(),
converter
);
}
}
sheetHolder
.
setWriteConverterMap
(
converterMap
);
sheetHolder
.
setHasBeenInitializedTable
(
new
HashMap
<
Integer
,
TableHolder
>());
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Sheet writeHandlerMap:{}"
,
sheetHolder
.
getWriteHandlerMap
());
}
return
sheetHolder
;
}
public
static
SheetHolder
buildReadWorkSheetHolder
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
,
WorkbookHolder
workbookHolder
)
{
SheetHolder
sheetHolder
=
buildBaseSheetHolder
(
sheet
,
workbookHolder
);
if
(
sheet
.
getReadHeadRowNumber
()
==
null
)
{
if
(
workbookHolder
.
getReadHeadRowNumber
()
==
null
)
{
sheetHolder
.
setReadHeadRowNumber
(
sheetHolder
.
getExcelHeadProperty
().
getHeadRowNumber
());
}
else
{
sheetHolder
.
setReadHeadRowNumber
(
workbookHolder
.
getReadHeadRowNumber
());
}
}
else
{
sheetHolder
.
setReadHeadRowNumber
(
sheet
.
getReadHeadRowNumber
());
}
Map
<
ConverterKey
,
Converter
>
converterMap
=
new
HashMap
<
ConverterKey
,
Converter
>(
workbookHolder
.
getReadConverterMap
());
if
(
sheet
.
getCustomConverterList
()
!=
null
&&
!
sheet
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
sheet
.
getCustomConverterList
())
{
converterMap
.
put
(
ConverterKey
.
buildConverterKey
(
converter
),
converter
);
}
}
sheetHolder
.
setReadConverterMap
(
converterMap
);
List
<
ReadListener
>
readListenerList
=
new
ArrayList
<
ReadListener
>();
if
(
sheet
.
getCustomReadListenerList
()
!=
null
&&
!
sheet
.
getCustomReadListenerList
().
isEmpty
())
{
readListenerList
.
addAll
(
sheet
.
getCustomReadListenerList
());
}
sheetHolder
.
setReadListenerList
(
readListenerList
);
return
sheetHolder
;
}
private
static
SheetHolder
buildBaseSheetHolder
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
,
WorkbookHolder
workbookHolder
)
{
SheetHolder
sheetHolder
=
new
SheetHolder
();
sheetHolder
.
setSheetParam
(
sheet
);
sheetHolder
.
setParentWorkBook
(
workbookHolder
);
boolean
noHead
=
(
sheet
.
getHead
()
==
null
||
sheet
.
getHead
().
isEmpty
())
&&
sheet
.
getClazz
()
==
null
;
if
(
noHead
)
{
// Use parent
sheetHolder
.
setHead
(
workbookHolder
.
getHead
());
sheetHolder
.
setClazz
(
workbookHolder
.
getClazz
());
}
else
{
sheetHolder
.
setHead
(
sheet
.
getHead
());
sheetHolder
.
setClazz
(
sheet
.
getClazz
());
}
if
(
sheet
.
getAutoTrim
()
==
null
)
{
workbookHolder
.
setAutoTrim
(
workbookHolder
.
getAutoTrim
());
}
else
{
workbookHolder
.
setAutoTrim
(
sheet
.
getNeedHead
());
}
// Initialization property
sheetHolder
.
setExcelHeadProperty
(
new
ExcelHeadProperty
(
sheetHolder
.
getClazz
(),
sheetHolder
.
getHead
(),
workbookHolder
));
return
sheetHolder
;
}
/**
* Compatible with old code
*/
@Deprecated
private
static
void
compatibleOldCode
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
)
{
if
(
sheet
.
getColumnWidthMap
()
!=
null
&&
!
sheet
.
getColumnWidthMap
().
isEmpty
())
{
final
Map
<
Integer
,
Integer
>
columnWidthMap
=
sheet
.
getColumnWidthMap
();
if
(
sheet
.
getCustomWriteHandlerList
()
==
null
)
{
sheet
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
sheet
.
getCustomWriteHandlerList
().
add
(
new
AbstractHeadColumnWidthStyleStrategy
()
{
@Override
protected
Integer
columnWidth
(
Head
head
)
{
if
(
columnWidthMap
.
containsKey
(
head
.
getColumnIndex
()))
{
columnWidthMap
.
get
(
head
.
getColumnIndex
());
}
return
20
;
}
});
}
if
(
sheet
.
getTableStyle
()
!=
null
)
{
final
TableStyle
tableStyle
=
sheet
.
getTableStyle
();
if
(
sheet
.
getCustomWriteHandlerList
()
==
null
)
{
sheet
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
CellStyle
headCellStyle
=
new
CellStyle
();
headCellStyle
.
setFont
(
tableStyle
.
getTableHeadFont
());
headCellStyle
.
setIndexedColors
(
tableStyle
.
getTableContentBackGroundColor
());
CellStyle
contentCellStyle
=
new
CellStyle
();
contentCellStyle
.
setFont
(
tableStyle
.
getTableContentFont
());
contentCellStyle
.
setIndexedColors
(
tableStyle
.
getTableContentBackGroundColor
());
sheet
.
getCustomWriteHandlerList
().
add
(
new
RowCellStyleStrategy
(
headCellStyle
,
contentCellStyle
));
}
}
public
Sheet
getSheet
()
{
return
sheet
;
}
public
void
setSheet
(
Sheet
sheet
)
{
this
.
sheet
=
sheet
;
}
public
Integer
getSheetNo
()
{
return
sheetNo
;
}
public
void
setSheetNo
(
Integer
sheetNo
)
{
this
.
sheetNo
=
sheetNo
;
}
public
String
getSheetName
()
{
return
sheetName
;
}
public
void
setSheetName
(
String
sheetName
)
{
this
.
sheetName
=
sheetName
;
}
public
WorkbookHolder
getParentWorkBook
()
{
return
parentWorkBook
;
}
public
void
setParentWorkBook
(
WorkbookHolder
parentWorkBook
)
{
this
.
parentWorkBook
=
parentWorkBook
;
}
public
Map
<
Integer
,
TableHolder
>
getHasBeenInitializedTable
()
{
return
hasBeenInitializedTable
;
}
public
void
setHasBeenInitializedTable
(
Map
<
Integer
,
TableHolder
>
hasBeenInitializedTable
)
{
this
.
hasBeenInitializedTable
=
hasBeenInitializedTable
;
}
public
com
.
alibaba
.
excel
.
metadata
.
Sheet
getSheetParam
()
{
return
sheetParam
;
}
public
void
setSheetParam
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheetParam
)
{
this
.
sheetParam
=
sheetParam
;
}
}
src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.read.builder
;
import
com.alibaba.excel.write.metadata.Workbook
;
import
java.io.File
;
import
java.io.InputStream
;
import
java.net.URI
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.cache.ReadCache
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.metadata.ReadWorkbook
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
/**
* Build ExcelWriter
...
...
@@ -11,11 +24,227 @@ public class ExcelReaderBuilder {
/**
* Workbook
*/
private
Workbook
w
orkbook
;
private
ReadWorkbook
readW
orkbook
;
public
ExcelReaderBuilder
()
{
this
.
workbook
=
new
Workbook
();
this
.
readWorkbook
=
new
ReadWorkbook
();
}
public
ExcelReaderBuilder
excelType
(
ExcelTypeEnum
excelType
)
{
readWorkbook
.
setExcelType
(
excelType
);
return
this
;
}
/**
* Read InputStream
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
public
ExcelReaderBuilder
file
(
InputStream
inputStream
)
{
readWorkbook
.
setInputStream
(
inputStream
);
return
this
;
}
/**
* Read file
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
public
ExcelReaderBuilder
file
(
File
file
)
{
readWorkbook
.
setFile
(
file
);
return
this
;
}
/**
* Read file
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
public
ExcelReaderBuilder
file
(
String
pathName
)
{
return
file
(
new
File
(
pathName
));
}
/**
* Read file
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
public
ExcelReaderBuilder
file
(
URI
uri
)
{
return
file
(
new
File
(
uri
));
}
/**
* Mandatory use 'inputStream' .Default is false.
* <li>if false,Will transfer 'inputStream' to temporary files to improve efficiency
*/
public
ExcelReaderBuilder
mandatoryUseInputStream
(
Boolean
mandatoryUseInputStream
)
{
readWorkbook
.
setMandatoryUseInputStream
(
mandatoryUseInputStream
);
return
this
;
}
/**
* Default true
*
* @param autoCloseStream
* @return
*/
public
ExcelReaderBuilder
autoCloseStream
(
Boolean
autoCloseStream
)
{
readWorkbook
.
setAutoCloseStream
(
autoCloseStream
);
return
this
;
}
/**
* This object can be read in the Listener {@link AnalysisEventListener#invoke(Object, AnalysisContext)}
* {@link AnalysisContext#getCustom()}
*
* @param customObject
* @return
*/
public
ExcelReaderBuilder
customObject
(
Object
customObject
)
{
readWorkbook
.
setCustomObject
(
customObject
);
return
this
;
}
/**
* A cache that stores temp data to save memory.Default use {@link com.alibaba.excel.cache.Ehcache}
*
* @param readCache
* @return
*/
public
ExcelReaderBuilder
readCache
(
ReadCache
readCache
)
{
readWorkbook
.
setReadCache
(
readCache
);
return
this
;
}
/**
* The default is all excel objects.if true , you can use {@link com.alibaba.excel.annotation.ExcelIgnore} ignore a
* field. if false , you must use {@link com.alibaba.excel.annotation.ExcelProperty} to use a filed.
* <p>
* Default true
*
* @param convertAllFiled
* @return
* @deprecated Just to be compatible with historical data, The default is always going to be convert all filed.
*/
@Deprecated
public
ExcelReaderBuilder
convertAllFiled
(
Boolean
convertAllFiled
)
{
readWorkbook
.
setConvertAllFiled
(
convertAllFiled
);
return
this
;
}
/**
* Count the number of added heads when read sheet.
*
* <li>0 - This Sheet has no head ,since the first row are the data
* <li>1 - This Sheet has one row head , this is the default
* <li>2 - This Sheet has two row head ,since the third row is the data
*
* @param headRowNumber
* @return
*/
public
ExcelReaderBuilder
headRowNumber
(
Integer
headRowNumber
)
{
readWorkbook
.
setHeadRowNumber
(
headRowNumber
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelReaderBuilder#head(List)} and {@link ExcelReaderBuilder#head(Class)}
*
* @param head
* @return
*/
public
ExcelReaderBuilder
head
(
List
<
List
<
String
>>
head
)
{
readWorkbook
.
setHead
(
head
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelReaderBuilder#head(List)} and {@link ExcelReaderBuilder#head(Class)}
*
* @param clazz
* @return
*/
public
ExcelReaderBuilder
head
(
Class
clazz
)
{
readWorkbook
.
setClazz
(
clazz
);
return
this
;
}
/**
* Custom type conversions override the default.
*
* @param converter
* @return
*/
public
ExcelReaderBuilder
registerConverter
(
Converter
converter
)
{
if
(
readWorkbook
.
getCustomConverterList
()
==
null
)
{
readWorkbook
.
setCustomConverterList
(
new
ArrayList
<
Converter
>());
}
readWorkbook
.
getCustomConverterList
().
add
(
converter
);
return
this
;
}
/**
* Custom type listener run after default
*
* @param readListener
* @return
*/
public
ExcelReaderBuilder
registerReadListener
(
ReadListener
readListener
)
{
if
(
readWorkbook
.
getCustomReadListenerList
()
==
null
)
{
readWorkbook
.
setCustomReadListenerList
(
new
ArrayList
<
ReadListener
>());
}
readWorkbook
.
getCustomReadListenerList
().
add
(
readListener
);
return
this
;
}
/**
* true if date uses 1904 windowing, or false if using 1900 date windowing.
*
* default is false
*
* @param use1904windowing
* @return
*/
public
ExcelReaderBuilder
use1904windowing
(
Boolean
use1904windowing
)
{
readWorkbook
.
setUse1904windowing
(
use1904windowing
);
return
this
;
}
/**
* Automatic trim includes sheet name and content
*
* @param autoTrim
* @return
*/
public
ExcelReaderBuilder
autoTrim
(
Boolean
autoTrim
)
{
readWorkbook
.
setAutoTrim
(
autoTrim
);
return
this
;
}
public
ExcelReader
build
()
{
return
new
ExcelReader
(
readWorkbook
);
}
public
ExcelReaderSheetBuilder
sheet
()
{
return
sheet
(
null
,
null
);
}
public
ExcelReaderSheetBuilder
sheet
(
Integer
sheetNo
)
{
return
sheet
(
sheetNo
,
null
);
}
public
ExcelReaderSheetBuilder
sheet
(
String
sheetName
)
{
return
sheet
(
null
,
sheetName
);
}
public
ExcelReaderSheetBuilder
sheet
(
Integer
sheetNo
,
String
sheetName
)
{
ExcelReaderSheetBuilder
excelReaderSheetBuilder
=
new
ExcelReaderSheetBuilder
(
build
());
if
(
sheetNo
!=
null
)
{
excelReaderSheetBuilder
.
sheetNo
(
sheetNo
);
}
if
(
sheetName
!=
null
)
{
excelReaderSheetBuilder
.
sheetName
(
sheetName
);
}
return
excelReaderSheetBuilder
;
}
}
src/main/java/com/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java
0 → 100644
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.read.builder
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.event.SyncReadListener
;
import
com.alibaba.excel.exception.ExcelGenerateException
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
/**
* Build sheet
*
* @author zhuangjiaju
*/
public
class
ExcelReaderSheetBuilder
{
private
ExcelReader
excelReader
;
/**
* Sheet
*/
private
ReadSheet
readSheet
;
public
ExcelReaderSheetBuilder
()
{
this
.
readSheet
=
new
ReadSheet
();
}
public
ExcelReaderSheetBuilder
(
ExcelReader
excelReader
)
{
this
.
readSheet
=
new
ReadSheet
();
this
.
excelReader
=
excelReader
;
}
/**
* Starting from 0
*
* @param sheetNo
* @return
*/
public
ExcelReaderSheetBuilder
sheetNo
(
Integer
sheetNo
)
{
readSheet
.
setSheetNo
(
sheetNo
);
return
this
;
}
/**
* sheet name
*
* @param sheetName
* @return
*/
public
ExcelReaderSheetBuilder
sheetName
(
String
sheetName
)
{
readSheet
.
setSheetName
(
sheetName
);
return
this
;
}
/**
* Count the number of added heads when read sheet.
*
* <li>0 - This Sheet has no head ,since the first row are the data
* <li>1 - This Sheet has one row head , this is the default
* <li>2 - This Sheet has two row head ,since the third row is the data
*
* @param headRowNumber
* @return
*/
public
ExcelReaderSheetBuilder
headRowNumber
(
Integer
headRowNumber
)
{
readSheet
.
setHeadRowNumber
(
headRowNumber
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelReaderBuilder#head(List)} and {@link ExcelReaderBuilder#head(Class)}
*
* @param head
* @return
*/
public
ExcelReaderSheetBuilder
head
(
List
<
List
<
String
>>
head
)
{
readSheet
.
setHead
(
head
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelReaderBuilder#head(List)} and {@link ExcelReaderBuilder#head(Class)}
*
* @param clazz
* @return
*/
public
ExcelReaderSheetBuilder
head
(
Class
clazz
)
{
readSheet
.
setClazz
(
clazz
);
return
this
;
}
/**
* Custom type conversions override the default.
*
* @param converter
* @return
*/
public
ExcelReaderSheetBuilder
registerConverter
(
Converter
converter
)
{
if
(
readSheet
.
getCustomConverterList
()
==
null
)
{
readSheet
.
setCustomConverterList
(
new
ArrayList
<
Converter
>());
}
readSheet
.
getCustomConverterList
().
add
(
converter
);
return
this
;
}
/**
* Custom type listener run after default
*
* @param readListener
* @return
*/
public
ExcelReaderSheetBuilder
registerReadListener
(
ReadListener
readListener
)
{
if
(
readSheet
.
getCustomReadListenerList
()
==
null
)
{
readSheet
.
setCustomReadListenerList
(
new
ArrayList
<
ReadListener
>());
}
readSheet
.
getCustomReadListenerList
().
add
(
readListener
);
return
this
;
}
/**
* true if date uses 1904 windowing, or false if using 1900 date windowing.
*
* default is false
*
* @param use1904windowing
* @return
*/
public
ExcelReaderSheetBuilder
use1904windowing
(
Boolean
use1904windowing
)
{
readSheet
.
setUse1904windowing
(
use1904windowing
);
return
this
;
}
/**
* Automatic trim includes sheet name and content
*
* @param autoTrim
* @return
*/
public
ExcelReaderSheetBuilder
autoTrim
(
Boolean
autoTrim
)
{
readSheet
.
setAutoTrim
(
autoTrim
);
return
this
;
}
public
ReadSheet
build
()
{
return
readSheet
;
}
/**
* Sax read
*
* @return
*/
public
ExcelReaderSheetBuilder
doRead
()
{
if
(
excelReader
==
null
)
{
throw
new
ExcelGenerateException
(
"Must use 'EasyExcelFactory.read().sheet()' to call this method"
);
}
excelReader
.
read
(
build
());
return
new
ExcelReaderSheetBuilder
(
excelReader
);
}
/**
* Sax read
*
* @return
*/
public
void
finish
()
{
if
(
excelReader
==
null
)
{
throw
new
ExcelGenerateException
(
"Must use 'EasyExcelFactory.read().sheet()' to call this method"
);
}
excelReader
.
finish
();
}
/**
* Synchronous reads return results
*
* @return
*/
public
List
<
Object
>
doReadSync
()
{
if
(
excelReader
==
null
)
{
throw
new
ExcelGenerateException
(
"Must use 'EasyExcelFactory.read().sheet()' to call this method"
);
}
SyncReadListener
syncReadListener
=
new
SyncReadListener
();
registerReadListener
(
syncReadListener
);
excelReader
.
read
(
build
());
return
syncReadListener
.
getList
();
}
}
src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java
浏览文件 @
5ac5c0e8
...
...
@@ -10,13 +10,13 @@ import com.alibaba.excel.converters.Converter;
import
com.alibaba.excel.converters.ConverterKey
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.enums.HeadKindEnum
;
import
com.alibaba.excel.event.A
nalysisEvent
Listener
;
import
com.alibaba.excel.event.A
bstractIgnoreExceptionRead
Listener
;
import
com.alibaba.excel.exception.ExcelDataConvertException
;
import
com.alibaba.excel.metadata.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.read.metadata.read.ReadConfiguration
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
import
com.alibaba.excel.read.metadata.holder.ReadHolder
;
import
com.alibaba.excel.read.metadata.property.ExcelReadHeadProperty
;
import
net.sf.cglib.beans.BeanMap
;
...
...
@@ -25,40 +25,38 @@ import net.sf.cglib.beans.BeanMap;
*
* @author jipengfei
*/
public
class
ModelBuildEventListener
extends
AnalysisEventListener
<
List
<
CellData
>>
{
@Override
public
void
onException
(
Exception
exception
,
AnalysisContext
context
)
throws
Exception
{}
public
class
ModelBuildEventListener
extends
AbstractIgnoreExceptionReadListener
<
List
<
CellData
>>
{
@Override
public
void
invoke
(
List
<
CellData
>
data
,
AnalysisContext
context
)
{
Read
Configuration
readConfiguration
=
context
.
currentConfiguration
();
if
(
HeadKindEnum
.
CLASS
.
equals
(
c
ontext
.
currentSheetHolder
().
getExcel
HeadProperty
().
getHeadKind
()))
{
context
.
setCurrentRowAnalysisResult
(
buildUserModel
(
data
,
readConfiguration
));
Read
Holder
currentReadHolder
=
context
.
currentReadHolder
();
if
(
HeadKindEnum
.
CLASS
.
equals
(
c
urrentReadHolder
.
excelRead
HeadProperty
().
getHeadKind
()))
{
context
.
readRowHolder
().
setCurrentRowAnalysisResult
(
buildUserModel
(
data
,
currentReadHolder
));
return
;
}
context
.
setCurrentRowAnalysisResult
(
buildStringList
(
data
,
readConfiguration
));
context
.
readRowHolder
().
setCurrentRowAnalysisResult
(
buildStringList
(
data
,
currentReadHolder
));
}
private
Object
buildStringList
(
List
<
CellData
>
data
,
Read
Configuration
readConfiguration
)
{
private
Object
buildStringList
(
List
<
CellData
>
data
,
Read
Holder
currentReadHolder
)
{
List
<
String
>
list
=
new
ArrayList
<
String
>();
for
(
CellData
cellData
:
data
)
{
list
.
add
((
String
)
convertValue
(
cellData
,
String
.
class
,
null
,
readConfiguration
.
readC
onverterMap
()));
list
.
add
((
String
)
convertValue
(
cellData
,
String
.
class
,
null
,
currentReadHolder
.
c
onverterMap
()));
}
return
list
;
}
private
Object
buildUserModel
(
List
<
CellData
>
data
,
Read
Configuration
readConfiguration
)
{
Excel
HeadProperty
excelHeadProperty
=
readConfiguration
.
excel
HeadProperty
();
private
Object
buildUserModel
(
List
<
CellData
>
data
,
Read
Holder
currentReadHolder
)
{
Excel
ReadHeadProperty
excelReadHeadProperty
=
currentReadHolder
.
excelRead
HeadProperty
();
Object
resultModel
;
try
{
resultModel
=
excelHeadProperty
.
getHeadClazz
().
newInstance
();
resultModel
=
excel
Read
HeadProperty
.
getHeadClazz
().
newInstance
();
}
catch
(
Exception
e
)
{
throw
new
ExcelDataConvertException
(
"Can not instance class: "
+
excelHeadProperty
.
getHeadClazz
().
getName
(),
e
);
throw
new
ExcelDataConvertException
(
"Can not instance class: "
+
excelReadHeadProperty
.
getHeadClazz
().
getName
(),
e
);
}
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
Map
<
Integer
,
Head
>
headMap
=
excelHeadProperty
.
getHeadMap
();
Map
<
Integer
,
ExcelContentProperty
>
contentPropertyMap
=
excelHeadProperty
.
getContentPropertyMap
();
Map
<
Integer
,
Head
>
headMap
=
excel
Read
HeadProperty
.
getHeadMap
();
Map
<
Integer
,
ExcelContentProperty
>
contentPropertyMap
=
excel
Read
HeadProperty
.
getContentPropertyMap
();
for
(
Map
.
Entry
<
Integer
,
Head
>
entry
:
headMap
.
entrySet
())
{
Integer
index
=
entry
.
getKey
();
if
(
index
>=
data
.
size
())
{
...
...
@@ -70,7 +68,7 @@ public class ModelBuildEventListener extends AnalysisEventListener<List<CellData
}
ExcelContentProperty
excelContentProperty
=
contentPropertyMap
.
get
(
index
);
Object
value
=
convertValue
(
cellData
,
excelContentProperty
.
getField
().
getClass
(),
excelContentProperty
,
readConfiguration
.
readC
onverterMap
());
currentReadHolder
.
c
onverterMap
());
if
(
value
!=
null
)
{
map
.
put
(
excelContentProperty
.
getField
().
getName
(),
value
);
}
...
...
src/main/java/com/alibaba/excel/read/listener/ReadListener.java
浏览文件 @
5ac5c0e8
...
...
@@ -11,7 +11,7 @@ import com.alibaba.excel.event.Listener;
public
interface
ReadListener
<
T
>
extends
Listener
{
/**
* All listeners receive this method when any one Listener does an error report. If an exception is thrown here, the
*
*
entire read will terminate.
* entire read will terminate.
*
* @param exception
* @param context
...
...
src/main/java/com/alibaba/excel/read/metadata/ReadSheet.java
浏览文件 @
5ac5c0e8
...
...
@@ -15,6 +15,17 @@ public class ReadSheet extends ReadBasicParameter {
*/
private
String
sheetName
;
public
ReadSheet
()
{}
public
ReadSheet
(
Integer
sheetNo
)
{
this
.
sheetNo
=
sheetNo
;
}
public
ReadSheet
(
Integer
sheetNo
,
String
sheetName
)
{
this
.
sheetNo
=
sheetNo
;
this
.
sheetName
=
sheetName
;
}
public
Integer
getSheetNo
()
{
return
sheetNo
;
}
...
...
src/main/java/com/alibaba/excel/read/metadata/ReadWorkbook.java
浏览文件 @
5ac5c0e8
...
...
@@ -3,6 +3,9 @@ package com.alibaba.excel.read.metadata;
import
java.io.File
;
import
java.io.InputStream
;
import
com.alibaba.excel.cache.ReadCache
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
/**
...
...
@@ -27,14 +30,25 @@ public class ReadWorkbook extends ReadBasicParameter {
* If 'inputStream' and 'file' all not empty,file first
*/
private
File
file
;
/**
* Mandatory use 'inputStream' .Default is false.
* <li>if false,Will transfer 'inputStream' to temporary files to improve efficiency
*/
private
Boolean
mandatoryUseInputStream
;
/**
* Default true
*/
private
Boolean
autoCloseStream
;
/**
* Mandatory use 'inputStream' .Default is false
* This object can be read in the Listener {@link AnalysisEventListener#invoke(Object, AnalysisContext)}
* {@link AnalysisContext#getCustom()}
*
*/
private
Boolean
mandatoryUseInputStream
;
private
Object
customObject
;
/**
* A cache that stores temp data to save memory.Default use {@link com.alibaba.excel.cache.Ehcache}
*/
private
ReadCache
readCache
;
/**
* The default is all excel objects.Default is true.
* <li>if true , you can use {@link com.alibaba.excel.annotation.ExcelIgnore} ignore a field.
...
...
@@ -77,6 +91,14 @@ public class ReadWorkbook extends ReadBasicParameter {
this
.
autoCloseStream
=
autoCloseStream
;
}
public
Object
getCustomObject
()
{
return
customObject
;
}
public
void
setCustomObject
(
Object
customObject
)
{
this
.
customObject
=
customObject
;
}
public
Boolean
getMandatoryUseInputStream
()
{
return
mandatoryUseInputStream
;
}
...
...
@@ -85,6 +107,14 @@ public class ReadWorkbook extends ReadBasicParameter {
this
.
mandatoryUseInputStream
=
mandatoryUseInputStream
;
}
public
ReadCache
getReadCache
()
{
return
readCache
;
}
public
void
setReadCache
(
ReadCache
readCache
)
{
this
.
readCache
=
readCache
;
}
public
Boolean
getConvertAllFiled
()
{
return
convertAllFiled
;
}
...
...
src/main/java/com/alibaba/excel/read/metadata/holder/Abstract
WriteConfiguration
.java
→
src/main/java/com/alibaba/excel/read/metadata/holder/Abstract
ReadHolder
.java
浏览文件 @
5ac5c0e8
...
...
@@ -9,6 +9,7 @@ import com.alibaba.excel.context.AnalysisContext;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.converters.ConverterKey
;
import
com.alibaba.excel.enums.HeadKindEnum
;
import
com.alibaba.excel.enums.HolderEnum
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.exception.ExcelDataConvertException
;
...
...
@@ -16,6 +17,7 @@ import com.alibaba.excel.metadata.AbstractHolder;
import
com.alibaba.excel.metadata.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.read.listener.ModelBuildEventListener
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.listener.ReadListenerRegistryCenter
;
import
com.alibaba.excel.read.listener.event.AnalysisFinishEvent
;
...
...
@@ -77,6 +79,10 @@ public abstract class AbstractReadHolder extends AbstractHolder implements ReadH
}
else
{
this
.
readListenerList
=
new
ArrayList
<
ReadListener
>(
parentAbstractReadHolder
.
getReadListenerList
());
}
if
(
HolderEnum
.
WORKBOOK
.
equals
(
holderType
())
&&
HeadKindEnum
.
CLASS
.
equals
(
excelReadHeadProperty
.
getHeadKind
()))
{
readListenerList
.
add
(
new
ModelBuildEventListener
());
}
if
(
readBasicParameter
.
getCustomReadListenerList
()
!=
null
&&
!
readBasicParameter
.
getCustomReadListenerList
().
isEmpty
())
{
this
.
readListenerList
.
addAll
(
readBasicParameter
.
getCustomReadListenerList
());
...
...
@@ -103,11 +109,12 @@ public abstract class AbstractReadHolder extends AbstractHolder implements ReadH
@Override
public
void
notifyEndOneRow
(
AnalysisFinishEvent
event
,
AnalysisContext
analysisContext
)
{
List
<
CellData
>
cellDataList
=
(
List
<
CellData
>)
event
.
getAnalysisResult
();
if
(
analysisContext
.
currentRowHolder
().
getRow
().
getRowNum
()
>
analysisContext
.
currentSheetHolder
()
.
getReadHeadRowNumber
())
{
ReadRowHolder
readRowHolder
=
analysisContext
.
readRowHolder
();
if
(
readRowHolder
.
getRowIndex
()
>=
analysisContext
.
readSheetHolder
().
getHeadRowNumber
())
{
for
(
ReadListener
readListener
:
readListenerList
)
{
try
{
readListener
.
invoke
(
analysisContext
.
c
urrentRowAnalysisResult
(),
analysisContext
);
readListener
.
invoke
(
readRowHolder
.
getC
urrentRowAnalysisResult
(),
analysisContext
);
}
catch
(
Exception
e
)
{
for
(
ReadListener
readListenerException
:
readListenerList
)
{
try
{
...
...
@@ -118,9 +125,10 @@ public abstract class AbstractReadHolder extends AbstractHolder implements ReadH
}
}
}
return
;
}
// Now is header
if
(
analysisContext
.
currentRowNum
().
equals
(
analysisContext
.
currentSheetHolder
().
getReadHeadRowNumber
()
))
{
if
(
analysisContext
.
readSheetHolder
().
getHeadRowNumber
().
equals
(
readRowHolder
.
getRowIndex
()
+
1
))
{
buildHead
(
analysisContext
,
cellDataList
);
}
}
...
...
@@ -133,11 +141,11 @@ public abstract class AbstractReadHolder extends AbstractHolder implements ReadH
}
private
void
buildHead
(
AnalysisContext
analysisContext
,
List
<
CellData
>
cellDataList
)
{
if
(!
HeadKindEnum
.
CLASS
.
equals
(
analysisContext
.
current
Configuration
().
excelReadHeadProperty
().
getHeadKind
()))
{
if
(!
HeadKindEnum
.
CLASS
.
equals
(
analysisContext
.
current
ReadHolder
().
excelReadHeadProperty
().
getHeadKind
()))
{
return
;
}
List
<
String
>
dataList
=
(
List
<
String
>)
buildStringList
(
cellDataList
,
analysisContext
.
current
Configuration
());
ExcelReadHeadProperty
excelHeadPropertyData
=
analysisContext
.
currentConfiguration
().
excelReadHeadProperty
();
List
<
String
>
dataList
=
(
List
<
String
>)
buildStringList
(
cellDataList
,
analysisContext
.
current
ReadHolder
());
ExcelReadHeadProperty
excelHeadPropertyData
=
analysisContext
.
readSheetHolder
().
excelReadHeadProperty
();
Map
<
Integer
,
Head
>
headMapData
=
excelHeadPropertyData
.
getHeadMap
();
Map
<
Integer
,
ExcelContentProperty
>
contentPropertyMapData
=
excelHeadPropertyData
.
getContentPropertyMap
();
Map
<
Integer
,
Head
>
tmpHeadMap
=
new
HashMap
<
Integer
,
Head
>(
headMapData
.
size
()
*
4
/
3
+
1
);
...
...
@@ -156,7 +164,7 @@ public abstract class AbstractReadHolder extends AbstractHolder implements ReadH
if
(
StringUtils
.
isEmpty
(
headString
))
{
continue
;
}
if
(
analysisContext
.
current
SheetHolder
().
getAutoTrim
())
{
if
(
analysisContext
.
current
ReadHolder
().
globalConfiguration
().
getAutoTrim
())
{
headString
=
headString
.
trim
();
}
if
(
headName
.
equals
(
headString
))
{
...
...
@@ -171,12 +179,11 @@ public abstract class AbstractReadHolder extends AbstractHolder implements ReadH
excelHeadPropertyData
.
setContentPropertyMap
(
tmpContentPropertyMap
);
}
private
Object
buildStringList
(
List
<
CellData
>
data
,
com
.
alibaba
.
excel
.
read
.
metadata
.
read
.
ReadConfiguration
readConfiguration
)
{
private
Object
buildStringList
(
List
<
CellData
>
data
,
ReadHolder
readHolder
)
{
List
<
String
>
list
=
new
ArrayList
<
String
>();
for
(
CellData
cellData
:
data
)
{
Converter
converter
=
readConfiguration
.
readConverterMap
()
.
get
(
ConverterKey
.
buildConverterKey
(
String
.
class
,
cellData
.
getType
()));
Converter
converter
=
readHolder
.
converterMap
()
.
get
(
ConverterKey
.
buildConverterKey
(
String
.
class
,
cellData
.
getType
()));
if
(
converter
==
null
)
{
throw
new
ExcelDataConvertException
(
"Converter not found, convert "
+
cellData
.
getType
()
+
" to String"
);
...
...
src/main/java/com/alibaba/excel/read/metadata/holder/ReadRowHolder.java
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.read.metadata.holder
;
import
org.apache.poi.ss.usermodel.Row
;
import
com.alibaba.excel.enums.HolderEnum
;
import
com.alibaba.excel.metadata.GlobalConfiguration
;
import
com.alibaba.excel.metadata.Holder
;
...
...
@@ -12,11 +10,6 @@ import com.alibaba.excel.metadata.Holder;
* @author zhuangjiaju
*/
public
class
ReadRowHolder
implements
Holder
{
/***
* poi row
*/
private
Row
row
;
/**
* Some global variables
*/
...
...
@@ -26,17 +19,9 @@ public class ReadRowHolder implements Holder {
*/
private
Object
currentRowAnalysisResult
;
/**
*
Data starting from the first row after the head is removed.Start form 1
*
Returns row index of a row in the sheet that contains this cell.Start form 0.
*/
private
int
relativeRowIndex
;
public
Row
getRow
()
{
return
row
;
}
public
void
setRow
(
Row
row
)
{
this
.
row
=
row
;
}
private
int
rowIndex
;
public
GlobalConfiguration
getGlobalConfiguration
()
{
return
globalConfiguration
;
...
...
@@ -54,12 +39,12 @@ public class ReadRowHolder implements Holder {
this
.
currentRowAnalysisResult
=
currentRowAnalysisResult
;
}
public
int
getR
elativeR
owIndex
()
{
return
r
elativeR
owIndex
;
public
int
getRowIndex
()
{
return
rowIndex
;
}
public
void
setR
elativeRowIndex
(
int
relativeR
owIndex
)
{
this
.
r
elativeRowIndex
=
relativeR
owIndex
;
public
void
setR
owIndex
(
int
r
owIndex
)
{
this
.
r
owIndex
=
r
owIndex
;
}
@Override
...
...
src/main/java/com/alibaba/excel/read/metadata/holder/ReadSheetHolder.java
0 → 100644
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.read.metadata.holder
;
import
com.alibaba.excel.enums.HolderEnum
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
/**
* sheet holder
*
* @author zhuangjiaju
*/
public
class
ReadSheetHolder
extends
AbstractReadHolder
{
/**
* current param
*/
private
ReadSheet
readSheet
;
/***
* parent
*/
private
ReadWorkbookHolder
parentReadWorkbookHolder
;
/***
* sheetNo
*/
private
Integer
sheetNo
;
/***
* sheetName
*/
private
String
sheetName
;
/**
* get total row , Data may be inaccurate
*/
@Deprecated
private
Integer
total
;
public
ReadSheetHolder
(
ReadSheet
readSheet
,
ReadWorkbookHolder
readWorkbookHolder
)
{
super
(
readSheet
,
null
,
readWorkbookHolder
.
getReadWorkbook
().
getConvertAllFiled
());
this
.
readSheet
=
readSheet
;
this
.
parentReadWorkbookHolder
=
readWorkbookHolder
;
this
.
sheetNo
=
readSheet
.
getSheetNo
();
}
public
ReadSheet
getReadSheet
()
{
return
readSheet
;
}
public
void
setReadSheet
(
ReadSheet
readSheet
)
{
this
.
readSheet
=
readSheet
;
}
public
ReadWorkbookHolder
getParentReadWorkbookHolder
()
{
return
parentReadWorkbookHolder
;
}
public
void
setParentReadWorkbookHolder
(
ReadWorkbookHolder
parentReadWorkbookHolder
)
{
this
.
parentReadWorkbookHolder
=
parentReadWorkbookHolder
;
}
public
Integer
getSheetNo
()
{
return
sheetNo
;
}
public
void
setSheetNo
(
Integer
sheetNo
)
{
this
.
sheetNo
=
sheetNo
;
}
public
String
getSheetName
()
{
return
sheetName
;
}
public
void
setSheetName
(
String
sheetName
)
{
this
.
sheetName
=
sheetName
;
}
public
Integer
getTotal
()
{
return
total
;
}
public
void
setTotal
(
Integer
total
)
{
this
.
total
=
total
;
}
@Override
public
HolderEnum
holderType
()
{
return
HolderEnum
.
SHEET
;
}
}
src/main/java/com/alibaba/excel/read/metadata/holder/WorkbookHolder.java
→
src/main/java/com/alibaba/excel/read/metadata/holder/
Read
WorkbookHolder.java
浏览文件 @
5ac5c0e8
...
...
@@ -2,30 +2,14 @@ package com.alibaba.excel.read.metadata.holder;
import
java.io.File
;
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.Workbook
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.cache.ReadCache
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.converters.ConverterKey
;
import
com.alibaba.excel.converters.DefaultConverterLoader
;
import
com.alibaba.excel.enums.HolderEnum
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.read.listener.ModelBuildEventListener
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.metadata.ReadWorkbook
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.handler.DefaultWriteHandlerLoader
;
import
com.alibaba.excel.write.handler.WriteHandler
;
/**
* Workbook holder
...
...
@@ -33,12 +17,6 @@ import com.alibaba.excel.write.handler.WriteHandler;
* @author zhuangjiaju
*/
public
class
ReadWorkbookHolder
extends
AbstractReadHolder
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
ReadWorkbookHolder
.
class
);
/***
* poi Workbook
*/
private
Workbook
workbook
;
/**
* current param
*/
...
...
@@ -55,6 +33,11 @@ public class ReadWorkbookHolder extends AbstractReadHolder {
* If 'inputStream' and 'file' all not empty,file first
*/
private
File
file
;
/**
* Mandatory use 'inputStream' .Default is false.
* <li>if false,Will transfer 'inputStream' to temporary files to improve efficiency
*/
private
Boolean
mandatoryUseInputStream
;
/**
* Default true
*/
...
...
@@ -68,21 +51,16 @@ public class ReadWorkbookHolder extends AbstractReadHolder {
* {@link AnalysisContext#getCustom()}
*
*/
private
Object
readC
ustomObject
;
private
Object
c
ustomObject
;
/**
* A cache that stores temp data to save memory.Default use {@link com.alibaba.excel.cache.Ehcache}
*/
private
ReadCache
readCache
;
/**
* Mmandatory use 'inputStream'
*/
private
Boolean
mandatoryUseInputStream
;
/**
* Temporary files when reading excel
*/
private
File
readT
empFile
;
private
File
t
empFile
;
/**
* The default is all excel objects.if true , you can use {@link com.alibaba.excel.annotation.ExcelIgnore} ignore a
...
...
@@ -93,131 +71,39 @@ public class ReadWorkbookHolder extends AbstractReadHolder {
@Deprecated
private
Boolean
convertAllFiled
;
/**
* Write handler
*
* @deprecated please use {@link WriteHandler}
*/
@Deprecated
private
com
.
alibaba
.
excel
.
event
.
WriteHandler
writeHandler
;
public
static
WorkbookHolder
buildWriteWorkbookHolder
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Workbook
workbook
)
{
WorkbookHolder
workbookHolder
=
buildBaseWorkbookHolder
(
workbook
);
workbookHolder
.
setNewInitialization
(
Boolean
.
TRUE
);
if
(
workbook
.
getNeedHead
()
==
null
)
{
workbookHolder
.
setNeedHead
(
Boolean
.
TRUE
);
}
else
{
workbookHolder
.
setNeedHead
(
workbook
.
getNeedHead
());
}
if
(
workbook
.
getWriteRelativeHeadRowIndex
()
==
null
)
{
workbookHolder
.
setWriteRelativeHeadRowIndex
(
0
);
}
else
{
workbookHolder
.
setWriteRelativeHeadRowIndex
(
workbook
.
getWriteRelativeHeadRowIndex
());
}
List
<
WriteHandler
>
handlerList
=
new
ArrayList
<
WriteHandler
>();
if
(
workbook
.
getCustomWriteHandlerList
()
!=
null
&&
!
workbook
.
getCustomWriteHandlerList
().
isEmpty
())
{
handlerList
.
addAll
(
workbook
.
getCustomWriteHandlerList
());
}
handlerList
.
addAll
(
DefaultWriteHandlerLoader
.
loadDefaultHandler
());
workbookHolder
.
setWriteHandlerMap
(
workbookHolder
.
sortAndClearUpHandler
(
handlerList
,
null
));
Map
<
Class
,
Converter
>
converterMap
=
DefaultConverterLoader
.
loadDefaultWriteConverter
();
if
(
workbook
.
getCustomConverterList
()
!=
null
&&
!
workbook
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
workbook
.
getCustomConverterList
())
{
converterMap
.
put
(
converter
.
getClass
(),
converter
);
}
}
workbookHolder
.
setWriteConverterMap
(
converterMap
);
workbookHolder
.
setHasBeenInitializedSheet
(
new
HashMap
<
Integer
,
SheetHolder
>());
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Wookbook writeHandlerMap:{}"
,
workbookHolder
.
getWriteHandlerMap
());
}
return
workbookHolder
;
}
public
static
WorkbookHolder
buildReadWorkbookHolder
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Workbook
workbook
)
{
WorkbookHolder
workbookHolder
=
buildBaseWorkbookHolder
(
workbook
);
if
(
workbook
.
getFile
()
==
null
&&
workbookHolder
.
getInputStream
()
==
null
)
{
throw
new
ExcelAnalysisException
(
"Read excel 'file' and 'inputStream' cannot be empty at the same time!"
);
}
workbookHolder
.
setReadCustomObject
(
workbook
.
getReadCustomObject
());
workbookHolder
.
setReadHeadRowNumber
(
workbook
.
getReadHeadRowNumber
());
workbookHolder
.
setReadCache
(
workbook
.
getReadCache
());
Map
<
ConverterKey
,
Converter
>
converterMap
=
DefaultConverterLoader
.
loadDefaultReadConverter
();
if
(
workbook
.
getCustomConverterList
()
!=
null
&&
!
workbook
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
workbook
.
getCustomConverterList
())
{
converterMap
.
put
(
ConverterKey
.
buildConverterKey
(
converter
),
converter
);
}
}
workbookHolder
.
setReadConverterMap
(
converterMap
);
List
<
ReadListener
>
readListenerList
=
new
ArrayList
<
ReadListener
>();
readListenerList
.
add
(
new
ModelBuildEventListener
());
if
(
workbook
.
getCustomReadListenerList
()
!=
null
&&
!
workbook
.
getCustomReadListenerList
().
isEmpty
())
{
readListenerList
.
addAll
(
workbook
.
getCustomReadListenerList
());
public
ReadWorkbookHolder
(
ReadWorkbook
readWorkbook
)
{
super
(
readWorkbook
,
null
,
readWorkbook
.
getConvertAllFiled
());
this
.
readWorkbook
=
readWorkbook
;
if
(
file
==
null
&&
inputStream
==
null
)
{
throw
new
ExcelAnalysisException
(
"File and inputStream must be a non-null."
);
}
workbookHolder
.
setReadListenerList
(
readListenerList
);
return
workbookHolder
;
}
private
static
WorkbookHolder
buildBaseWorkbookHolder
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Workbook
workbook
)
{
WorkbookHolder
workbookHolder
=
new
WorkbookHolder
();
workbookHolder
.
setUse1904windowing
(
workbook
.
getUse1904windowing
());
workbookHolder
.
setWorkbookParam
(
workbook
);
workbookHolder
.
setInputStream
(
workbook
.
getInputStream
());
workbookHolder
.
setFile
(
workbook
.
getFile
());
workbookHolder
.
setExcelType
(
workbook
.
getExcelType
());
workbookHolder
.
setHead
(
workbook
.
getHead
());
workbookHolder
.
setClazz
(
workbook
.
getClazz
());
if
(
workbook
.
getConvertAllFiled
()
==
null
)
{
workbookHolder
.
setConvertAllFiled
(
Boolean
.
TRUE
);
this
.
inputStream
=
readWorkbook
.
getInputStream
();
this
.
file
=
readWorkbook
.
getFile
();
if
(
readWorkbook
.
getMandatoryUseInputStream
()
==
null
)
{
this
.
mandatoryUseInputStream
=
Boolean
.
FALSE
;
}
else
{
workbookHolder
.
setConvertAllFiled
(
workbook
.
getConvertAllFiled
()
);
this
.
mandatoryUseInputStream
=
readWorkbook
.
getMandatoryUseInputStream
(
);
}
if
(
w
orkbook
.
getAutoCloseStream
()
==
null
)
{
workbookHolder
.
setAutoCloseStream
(
Boolean
.
TRUE
)
;
if
(
readW
orkbook
.
getAutoCloseStream
()
==
null
)
{
this
.
autoCloseStream
=
Boolean
.
TRUE
;
}
else
{
workbookHolder
.
setAutoCloseStream
(
workbook
.
getAutoCloseStream
()
);
this
.
autoCloseStream
=
readWorkbook
.
getAutoCloseStream
(
);
}
if
(
workbook
.
getAutoTrim
()
==
null
)
{
workbookHolder
.
setAutoTrim
(
Boolean
.
TRUE
);
if
(
readWorkbook
.
getExcelType
()
==
null
)
{
this
.
excelType
=
ExcelTypeEnum
.
valueOf
(
file
,
inputStream
);
}
else
{
workbookHolder
.
setAutoTrim
(
workbook
.
getNeedHead
()
);
this
.
excelType
=
readWorkbook
.
getExcelType
(
);
}
return
workbookHolder
;
this
.
customObject
=
readWorkbook
.
getCustomObject
();
this
.
readCache
=
readWorkbook
.
getReadCache
();
}
public
Workbook
get
Workbook
()
{
return
w
orkbook
;
public
ReadWorkbook
getRead
Workbook
()
{
return
readW
orkbook
;
}
public
void
setWorkbook
(
Workbook
workbook
)
{
this
.
workbook
=
workbook
;
}
public
Map
<
Integer
,
SheetHolder
>
getHasBeenInitializedSheet
()
{
return
hasBeenInitializedSheet
;
}
public
void
setHasBeenInitializedSheet
(
Map
<
Integer
,
SheetHolder
>
hasBeenInitializedSheet
)
{
this
.
hasBeenInitializedSheet
=
hasBeenInitializedSheet
;
}
public
com
.
alibaba
.
excel
.
write
.
metadata
.
Workbook
getWorkbookParam
()
{
return
workbookParam
;
}
public
void
setWorkbookParam
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Workbook
workbookParam
)
{
this
.
workbookParam
=
workbookParam
;
}
public
OutputStream
getOutputStream
()
{
return
outputStream
;
}
public
void
setOutputStream
(
OutputStream
outputStream
)
{
this
.
outputStream
=
outputStream
;
public
void
setReadWorkbook
(
ReadWorkbook
readWorkbook
)
{
this
.
readWorkbook
=
readWorkbook
;
}
public
InputStream
getInputStream
()
{
...
...
@@ -228,12 +114,12 @@ public class ReadWorkbookHolder extends AbstractReadHolder {
this
.
inputStream
=
inputStream
;
}
public
com
.
alibaba
.
excel
.
event
.
WriteHandler
getWriteHandler
()
{
return
writeHandler
;
public
File
getFile
()
{
return
file
;
}
public
void
set
WriteHandler
(
com
.
alibaba
.
excel
.
event
.
WriteHandler
writeHandler
)
{
this
.
writeHandler
=
writeHandler
;
public
void
set
File
(
File
file
)
{
this
.
file
=
file
;
}
public
Boolean
getAutoCloseStream
()
{
...
...
@@ -244,22 +130,6 @@ public class ReadWorkbookHolder extends AbstractReadHolder {
this
.
autoCloseStream
=
autoCloseStream
;
}
public
Boolean
getConvertAllFiled
()
{
return
convertAllFiled
;
}
public
void
setConvertAllFiled
(
Boolean
convertAllFiled
)
{
this
.
convertAllFiled
=
convertAllFiled
;
}
public
File
getFile
()
{
return
file
;
}
public
void
setFile
(
File
file
)
{
this
.
file
=
file
;
}
public
ExcelTypeEnum
getExcelType
()
{
return
excelType
;
}
...
...
@@ -268,12 +138,12 @@ public class ReadWorkbookHolder extends AbstractReadHolder {
this
.
excelType
=
excelType
;
}
public
Object
get
Read
CustomObject
()
{
return
readC
ustomObject
;
public
Object
getCustomObject
()
{
return
c
ustomObject
;
}
public
void
set
ReadCustomObject
(
Object
readC
ustomObject
)
{
this
.
readCustomObject
=
readC
ustomObject
;
public
void
set
CustomObject
(
Object
c
ustomObject
)
{
this
.
customObject
=
c
ustomObject
;
}
public
ReadCache
getReadCache
()
{
...
...
@@ -284,14 +154,6 @@ public class ReadWorkbookHolder extends AbstractReadHolder {
this
.
readCache
=
readCache
;
}
public
Boolean
getUse1904windowing
()
{
return
use1904windowing
;
}
public
void
setUse1904windowing
(
Boolean
use1904windowing
)
{
this
.
use1904windowing
=
use1904windowing
;
}
public
Boolean
getMandatoryUseInputStream
()
{
return
mandatoryUseInputStream
;
}
...
...
@@ -300,12 +162,20 @@ public class ReadWorkbookHolder extends AbstractReadHolder {
this
.
mandatoryUseInputStream
=
mandatoryUseInputStream
;
}
public
File
getReadTempFile
()
{
return
readTempFile
;
public
File
getTempFile
()
{
return
tempFile
;
}
public
void
setTempFile
(
File
tempFile
)
{
this
.
tempFile
=
tempFile
;
}
public
void
setReadTempFile
(
File
readTempFile
)
{
this
.
readTempFile
=
readTempFile
;
public
Boolean
getConvertAllFiled
()
{
return
convertAllFiled
;
}
public
void
setConvertAllFiled
(
Boolean
convertAllFiled
)
{
this
.
convertAllFiled
=
convertAllFiled
;
}
@Override
...
...
src/main/java/com/alibaba/excel/read/metadata/holder/SheetHolder.java
已删除
100644 → 0
浏览文件 @
e2bb1999
package
com.alibaba.excel.read.metadata.holder
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.converters.ConverterKey
;
import
com.alibaba.excel.metadata.CellStyle
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.TableStyle
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.write.handler.WriteHandler
;
import
com.alibaba.excel.write.style.RowCellStyleStrategy
;
import
com.alibaba.excel.write.style.column.AbstractHeadColumnWidthStyleStrategy
;
/**
* sheet holder
*
* @author zhuangjiaju
*/
public
class
ReadSheetHolder
extends
AbstractReadHolder
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
SheetHolder
.
class
);
/***
* poi sheet
*/
private
Sheet
sheet
;
/***
* sheetNo
*/
private
Integer
sheetNo
;
/***
* sheetName
*/
private
String
sheetName
;
/**
* get total row , Data may be inaccurate
*/
@Deprecated
private
Integer
total
;
/***
* poi sheet
*/
private
WorkbookHolder
parentWorkBook
;
/***
* has been initialized table
*/
private
Map
<
Integer
,
TableHolder
>
hasBeenInitializedTable
;
/**
* current param
*/
private
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
sheetParam
;
public
static
SheetHolder
buildWriteWorkSheetHolder
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
sheet
,
WorkbookHolder
workbookHolder
)
{
SheetHolder
sheetHolder
=
buildBaseSheetHolder
(
sheet
,
workbookHolder
);
sheetHolder
.
setNewInitialization
(
Boolean
.
TRUE
);
if
(
sheet
.
getNeedHead
()
==
null
)
{
sheetHolder
.
setNeedHead
(
workbookHolder
.
needHead
());
}
else
{
sheetHolder
.
setNeedHead
(
sheet
.
getNeedHead
());
}
if
(
sheet
.
getWriteRelativeHeadRowIndex
()
==
null
)
{
sheetHolder
.
setWriteRelativeHeadRowIndex
(
workbookHolder
.
writeRelativeHeadRowIndex
());
}
else
{
sheetHolder
.
setWriteRelativeHeadRowIndex
(
sheet
.
getWriteRelativeHeadRowIndex
());
}
// Compatible with old code
compatibleOldCode
(
sheet
);
List
<
WriteHandler
>
handlerList
=
new
ArrayList
<
WriteHandler
>();
if
(
sheet
.
getCustomWriteHandlerList
()
!=
null
&&
!
sheet
.
getCustomWriteHandlerList
().
isEmpty
())
{
handlerList
.
addAll
(
sheet
.
getCustomWriteHandlerList
());
}
// Initialization Annotation
sheetHolder
.
initAnnotationConfig
(
handlerList
);
sheetHolder
.
setWriteHandlerMap
(
sheetHolder
.
sortAndClearUpHandler
(
handlerList
,
workbookHolder
.
getWriteHandlerMap
()));
Map
<
Class
,
Converter
>
converterMap
=
new
HashMap
<
Class
,
Converter
>(
workbookHolder
.
getWriteConverterMap
());
if
(
sheet
.
getCustomConverterList
()
!=
null
&&
!
sheet
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
sheet
.
getCustomConverterList
())
{
converterMap
.
put
(
converter
.
getClass
(),
converter
);
}
}
sheetHolder
.
setWriteConverterMap
(
converterMap
);
sheetHolder
.
setHasBeenInitializedTable
(
new
HashMap
<
Integer
,
TableHolder
>());
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Sheet writeHandlerMap:{}"
,
sheetHolder
.
getWriteHandlerMap
());
}
return
sheetHolder
;
}
public
static
SheetHolder
buildReadWorkSheetHolder
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
sheet
,
WorkbookHolder
workbookHolder
)
{
SheetHolder
sheetHolder
=
buildBaseSheetHolder
(
sheet
,
workbookHolder
);
if
(
sheet
.
getReadHeadRowNumber
()
==
null
)
{
if
(
workbookHolder
.
getReadHeadRowNumber
()
==
null
)
{
sheetHolder
.
setReadHeadRowNumber
(
sheetHolder
.
getExcelHeadProperty
().
getHeadRowNumber
());
}
else
{
sheetHolder
.
setReadHeadRowNumber
(
workbookHolder
.
getReadHeadRowNumber
());
}
}
else
{
sheetHolder
.
setReadHeadRowNumber
(
sheet
.
getReadHeadRowNumber
());
}
Map
<
ConverterKey
,
Converter
>
converterMap
=
new
HashMap
<
ConverterKey
,
Converter
>(
workbookHolder
.
getReadConverterMap
());
if
(
sheet
.
getCustomConverterList
()
!=
null
&&
!
sheet
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
sheet
.
getCustomConverterList
())
{
converterMap
.
put
(
ConverterKey
.
buildConverterKey
(
converter
),
converter
);
}
}
sheetHolder
.
setReadConverterMap
(
converterMap
);
List
<
ReadListener
>
readListenerList
=
new
ArrayList
<
ReadListener
>();
if
(
sheet
.
getCustomReadListenerList
()
!=
null
&&
!
sheet
.
getCustomReadListenerList
().
isEmpty
())
{
readListenerList
.
addAll
(
sheet
.
getCustomReadListenerList
());
}
sheetHolder
.
setReadListenerList
(
readListenerList
);
return
sheetHolder
;
}
private
static
SheetHolder
buildBaseSheetHolder
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
sheet
,
WorkbookHolder
workbookHolder
)
{
SheetHolder
sheetHolder
=
new
SheetHolder
();
sheetHolder
.
setSheetParam
(
sheet
);
sheetHolder
.
setParentWorkBook
(
workbookHolder
);
boolean
noHead
=
(
sheet
.
getHead
()
==
null
||
sheet
.
getHead
().
isEmpty
())
&&
sheet
.
getClazz
()
==
null
;
if
(
noHead
)
{
// Use parent
sheetHolder
.
setHead
(
workbookHolder
.
getHead
());
sheetHolder
.
setClazz
(
workbookHolder
.
getClazz
());
}
else
{
sheetHolder
.
setHead
(
sheet
.
getHead
());
sheetHolder
.
setClazz
(
sheet
.
getClazz
());
}
if
(
sheet
.
getAutoTrim
()
==
null
)
{
workbookHolder
.
setAutoTrim
(
workbookHolder
.
getAutoTrim
());
}
else
{
workbookHolder
.
setAutoTrim
(
sheet
.
getNeedHead
());
}
// Initialization property
sheetHolder
.
setExcelHeadProperty
(
new
ExcelHeadProperty
(
sheetHolder
.
getClazz
(),
sheetHolder
.
getHead
(),
workbookHolder
));
return
sheetHolder
;
}
/**
* Compatible with old code
*/
@Deprecated
private
static
void
compatibleOldCode
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
sheet
)
{
if
(
sheet
.
getColumnWidthMap
()
!=
null
&&
!
sheet
.
getColumnWidthMap
().
isEmpty
())
{
final
Map
<
Integer
,
Integer
>
columnWidthMap
=
sheet
.
getColumnWidthMap
();
if
(
sheet
.
getCustomWriteHandlerList
()
==
null
)
{
sheet
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
sheet
.
getCustomWriteHandlerList
().
add
(
new
AbstractHeadColumnWidthStyleStrategy
()
{
@Override
protected
Integer
columnWidth
(
Head
head
)
{
if
(
columnWidthMap
.
containsKey
(
head
.
getColumnIndex
()))
{
columnWidthMap
.
get
(
head
.
getColumnIndex
());
}
return
20
;
}
});
}
if
(
sheet
.
getTableStyle
()
!=
null
)
{
final
TableStyle
tableStyle
=
sheet
.
getTableStyle
();
if
(
sheet
.
getCustomWriteHandlerList
()
==
null
)
{
sheet
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
CellStyle
headCellStyle
=
new
CellStyle
();
headCellStyle
.
setFont
(
tableStyle
.
getTableHeadFont
());
headCellStyle
.
setIndexedColors
(
tableStyle
.
getTableContentBackGroundColor
());
CellStyle
contentCellStyle
=
new
CellStyle
();
contentCellStyle
.
setFont
(
tableStyle
.
getTableContentFont
());
contentCellStyle
.
setIndexedColors
(
tableStyle
.
getTableContentBackGroundColor
());
sheet
.
getCustomWriteHandlerList
().
add
(
new
RowCellStyleStrategy
(
headCellStyle
,
contentCellStyle
));
}
}
public
Sheet
getSheet
()
{
return
sheet
;
}
public
void
setSheet
(
Sheet
sheet
)
{
this
.
sheet
=
sheet
;
}
public
Integer
getSheetNo
()
{
return
sheetNo
;
}
public
void
setSheetNo
(
Integer
sheetNo
)
{
this
.
sheetNo
=
sheetNo
;
}
public
String
getSheetName
()
{
return
sheetName
;
}
public
void
setSheetName
(
String
sheetName
)
{
this
.
sheetName
=
sheetName
;
}
public
WorkbookHolder
getParentWorkBook
()
{
return
parentWorkBook
;
}
public
void
setParentWorkBook
(
WorkbookHolder
parentWorkBook
)
{
this
.
parentWorkBook
=
parentWorkBook
;
}
public
Map
<
Integer
,
TableHolder
>
getHasBeenInitializedTable
()
{
return
hasBeenInitializedTable
;
}
public
void
setHasBeenInitializedTable
(
Map
<
Integer
,
TableHolder
>
hasBeenInitializedTable
)
{
this
.
hasBeenInitializedTable
=
hasBeenInitializedTable
;
}
public
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
getSheetParam
()
{
return
sheetParam
;
}
public
void
setSheetParam
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
sheetParam
)
{
this
.
sheetParam
=
sheetParam
;
}
}
src/main/java/com/alibaba/excel/read/metadata/holder/TableHolder.java
已删除
100644 → 0
浏览文件 @
e2bb1999
package
com.alibaba.excel.read.metadata.holder
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.metadata.CellStyle
;
import
com.alibaba.excel.write.metadata.Table
;
import
com.alibaba.excel.metadata.TableStyle
;
import
com.alibaba.excel.write.metadata.holder.AbstractWriteConfiguration
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
import
com.alibaba.excel.write.handler.WriteHandler
;
import
com.alibaba.excel.write.style.RowCellStyleStrategy
;
/**
* sheet holder
*
* @author zhuangjiaju
*/
public
class
ReadTableHolder
extends
AbstractReadHolder
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
TableHolder
.
class
);
/***
* poi sheet
*/
private
SheetHolder
parentSheet
;
/***
* tableNo
*/
private
Integer
tableNo
;
/**
* current table param
*/
private
Table
tableParam
;
public
static
TableHolder
buildWriteWorkTableHolder
(
Table
table
,
SheetHolder
sheetHolder
,
WorkbookHolder
workbookHolder
)
{
TableHolder
tableHolder
=
new
TableHolder
();
tableHolder
.
setTableParam
(
table
);
tableHolder
.
setParentSheet
(
sheetHolder
);
tableHolder
.
setTableNo
(
table
.
getTableNo
());
boolean
noHead
=
(
table
.
getHead
()
==
null
||
table
.
getHead
().
isEmpty
())
&&
table
.
getClazz
()
==
null
;
if
(
noHead
)
{
// Use parent
tableHolder
.
setHead
(
sheetHolder
.
getHead
());
tableHolder
.
setClazz
(
sheetHolder
.
getClazz
());
}
else
{
tableHolder
.
setHead
(
table
.
getHead
());
tableHolder
.
setClazz
(
table
.
getClazz
());
}
tableHolder
.
setNewInitialization
(
Boolean
.
TRUE
);
// Initialization property
tableHolder
.
setExcelHeadProperty
(
new
ExcelHeadProperty
(
tableHolder
.
getClazz
(),
tableHolder
.
getHead
(),
workbookHolder
.
getConvertAllFiled
()));
if
(
table
.
getNeedHead
()
==
null
)
{
tableHolder
.
setNeedHead
(
sheetHolder
.
needHead
());
}
else
{
tableHolder
.
setNeedHead
(
table
.
getNeedHead
());
}
if
(
table
.
getWriteRelativeHeadRowIndex
()
==
null
)
{
tableHolder
.
setWriteRelativeHeadRowIndex
(
sheetHolder
.
writeRelativeHeadRowIndex
());
}
else
{
tableHolder
.
setWriteRelativeHeadRowIndex
(
table
.
getWriteRelativeHeadRowIndex
());
}
// Compatible with old code
compatibleOldCode
(
table
);
List
<
WriteHandler
>
handlerList
=
new
ArrayList
<
WriteHandler
>();
if
(
table
.
getCustomWriteHandlerList
()
!=
null
&&
!
table
.
getCustomWriteHandlerList
().
isEmpty
())
{
handlerList
.
addAll
(
table
.
getCustomWriteHandlerList
());
}
// Initialization Annotation
tableHolder
.
initAnnotationConfig
(
handlerList
);
tableHolder
.
setWriteHandlerMap
(
tableHolder
.
sortAndClearUpHandler
(
handlerList
,
sheetHolder
.
getWriteHandlerMap
()));
Map
<
Class
,
Converter
>
converterMap
=
new
HashMap
<
Class
,
Converter
>(
sheetHolder
.
getWriteConverterMap
());
if
(
table
.
getCustomConverterList
()
!=
null
&&
!
table
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
table
.
getCustomConverterList
())
{
converterMap
.
put
(
converter
.
getClass
(),
converter
);
}
}
tableHolder
.
setWriteConverterMap
(
converterMap
);
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Table writeHandlerMap:{}"
,
tableHolder
.
getWriteHandlerMap
());
}
return
tableHolder
;
}
/**
* Compatible with old code
*/
@Deprecated
private
static
void
compatibleOldCode
(
Table
table
)
{
if
(
table
.
getTableStyle
()
!=
null
)
{
final
TableStyle
tableStyle
=
table
.
getTableStyle
();
if
(
table
.
getCustomWriteHandlerList
()
==
null
)
{
table
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
CellStyle
headCellStyle
=
new
CellStyle
();
headCellStyle
.
setFont
(
tableStyle
.
getTableHeadFont
());
headCellStyle
.
setIndexedColors
(
tableStyle
.
getTableContentBackGroundColor
());
CellStyle
contentCellStyle
=
new
CellStyle
();
contentCellStyle
.
setFont
(
tableStyle
.
getTableContentFont
());
contentCellStyle
.
setIndexedColors
(
tableStyle
.
getTableContentBackGroundColor
());
table
.
getCustomWriteHandlerList
().
add
(
new
RowCellStyleStrategy
(
headCellStyle
,
contentCellStyle
));
}
}
public
SheetHolder
getParentSheet
()
{
return
parentSheet
;
}
public
void
setParentSheet
(
SheetHolder
parentSheet
)
{
this
.
parentSheet
=
parentSheet
;
}
public
Integer
getTableNo
()
{
return
tableNo
;
}
public
void
setTableNo
(
Integer
tableNo
)
{
this
.
tableNo
=
tableNo
;
}
public
Table
getTableParam
()
{
return
tableParam
;
}
public
void
setTableParam
(
Table
tableParam
)
{
this
.
tableParam
=
tableParam
;
}
}
src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.support
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
org.apache.poi.poifs.filesystem.FileMagic
;
import
com.alibaba.excel.exception.ExcelCommonException
;
/**
* @author jipengfei
*/
public
enum
ExcelTypeEnum
{
XLS
(
".xls"
),
XLSX
(
".xlsx"
);
/**
* xls
*/
XLS
(
".xls"
),
/**
* xlsx
*/
XLSX
(
".xlsx"
);
private
String
value
;
...
...
@@ -18,22 +27,26 @@ public enum ExcelTypeEnum {
this
.
setValue
(
value
);
}
public
static
ExcelTypeEnum
valueOf
(
InputStream
inputStream
)
{
public
static
ExcelTypeEnum
valueOf
(
File
file
,
InputStream
inputStream
)
{
try
{
if
(!
inputStream
.
markSupported
())
{
return
null
;
FileMagic
fileMagic
=
null
;
if
(
file
!=
null
)
{
fileMagic
=
FileMagic
.
valueOf
(
file
);
}
else
{
fileMagic
=
FileMagic
.
valueOf
(
inputStream
);
}
FileMagic
fileMagic
=
FileMagic
.
valueOf
(
inputStream
);
if
(
FileMagic
.
OLE2
.
equals
(
fileMagic
))
{
return
XLS
;
}
if
(
FileMagic
.
OOXML
.
equals
(
fileMagic
))
{
return
XLSX
;
}
return
null
;
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
throw
new
ExcelCommonException
(
"Convert excel format exception.You can try specifying the 'excelType' yourself"
,
e
);
}
throw
new
ExcelCommonException
(
"Convert excel format exception.You can try specifying the 'excelType' yourself"
);
}
public
String
getValue
()
{
...
...
src/main/java/com/alibaba/excel/util/WorkBookUtil.java
浏览文件 @
5ac5c0e8
...
...
@@ -13,8 +13,8 @@ import org.apache.poi.ss.usermodel.Workbook;
import
org.apache.poi.xssf.streaming.SXSSFWorkbook
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
com.alibaba.excel.write.metadata.holder.WorkbookHolder
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder
;
/**
*
...
...
@@ -22,28 +22,28 @@ import com.alibaba.excel.support.ExcelTypeEnum;
*/
public
class
WorkBookUtil
{
public
static
Workbook
createWorkBook
(
W
orkbookHolder
w
orkbookHolder
)
public
static
Workbook
createWorkBook
(
W
riteWorkbookHolder
writeW
orkbookHolder
)
throws
IOException
,
InvalidFormatException
{
if
(
ExcelTypeEnum
.
XLSX
.
equals
(
workbookHolder
.
getExcelType
()))
{
if
(
w
orkbookHolder
.
get
File
()
!=
null
)
{
return
new
SXSSFWorkbook
(
new
XSSFWorkbook
(
w
orkbookParam
.
get
File
()));
if
(
ExcelTypeEnum
.
XLSX
.
equals
(
w
riteW
orkbookHolder
.
getExcelType
()))
{
if
(
w
riteWorkbookHolder
.
getTemplate
File
()
!=
null
)
{
return
new
SXSSFWorkbook
(
new
XSSFWorkbook
(
w
riteWorkbookHolder
.
getTemplate
File
()));
}
if
(
w
orkbookParam
.
get
InputStream
()
!=
null
)
{
return
new
SXSSFWorkbook
(
new
XSSFWorkbook
(
w
orkbookParam
.
get
InputStream
()));
if
(
w
riteWorkbookHolder
.
getTemplate
InputStream
()
!=
null
)
{
return
new
SXSSFWorkbook
(
new
XSSFWorkbook
(
w
riteWorkbookHolder
.
getTemplate
InputStream
()));
}
return
new
SXSSFWorkbook
(
500
);
}
if
(
w
orkbookParam
.
get
File
()
!=
null
)
{
return
new
HSSFWorkbook
(
new
POIFSFileSystem
(
w
orkbookParam
.
get
File
()));
if
(
w
riteWorkbookHolder
.
getTemplate
File
()
!=
null
)
{
return
new
HSSFWorkbook
(
new
POIFSFileSystem
(
w
riteWorkbookHolder
.
getTemplate
File
()));
}
if
(
w
orkbookParam
.
get
InputStream
()
!=
null
)
{
return
new
HSSFWorkbook
(
new
POIFSFileSystem
(
w
orkbookParam
.
get
InputStream
()));
if
(
w
riteWorkbookHolder
.
getTemplate
InputStream
()
!=
null
)
{
return
new
HSSFWorkbook
(
new
POIFSFileSystem
(
w
riteWorkbookHolder
.
getTemplate
InputStream
()));
}
return
new
HSSFWorkbook
();
}
public
static
Sheet
createSheet
(
Workbook
workbook
,
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
sheet
)
{
return
workbook
.
createSheet
(
sheet
.
getSheetName
()
!=
null
?
sheet
.
getSheetName
()
:
sheet
.
getSheetNo
()
+
""
);
public
static
Sheet
createSheet
(
Workbook
workbook
,
String
sheetName
)
{
return
workbook
.
createSheet
(
sheet
Name
);
}
public
static
Row
createRow
(
Sheet
sheet
,
int
rowNum
)
{
...
...
src/main/java/com/alibaba/excel/write/ExcelBuilder.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/builder/ExcelWriterSheetBuilder.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/builder/ExcelWriterTableBuilder.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/handler/CellWriteHandler.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/handler/RowWriteHandler.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/handler/SheetWriteHandler.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/handler/WorkbookWriteHandler.java
浏览文件 @
5ac5c0e8
package
com.alibaba.excel.write.handler
;
import
com.alibaba.excel.write.metadata.holder.WorkbookHolder
;
import
com.alibaba.excel.write.metadata.holder.W
riteW
orkbookHolder
;
/**
* intercepts handle Workbook creation
...
...
@@ -17,7 +17,7 @@ public interface WorkbookWriteHandler extends WriteHandler {
/**
* called after the sheet is created
*
* @param workbookHolder
* @param w
riteW
orkbookHolder
*/
void
afterWorkbookCreate
(
W
orkbookHolder
w
orkbookHolder
);
void
afterWorkbookCreate
(
W
riteWorkbookHolder
writeW
orkbookHolder
);
}
src/main/java/com/alibaba/excel/write/metadata/WriteWorkbook.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/metadata/holder/UTils.java
已删除
100644 → 0
浏览文件 @
e2bb1999
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/metadata/holder/WriteTableHolder.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/style/column/AbstractColumnWidthStyleStrategy.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/style/row/AbstractRowHeightStyleStrategy.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
src/test/java/com/alibaba/easyexcel/test/read/large/LargeData07Test.java
浏览文件 @
5ac5c0e8
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录