Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
苏木力格
easyexcel
提交
e2bb1999
E
easyexcel
项目概览
苏木力格
/
easyexcel
与 Fork 源项目一致
从无法访问的项目Fork
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
easyexcel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
e2bb1999
编写于
7月 23, 2019
作者:
Z
zhuangjiaju
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
拆分读写实体对象
上级
545c705c
变更
67
展开全部
隐藏空白更改
内联
并排
Showing
67 changed file
with
2233 addition
and
869 deletion
+2233
-869
src/main/java/com/alibaba/excel/EasyExcelFactory.java
src/main/java/com/alibaba/excel/EasyExcelFactory.java
+1
-1
src/main/java/com/alibaba/excel/ExcelReader.java
src/main/java/com/alibaba/excel/ExcelReader.java
+1
-1
src/main/java/com/alibaba/excel/ExcelWriter.java
src/main/java/com/alibaba/excel/ExcelWriter.java
+3
-3
src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java
src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java
+1
-1
src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
...in/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
+2
-2
src/main/java/com/alibaba/excel/analysis/ExcelExecutor.java
src/main/java/com/alibaba/excel/analysis/ExcelExecutor.java
+1
-1
src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
...n/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
+1
-1
src/main/java/com/alibaba/excel/analysis/v03/handlers/BOFRecordHandler.java
...alibaba/excel/analysis/v03/handlers/BOFRecordHandler.java
+1
-3
src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
.../java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
+2
-2
src/main/java/com/alibaba/excel/context/AnalysisContext.java
src/main/java/com/alibaba/excel/context/AnalysisContext.java
+10
-52
src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java
...n/java/com/alibaba/excel/context/AnalysisContextImpl.java
+6
-4
src/main/java/com/alibaba/excel/context/WriteContext.java
src/main/java/com/alibaba/excel/context/WriteContext.java
+7
-6
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
...main/java/com/alibaba/excel/context/WriteContextImpl.java
+13
-11
src/main/java/com/alibaba/excel/enums/HolderEnum.java
src/main/java/com/alibaba/excel/enums/HolderEnum.java
+25
-0
src/main/java/com/alibaba/excel/metadata/AbstractHolder.java
src/main/java/com/alibaba/excel/metadata/AbstractHolder.java
+86
-0
src/main/java/com/alibaba/excel/metadata/BasicParameter.java
src/main/java/com/alibaba/excel/metadata/BasicParameter.java
+16
-66
src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java
.../java/com/alibaba/excel/metadata/GlobalConfiguration.java
+37
-0
src/main/java/com/alibaba/excel/metadata/Holder.java
src/main/java/com/alibaba/excel/metadata/Holder.java
+34
-0
src/main/java/com/alibaba/excel/metadata/Sheet.java
src/main/java/com/alibaba/excel/metadata/Sheet.java
+96
-101
src/main/java/com/alibaba/excel/metadata/Table.java
src/main/java/com/alibaba/excel/metadata/Table.java
+32
-23
src/main/java/com/alibaba/excel/metadata/property/ExcelContentProperty.java
...alibaba/excel/metadata/property/ExcelContentProperty.java
+2
-0
src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java
...om/alibaba/excel/metadata/property/ExcelHeadProperty.java
+8
-126
src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java
...va/com/alibaba/excel/read/builder/ExcelReaderBuilder.java
+1
-1
src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java
.../alibaba/excel/read/listener/ModelBuildEventListener.java
+1
-1
src/main/java/com/alibaba/excel/read/metadata/ReadBasicParameter.java
...a/com/alibaba/excel/read/metadata/ReadBasicParameter.java
+43
-0
src/main/java/com/alibaba/excel/read/metadata/ReadSheet.java
src/main/java/com/alibaba/excel/read/metadata/ReadSheet.java
+33
-0
src/main/java/com/alibaba/excel/read/metadata/ReadWorkbook.java
...in/java/com/alibaba/excel/read/metadata/ReadWorkbook.java
+95
-0
src/main/java/com/alibaba/excel/read/metadata/holder/AbstractWriteConfiguration.java
...xcel/read/metadata/holder/AbstractWriteConfiguration.java
+240
-0
src/main/java/com/alibaba/excel/read/metadata/holder/ReadHolder.java
...va/com/alibaba/excel/read/metadata/holder/ReadHolder.java
+40
-0
src/main/java/com/alibaba/excel/read/metadata/holder/ReadRowHolder.java
...com/alibaba/excel/read/metadata/holder/ReadRowHolder.java
+79
-0
src/main/java/com/alibaba/excel/read/metadata/holder/SheetHolder.java
...a/com/alibaba/excel/read/metadata/holder/SheetHolder.java
+239
-0
src/main/java/com/alibaba/excel/read/metadata/holder/TableHolder.java
...a/com/alibaba/excel/read/metadata/holder/TableHolder.java
+8
-7
src/main/java/com/alibaba/excel/read/metadata/holder/WorkbookHolder.java
...om/alibaba/excel/read/metadata/holder/WorkbookHolder.java
+18
-27
src/main/java/com/alibaba/excel/read/metadata/property/ExcelReadHeadProperty.java
...a/excel/read/metadata/property/ExcelReadHeadProperty.java
+17
-0
src/main/java/com/alibaba/excel/util/WorkBookUtil.java
src/main/java/com/alibaba/excel/util/WorkBookUtil.java
+2
-2
src/main/java/com/alibaba/excel/write/ExcelBuilder.java
src/main/java/com/alibaba/excel/write/ExcelBuilder.java
+2
-2
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
+5
-4
src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java
...a/com/alibaba/excel/write/builder/ExcelWriterBuilder.java
+1
-1
src/main/java/com/alibaba/excel/write/builder/ExcelWriterSheetBuilder.java
.../alibaba/excel/write/builder/ExcelWriterSheetBuilder.java
+1
-1
src/main/java/com/alibaba/excel/write/builder/ExcelWriterTableBuilder.java
.../alibaba/excel/write/builder/ExcelWriterTableBuilder.java
+1
-1
src/main/java/com/alibaba/excel/write/handler/CellWriteHandler.java
...ava/com/alibaba/excel/write/handler/CellWriteHandler.java
+2
-2
src/main/java/com/alibaba/excel/write/handler/RowWriteHandler.java
...java/com/alibaba/excel/write/handler/RowWriteHandler.java
+2
-2
src/main/java/com/alibaba/excel/write/handler/SheetWriteHandler.java
...va/com/alibaba/excel/write/handler/SheetWriteHandler.java
+2
-2
src/main/java/com/alibaba/excel/write/handler/WorkbookWriteHandler.java
...com/alibaba/excel/write/handler/WorkbookWriteHandler.java
+1
-1
src/main/java/com/alibaba/excel/write/merge/AbstractMergeStrategy.java
.../com/alibaba/excel/write/merge/AbstractMergeStrategy.java
+2
-2
src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java
...com/alibaba/excel/write/metadata/WriteBasicParameter.java
+51
-0
src/main/java/com/alibaba/excel/write/metadata/WriteSheet.java
...ain/java/com/alibaba/excel/write/metadata/WriteSheet.java
+69
-0
src/main/java/com/alibaba/excel/write/metadata/WriteTable.java
...ain/java/com/alibaba/excel/write/metadata/WriteTable.java
+38
-0
src/main/java/com/alibaba/excel/write/metadata/WriteWorkbook.java
.../java/com/alibaba/excel/write/metadata/WriteWorkbook.java
+30
-61
src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java
...baba/excel/write/metadata/holder/AbstractWriteHolder.java
+240
-315
src/main/java/com/alibaba/excel/write/metadata/holder/UTils.java
...n/java/com/alibaba/excel/write/metadata/holder/UTils.java
+86
-0
src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java
.../com/alibaba/excel/write/metadata/holder/WriteHolder.java
+11
-17
src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java
...alibaba/excel/write/metadata/holder/WriteSheetHolder.java
+109
-0
src/main/java/com/alibaba/excel/write/metadata/holder/WriteTableHolder.java
...alibaba/excel/write/metadata/holder/WriteTableHolder.java
+61
-0
src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java
...baba/excel/write/metadata/holder/WriteWorkbookHolder.java
+159
-0
src/main/java/com/alibaba/excel/write/property/ExcelWriteHeadProperty.java
.../alibaba/excel/write/property/ExcelWriteHeadProperty.java
+143
-0
src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java
.../alibaba/excel/write/style/AbstractCellStyleStrategy.java
+3
-3
src/main/java/com/alibaba/excel/write/style/column/AbstractColumnWidthStyleStrategy.java
.../write/style/column/AbstractColumnWidthStyleStrategy.java
+2
-2
src/main/java/com/alibaba/excel/write/style/row/AbstractRowHeightStyleStrategy.java
...excel/write/style/row/AbstractRowHeightStyleStrategy.java
+2
-2
src/test/java/com/alibaba/easyexcel/test/ReadTest.java
src/test/java/com/alibaba/easyexcel/test/ReadTest.java
+1
-1
src/test/java/com/alibaba/easyexcel/test/WriteTest.java
src/test/java/com/alibaba/easyexcel/test/WriteTest.java
+2
-2
src/test/java/com/alibaba/easyexcel/test/read/ReadTest.java
src/test/java/com/alibaba/easyexcel/test/read/ReadTest.java
+1
-1
src/test/java/com/alibaba/easyexcel/test/read/large/LargeData07Test.java
...om/alibaba/easyexcel/test/read/large/LargeData07Test.java
+1
-1
src/test/java/com/alibaba/easyexcel/test/read/simple/SimpleData07Test.java
.../alibaba/easyexcel/test/read/simple/SimpleData07Test.java
+1
-1
src/test/java/com/alibaba/easyexcel/test/wirte/nohead/NoHeadData07Test.java
...alibaba/easyexcel/test/wirte/nohead/NoHeadData07Test.java
+1
-1
src/test/java/com/alibaba/easyexcel/test/wirte/order/OrderData07Test.java
...m/alibaba/easyexcel/test/wirte/order/OrderData07Test.java
+1
-1
src/test/java/com/alibaba/easyexcel/test/wirte/simple/SimpleData07Test.java
...alibaba/easyexcel/test/wirte/simple/SimpleData07Test.java
+1
-1
未找到文件。
src/main/java/com/alibaba/excel/EasyExcelFactory.java
浏览文件 @
e2bb1999
...
...
@@ -8,7 +8,7 @@ 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.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.builder.ExcelWriterBuilder
;
import
com.alibaba.excel.write.builder.ExcelWriterSheetBuilder
;
...
...
src/main/java/com/alibaba/excel/ExcelReader.java
浏览文件 @
e2bb1999
...
...
@@ -13,7 +13,7 @@ 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.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
import
com.alibaba.excel.parameter.AnalysisParam
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
...
...
src/main/java/com/alibaba/excel/ExcelWriter.java
浏览文件 @
e2bb1999
...
...
@@ -7,9 +7,9 @@ import java.util.List;
import
java.util.Map
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.metadata.Table
;
import
com.alibaba.excel.metadata.Workbook
;
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.parameter.GenerateParam
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.ExcelBuilder
;
...
...
src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.analysis
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
/**
* Excel file analyser
...
...
src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
浏览文件 @
e2bb1999
...
...
@@ -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.metadata.Sheet
;
import
com.alibaba.excel.metadata.Workbook
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Workbook
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
/**
...
...
src/main/java/com/alibaba/excel/analysis/ExcelExecutor.java
浏览文件 @
e2bb1999
...
...
@@ -2,7 +2,7 @@ package com.alibaba.excel.analysis;
import
java.util.List
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
/**
* Excel file Executor
...
...
src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
浏览文件 @
e2bb1999
...
...
@@ -29,7 +29,7 @@ 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.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
import
com.alibaba.excel.util.CollectionUtils
;
/**
...
...
src/main/java/com/alibaba/excel/analysis/v03/handlers/BOFRecordHandler.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.analysis.v03.handlers
;
import
com.alibaba.excel.analysis.v03.AbstractXlsRecordHandler
;
import
com.alibaba.excel.analysis.v03.XlsRecordHandler
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
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
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
浏览文件 @
e2bb1999
...
...
@@ -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.metadata.Sheet
;
import
com.alibaba.excel.
metadata.holder.write
.WorkbookHolder
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
import
com.alibaba.excel.
write.metadata.holder
.WorkbookHolder
;
import
com.alibaba.excel.util.FileUtils
;
/**
...
...
src/main/java/com/alibaba/excel/context/AnalysisContext.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.context
;
import
com.alibaba.excel.metadata.holder.read.ReadConfiguration
;
import
com.alibaba.excel.metadata.holder.write.SheetHolder
;
import
com.alibaba.excel.metadata.holder.write.WorkbookHolder
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
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,71 +15,28 @@ public interface AnalysisContext {
/**
* Select the current table
*
* @param
s
heet
* @param
readS
heet
*/
void
currentSheet
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
s
heet
);
void
currentSheet
(
ReadSheet
readS
heet
);
/**
* All information about the workbook you are currently working on
*
* @return
*/
WorkbookHolder
currentWorkbookHolder
();
Read
WorkbookHolder
currentWorkbookHolder
();
/**
* All information about the sheet you are currently working on
*
* @return
*/
SheetHolder
currentSheetHolder
();
Read
SheetHolder
currentSheetHolder
();
/**
*
Configuration
of currently operated cell
*
Row
of currently operated cell
*
* @return
*/
ReadConfiguration
currentConfiguration
();
/**
* set current result
*
* @param result
*/
void
setCurrentRowAnalysisResult
(
Object
result
);
/**
* get current result
*
* @return get current result
*/
Object
currentRowAnalysisResult
();
/**
* get current row
*
* @return
*/
Integer
currentRowNum
();
/**
* set current row num
*
* @param row
*/
void
setCurrentRowNum
(
Integer
row
);
/**
* get total row , Data may be inaccurate
*
* @return
*/
@Deprecated
Integer
getTotalCount
();
/**
* get total row ,Data may be inaccurate
*
* @param totalCount
*/
void
setTotalCount
(
Integer
totalCount
);
ReadRowHolder
currentRowHolder
();
}
src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java
浏览文件 @
e2bb1999
...
...
@@ -3,8 +3,10 @@ package com.alibaba.excel.context;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.metadata.holder.write.SheetHolder
;
import
com.alibaba.excel.metadata.holder.write.WorkbookHolder
;
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
;
/**
*
...
...
@@ -21,7 +23,7 @@ public class AnalysisContextImpl implements AnalysisContext {
*/
private
SheetHolder
currentSheetHolder
;
public
AnalysisContextImpl
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbook
)
{
public
AnalysisContextImpl
(
Workbook
workbook
)
{
if
(
workbook
==
null
)
{
throw
new
IllegalArgumentException
(
"Workbook argument cannot be null"
);
}
...
...
@@ -32,7 +34,7 @@ public class AnalysisContextImpl implements AnalysisContext {
}
@Override
public
void
currentSheet
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
)
{
public
void
currentSheet
(
Sheet
sheet
)
{
if
(
sheet
==
null
)
{
throw
new
IllegalArgumentException
(
"Sheet argument cannot be null"
);
}
...
...
src/main/java/com/alibaba/excel/context/WriteContext.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.context
;
import
com.alibaba.excel.metadata.Table
;
import
com.alibaba.excel.metadata.holder.write.WriteConfiguration
;
import
com.alibaba.excel.metadata.holder.write.SheetHolder
;
import
com.alibaba.excel.metadata.holder.write.TableHolder
;
import
com.alibaba.excel.metadata.holder.write.WorkbookHolder
;
import
com.alibaba.excel.write.metadata.Table
;
import
com.alibaba.excel.write.metadata.holder.WriteConfiguration
;
import
com.alibaba.excel.write.metadata.holder.SheetHolder
;
import
com.alibaba.excel.write.metadata.holder.TableHolder
;
import
com.alibaba.excel.write.metadata.holder.WorkbookHolder
;
import
com.alibaba.excel.write.metadata.Sheet
;
/**
* Write context
...
...
@@ -17,7 +18,7 @@ public interface WriteContext {
*
* @param sheet
*/
void
currentSheet
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
);
void
currentSheet
(
Sheet
sheet
);
/**
* If the current table already exists, select it; if not, create it
...
...
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
浏览文件 @
e2bb1999
...
...
@@ -13,11 +13,6 @@ import org.slf4j.LoggerFactory;
import
com.alibaba.excel.exception.ExcelGenerateException
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.Table
;
import
com.alibaba.excel.metadata.holder.write.SheetHolder
;
import
com.alibaba.excel.metadata.holder.write.TableHolder
;
import
com.alibaba.excel.metadata.holder.write.WorkbookHolder
;
import
com.alibaba.excel.metadata.holder.write.WriteConfiguration
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
import
com.alibaba.excel.util.WorkBookUtil
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
...
...
@@ -25,6 +20,12 @@ 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.metadata.Table
;
import
com.alibaba.excel.write.metadata.Workbook
;
import
com.alibaba.excel.write.metadata.holder.SheetHolder
;
import
com.alibaba.excel.write.metadata.holder.TableHolder
;
import
com.alibaba.excel.write.metadata.holder.WorkbookHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteConfiguration
;
/**
* A context is the main anchorage point of a excel writer.
...
...
@@ -52,7 +53,7 @@ public class WriteContextImpl implements WriteContext {
*/
private
WriteConfiguration
currentWriteConfiguration
;
public
WriteContextImpl
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbook
)
{
public
WriteContextImpl
(
Workbook
workbook
)
{
if
(
workbook
==
null
)
{
throw
new
IllegalArgumentException
(
"Workbook argument cannot be null"
);
}
...
...
@@ -96,7 +97,7 @@ public class WriteContextImpl implements WriteContext {
}
}
private
void
initCurrentWorkbookHolder
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbook
)
{
private
void
initCurrentWorkbookHolder
(
Workbook
workbook
)
{
currentWorkbookHolder
=
new
WorkbookHolder
(
workbook
);
currentWriteConfiguration
=
currentWorkbookHolder
;
if
(
LOGGER
.
isDebugEnabled
())
{
...
...
@@ -108,11 +109,12 @@ public class WriteContextImpl implements WriteContext {
* @param sheet
*/
@Override
public
void
currentSheet
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
)
{
public
void
currentSheet
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
sheet
)
{
if
(
sheet
==
null
)
{
throw
new
IllegalArgumentException
(
"Sheet argument cannot be null"
);
}
if
(
sheet
.
getSheetNo
()
==
null
||
sheet
.
getSheetNo
()
<=
0
)
{
LOGGER
.
info
(
"Sheet number is null"
);
sheet
.
setSheetNo
(
0
);
}
if
(
currentWorkbookHolder
.
getHasBeenInitializedSheet
().
containsKey
(
sheet
.
getSheetNo
()))
{
...
...
@@ -163,7 +165,7 @@ public class WriteContextImpl implements WriteContext {
}
}
private
void
initCurrentSheetHolder
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
)
{
private
void
initCurrentSheetHolder
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
sheet
)
{
currentSheetHolder
=
new
SheetHolder
(
sheet
,
currentWorkbookHolder
);
currentWorkbookHolder
.
getHasBeenInitializedSheet
().
put
(
sheet
.
getSheetNo
(),
currentSheetHolder
);
currentTableHolder
=
null
;
...
...
@@ -173,7 +175,7 @@ public class WriteContextImpl implements WriteContext {
}
}
private
void
initSheet
(
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
)
{
private
void
initSheet
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
sheet
)
{
Sheet
currentSheet
;
try
{
currentSheet
=
currentWorkbookHolder
.
getWorkbook
().
getSheetAt
(
sheet
.
getSheetNo
());
...
...
@@ -303,7 +305,7 @@ public class WriteContextImpl implements WriteContext {
initHead
(
currentTableHolder
.
getExcelHeadProperty
());
}
private
void
initCurrentTableHolder
(
com
.
alibaba
.
excel
.
metadata
.
Table
table
)
{
private
void
initCurrentTableHolder
(
Table
table
)
{
currentTableHolder
=
new
TableHolder
(
table
,
currentSheetHolder
,
currentWorkbookHolder
);
currentSheetHolder
.
getHasBeenInitializedTable
().
put
(
table
.
getTableNo
(),
currentTableHolder
);
currentWriteConfiguration
=
currentTableHolder
;
...
...
src/main/java/com/alibaba/excel/enums/HolderEnum.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.enums
;
/**
* The types of holder
*
* @author zhuangjiaju
**/
public
enum
HolderEnum
{
/**
* workbook
*/
WORKBOOK
,
/**
* sheet
*/
SHEET
,
/**
* table
*/
TABLE
,
/**
* row
*/
ROW
;
}
src/main/java/com/alibaba/excel/metadata/AbstractHolder.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.metadata
;
import
java.util.List
;
/**
* Write/read holder
*
* @author zhuangjiaju
*/
public
abstract
class
AbstractHolder
implements
Holder
{
/**
* Record whether it's new or from cache
*/
private
Boolean
newInitialization
;
/**
* You can only choose one of the {@link AbstractHolder#head} and {@link AbstractHolder#clazz}
*/
private
List
<
List
<
String
>>
head
;
/**
* You can only choose one of the {@link AbstractHolder#head} and {@link AbstractHolder#clazz}
*/
private
Class
clazz
;
/**
* Some global variables
*/
private
GlobalConfiguration
globalConfiguration
;
public
AbstractHolder
(
BasicParameter
basicParameter
,
AbstractHolder
prentAbstractHolder
)
{
this
.
newInitialization
=
Boolean
.
TRUE
;
this
.
head
=
basicParameter
.
getHead
();
this
.
clazz
=
basicParameter
.
getClazz
();
this
.
globalConfiguration
=
new
GlobalConfiguration
();
if
(
basicParameter
.
getAutoTrim
()
==
null
)
{
if
(
prentAbstractHolder
==
null
)
{
globalConfiguration
.
setAutoTrim
(
Boolean
.
TRUE
);
}
else
{
globalConfiguration
.
setAutoTrim
(
prentAbstractHolder
.
getGlobalConfiguration
().
getAutoTrim
());
}
}
else
{
globalConfiguration
.
setAutoTrim
(
basicParameter
.
getAutoTrim
());
}
}
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
GlobalConfiguration
getGlobalConfiguration
()
{
return
globalConfiguration
;
}
public
void
setGlobalConfiguration
(
GlobalConfiguration
globalConfiguration
)
{
this
.
globalConfiguration
=
globalConfiguration
;
}
@Override
public
GlobalConfiguration
globalConfiguration
()
{
return
getGlobalConfiguration
();
}
@Override
public
boolean
isNew
()
{
return
getNewInitialization
();
}
}
src/main/java/com/alibaba/excel/metadata/BasicParameter.java
浏览文件 @
e2bb1999
...
...
@@ -4,8 +4,6 @@ import java.util.ArrayList;
import
java.util.List
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.write.handler.WriteHandler
;
/**
* Basic parameter
...
...
@@ -13,18 +11,6 @@ import com.alibaba.excel.write.handler.WriteHandler;
* @author zhuangjiaju
**/
public
class
BasicParameter
{
/**
* 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
;
/**
* Writes the head relative to the existing contents of the sheet. Indexes are zero-based.
*/
private
Integer
writeRelativeHeadRowIndex
;
/**
* You can only choose one of the {@link BasicParameter#head} and {@link BasicParameter#clazz}
*/
...
...
@@ -33,42 +19,22 @@ public class BasicParameter {
* You can only choose one of the {@link BasicParameter#head} and {@link BasicParameter#clazz}
*/
private
Class
clazz
;
/**
* Need Head
*/
private
Boolean
needHead
;
/**
* Custom type conversions override the default
*/
private
List
<
Converter
>
customConverterList
=
new
ArrayList
<
Converter
>();
/**
* Custom type handler override the default
*/
private
List
<
WriteHandler
>
customWriteHandlerList
=
new
ArrayList
<
WriteHandler
>();
/**
* Custom type listener run after default
*/
private
List
<
ReadListener
>
customReadListenerList
=
new
ArrayList
<
ReadListener
>();
/**
* Automatic trim includes sheet name and content
*/
private
Boolean
autoTrim
;
public
Integer
getReadHeadRowNumber
()
{
return
readHeadRowNumber
;
}
public
void
setReadHeadRowNumber
(
Integer
readHeadRowNumber
)
{
this
.
readHeadRowNumber
=
readHeadRowNumber
;
}
public
Integer
getWriteRelativeHeadRowIndex
()
{
return
writeRelativeHeadRowIndex
;
}
public
void
setWriteRelativeHeadRowIndex
(
Integer
writeRelativeHeadRowIndex
)
{
this
.
writeRelativeHeadRowIndex
=
writeRelativeHeadRowIndex
;
}
/**
* true if date uses 1904 windowing, or false if using 1900 date windowing.
*
* default is false
*
* @return
*/
private
Boolean
use1904windowing
;
public
List
<
List
<
String
>>
getHead
()
{
return
head
;
...
...
@@ -86,14 +52,6 @@ public class BasicParameter {
this
.
clazz
=
clazz
;
}
public
Boolean
getNeedHead
()
{
return
needHead
;
}
public
void
setNeedHead
(
Boolean
needHead
)
{
this
.
needHead
=
needHead
;
}
public
List
<
Converter
>
getCustomConverterList
()
{
return
customConverterList
;
}
...
...
@@ -102,22 +60,6 @@ public class BasicParameter {
this
.
customConverterList
=
customConverterList
;
}
public
List
<
WriteHandler
>
getCustomWriteHandlerList
()
{
return
customWriteHandlerList
;
}
public
void
setCustomWriteHandlerList
(
List
<
WriteHandler
>
customWriteHandlerList
)
{
this
.
customWriteHandlerList
=
customWriteHandlerList
;
}
public
List
<
ReadListener
>
getCustomReadListenerList
()
{
return
customReadListenerList
;
}
public
void
setCustomReadListenerList
(
List
<
ReadListener
>
customReadListenerList
)
{
this
.
customReadListenerList
=
customReadListenerList
;
}
public
Boolean
getAutoTrim
()
{
return
autoTrim
;
}
...
...
@@ -125,4 +67,12 @@ public class BasicParameter {
public
void
setAutoTrim
(
Boolean
autoTrim
)
{
this
.
autoTrim
=
autoTrim
;
}
public
Boolean
getUse1904windowing
()
{
return
use1904windowing
;
}
public
void
setUse1904windowing
(
Boolean
use1904windowing
)
{
this
.
use1904windowing
=
use1904windowing
;
}
}
src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.metadata
;
/**
* Global configuration
*
* @author zhuangjiaju
*/
public
class
GlobalConfiguration
{
/**
* Automatic trim includes sheet name and content
*/
private
Boolean
autoTrim
;
/**
* true if date uses 1904 windowing, or false if using 1900 date windowing.
*
* default is false
*
* @return
*/
private
Boolean
use1904windowing
;
public
Boolean
getUse1904windowing
()
{
return
use1904windowing
;
}
public
void
setUse1904windowing
(
Boolean
use1904windowing
)
{
this
.
use1904windowing
=
use1904windowing
;
}
public
Boolean
getAutoTrim
()
{
return
autoTrim
;
}
public
void
setAutoTrim
(
Boolean
autoTrim
)
{
this
.
autoTrim
=
autoTrim
;
}
}
src/main/java/com/alibaba/excel/metadata/Holder.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.metadata
;
import
com.alibaba.excel.enums.HolderEnum
;
/**
*
* Get the corresponding holder
*
* @author zhuangjiaju
**/
public
interface
Holder
{
/**
* What holder is the return
*
* @return
*/
HolderEnum
holderType
();
/**
*
* Record whether it's new or from cache
*
* @return
*/
boolean
isNew
();
/**
* Some global variables
*
* @return
*/
GlobalConfiguration
globalConfiguration
();
}
src/main/java/com/alibaba/excel/metadata/Sheet.java
浏览文件 @
e2bb1999
...
...
@@ -4,121 +4,110 @@ import java.util.HashMap;
import
java.util.List
;
import
java.util.Map
;
import
com.alibaba.excel.write.builder.ExcelWriterSheetBuilder
;
import
com.alibaba.excel.write.style.RowCellStyleStrategy
;
import
com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy
;
/**
* sheet
*
*
* @author jipengfei
*/
public
class
Sheet
extends
BasicParameter
{
public
class
Sheet
{
/**
* Starting from 0
*/
private
Integer
sheetNo
;
private
int
headLineMun
;
/**
* Starting from 1
*/
private
int
sheetNo
;
/**
* sheet name
*/
private
String
sheetName
;
/**
* column with
*
* @deprecated please use {@link SimpleColumnWidthStyleStrategy}
*/
@Deprecated
private
Map
<
Integer
,
Integer
>
columnWidthMap
=
new
HashMap
<
Integer
,
Integer
>();
private
Class
<?
extends
BaseRowModel
>
clazz
;
/**
*/
private
List
<
List
<
String
>>
head
;
/**
*
* @deprecated please use{@link RowCellStyleStrategy}
*/
@Deprecated
private
TableStyle
tableStyle
;
public
Sheet
()
{
super
();
}
/**
* Create sheet
*
* @param sheetNo
* @param sheetName
* column with
*/
public
Sheet
(
Integer
sheetNo
,
String
sheetName
)
{
super
();
this
.
sheetNo
=
sheetNo
;
this
.
sheetName
=
sheetName
;
}
private
Map
<
Integer
,
Integer
>
columnWidthMap
=
new
HashMap
<
Integer
,
Integer
>();
/**
* It was 'sheetNo' starting from 1 and now it is starting from 0
*
* @param sheetNo
* @param readHeadRowNumber
* @deprecated please use {@link ExcelWriterSheetBuilder#build()}
*
*/
@Deprecated
public
Sheet
(
int
sheetNo
,
int
readHeadRowNumber
)
{
super
();
this
.
sheetNo
=
sheetNo
-
1
;
setReadHeadRowNumber
(
readHeadRowNumber
);
}
private
Boolean
autoWidth
=
Boolean
.
FALSE
;
/**
* It was 'sheetNo' starting from 1 and now it is starting from 0
*
* @param sheetNo
* @deprecated please use {@link ExcelWriterSheetBuilder#build()}
*/
@Deprecated
private
int
startRow
=
0
;
public
Sheet
(
int
sheetNo
)
{
super
();
this
.
sheetNo
=
sheetNo
-
1
;
this
.
sheetNo
=
sheetNo
;
}
/**
* It was 'sheetNo' starting from 1 and now it is starting from 0
*
* @param sheetNo
* @param readHeadRowNumber
* @param clazz
* @deprecated please use {@link ExcelWriterSheetBuilder#build()}
*/
@Deprecated
public
Sheet
(
int
sheetNo
,
int
readHeadRowNumber
,
Class
clazz
)
{
super
();
this
.
sheetNo
=
sheetNo
-
1
;
setReadHeadRowNumber
(
readHeadRowNumber
);
setClazz
(
clazz
);
public
Sheet
(
int
sheetNo
,
int
headLineMun
)
{
this
.
sheetNo
=
sheetNo
;
this
.
headLineMun
=
headLineMun
;
}
/**
* It was 'sheetNo' starting from 1 and now it is starting from 0
*
* @param sheetNo
* @param readHeadRowNumber
* @param clazz
* @deprecated please use {@link ExcelWriterSheetBuilder#build()}
*/
@Deprecated
public
Sheet
(
int
sheetNo
,
int
readHeadRowNumber
,
Class
clazz
,
String
sheetName
,
List
<
List
<
String
>>
head
)
{
super
();
this
.
sheetNo
=
sheetNo
-
1
;
public
Sheet
(
int
sheetNo
,
int
headLineMun
,
Class
<?
extends
BaseRowModel
>
clazz
)
{
this
.
sheetNo
=
sheetNo
;
this
.
headLineMun
=
headLineMun
;
this
.
clazz
=
clazz
;
}
public
Sheet
(
int
sheetNo
,
int
headLineMun
,
Class
<?
extends
BaseRowModel
>
clazz
,
String
sheetName
,
List
<
List
<
String
>>
head
)
{
this
.
sheetNo
=
sheetNo
;
this
.
clazz
=
clazz
;
this
.
headLineMun
=
headLineMun
;
this
.
sheetName
=
sheetName
;
this
.
head
=
head
;
}
setReadHeadRowNumber
(
readHeadRowNumber
);
setClazz
(
clazz
);
setHead
(
head
);
public
List
<
List
<
String
>>
getHead
()
{
return
head
;
}
public
Integer
getSheetNo
()
{
public
void
setHead
(
List
<
List
<
String
>>
head
)
{
this
.
head
=
head
;
}
public
Class
<?
extends
BaseRowModel
>
getClazz
()
{
return
clazz
;
}
public
void
setClazz
(
Class
<?
extends
BaseRowModel
>
clazz
)
{
this
.
clazz
=
clazz
;
if
(
headLineMun
==
0
)
{
this
.
headLineMun
=
1
;
}
}
public
int
getHeadLineMun
()
{
return
headLineMun
;
}
public
void
setHeadLineMun
(
int
headLineMun
)
{
this
.
headLineMun
=
headLineMun
;
}
public
int
getSheetNo
()
{
return
sheetNo
;
}
public
void
setSheetNo
(
Integer
sheetNo
)
{
public
void
setSheetNo
(
int
sheetNo
)
{
this
.
sheetNo
=
sheetNo
;
}
...
...
@@ -130,6 +119,16 @@ public class Sheet extends BasicParameter {
this
.
sheetName
=
sheetName
;
}
public
TableStyle
getTableStyle
()
{
return
tableStyle
;
}
public
void
setTableStyle
(
TableStyle
tableStyle
)
{
this
.
tableStyle
=
tableStyle
;
}
public
Map
<
Integer
,
Integer
>
getColumnWidthMap
()
{
return
columnWidthMap
;
}
...
...
@@ -138,36 +137,32 @@ public class Sheet extends BasicParameter {
this
.
columnWidthMap
=
columnWidthMap
;
}
public
TableStyle
getTableStyle
()
{
return
tableStyle
;
@Override
public
String
toString
()
{
return
"Sheet{"
+
"headLineMun="
+
headLineMun
+
", sheetNo="
+
sheetNo
+
", sheetName='"
+
sheetName
+
'\''
+
", clazz="
+
clazz
+
", head="
+
head
+
", tableStyle="
+
tableStyle
+
", columnWidthMap="
+
columnWidthMap
+
'}'
;
}
public
void
setTableStyle
(
TableStyle
tableStyle
)
{
this
.
tableStyle
=
tableStyle
;
public
Boolean
getAutoWidth
(
)
{
return
autoWidth
;
}
/**
*
* @param writeRelativeHeadRowIndex
* @deprecated please use {@link Sheet#setWriteRelativeHeadRowIndex(Integer)}
*/
@Deprecated
public
void
setStartRow
(
int
writeRelativeHeadRowIndex
)
{
setWriteRelativeHeadRowIndex
(
writeRelativeHeadRowIndex
);
public
void
setAutoWidth
(
Boolean
autoWidth
)
{
this
.
autoWidth
=
autoWidth
;
}
/**
*
* @param readHeadRowNumber
* @deprecated please use {@link Sheet#setReadHeadRowNumber(Integer)} )}
*/
@Deprecated
public
void
setHeadLineMun
(
int
readHeadRowNumber
)
{
setReadHeadRowNumber
(
readHeadRowNumber
);
public
int
getStartRow
()
{
return
startRow
;
}
@Override
public
String
toString
()
{
return
"Sheet{"
+
"sheetNo="
+
sheetNo
+
", sheetName='"
+
sheetName
+
'\''
+
'}'
;
public
void
setStartRow
(
int
startRow
)
{
this
.
startRow
=
startRow
;
}
}
src/main/java/com/alibaba/excel/metadata/Table.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.metadata
;
import
com.alibaba.excel.write.style.RowCellStyleStrategy
;
import
java.util.List
;
/**
* table
*
* @author jipengfei
*/
public
class
Table
extends
BasicParameter
{
public
class
Table
{
/**
* Starting from 0
*/
private
Integer
tableNo
;
private
Class
<?
extends
BaseRowModel
>
clazz
;
/**
*/
private
List
<
List
<
String
>>
head
;
/**
*/
private
int
tableNo
;
/**
*
* @deprecated please use{@link RowCellStyleStrategy}
*/
@Deprecated
private
TableStyle
tableStyle
;
public
Table
()
{
super
();
public
TableStyle
getTableStyle
()
{
return
tableStyle
;
}
public
void
setTableStyle
(
TableStyle
tableStyle
)
{
this
.
tableStyle
=
tableStyle
;
}
public
Table
(
Integer
tableNo
)
{
super
();
this
.
tableNo
=
tableNo
;
}
public
Integer
getTableNo
()
{
return
tableNo
;
public
Class
<?
extends
BaseRowModel
>
getClazz
()
{
return
clazz
;
}
public
void
set
TableNo
(
Integer
tableNo
)
{
this
.
tableNo
=
tableNo
;
public
void
set
Clazz
(
Class
<?
extends
BaseRowModel
>
clazz
)
{
this
.
clazz
=
clazz
;
}
public
TableStyle
getTableStyle
()
{
return
tableStyle
;
public
List
<
List
<
String
>>
getHead
()
{
return
head
;
}
public
void
set
TableStyle
(
TableStyle
tableStyle
)
{
this
.
tableStyle
=
tableStyle
;
public
void
set
Head
(
List
<
List
<
String
>>
head
)
{
this
.
head
=
head
;
}
@Override
public
String
toString
()
{
return
"Table{"
+
"tableNo="
+
tableNo
+
'}'
;
public
int
getTableNo
()
{
return
tableNo
;
}
public
void
setTableNo
(
int
tableNo
)
{
this
.
tableNo
=
tableNo
;
}
}
src/main/java/com/alibaba/excel/metadata/property/ExcelContentProperty.java
浏览文件 @
e2bb1999
...
...
@@ -22,6 +22,8 @@ public class ExcelContentProperty {
/**
* true if date uses 1904 windowing, or false if using 1900 date windowing.
*
* default is false
*
* @return
*/
private
Boolean
use1904windowing
;
...
...
src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java
浏览文件 @
e2bb1999
...
...
@@ -14,16 +14,9 @@ import com.alibaba.excel.annotation.ExcelIgnore;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
com.alibaba.excel.annotation.format.DateTimeFormat
;
import
com.alibaba.excel.annotation.format.NumberFormat
;
import
com.alibaba.excel.annotation.write.style.ColumnWidth
;
import
com.alibaba.excel.annotation.write.style.ContentRowHeight
;
import
com.alibaba.excel.annotation.write.style.ContentStyle
;
import
com.alibaba.excel.annotation.write.style.HeadRowHeight
;
import
com.alibaba.excel.annotation.write.style.HeadStyle
;
import
com.alibaba.excel.enums.HeadKindEnum
;
import
com.alibaba.excel.exception.ExcelGenerateException
;
import
com.alibaba.excel.metadata.CellRange
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.holder.write.WorkbookHolder
;
import
com.alibaba.excel.util.StringUtils
;
/**
...
...
@@ -55,10 +48,8 @@ public class ExcelHeadProperty {
* Configuration column information
*/
private
Map
<
Integer
,
ExcelContentProperty
>
contentPropertyMap
;
private
RowHeightProperty
headRowHeightProperty
;
private
RowHeightProperty
contentRowHeightProperty
;
public
ExcelHeadProperty
(
Class
headClazz
,
List
<
List
<
String
>>
head
,
WorkbookHolder
workbookHolder
)
{
public
ExcelHeadProperty
(
Class
headClazz
,
List
<
List
<
String
>>
head
,
Boolean
convertAllFiled
)
{
this
.
headClazz
=
headClazz
;
headMap
=
new
TreeMap
<
Integer
,
Head
>();
contentPropertyMap
=
new
TreeMap
<
Integer
,
ExcelContentProperty
>();
...
...
@@ -72,7 +63,7 @@ public class ExcelHeadProperty {
headKind
=
HeadKindEnum
.
STRING
;
}
else
{
// convert headClazz to head
initColumnProperties
(
workbookHolder
);
initColumnProperties
(
convertAllFiled
);
}
initHeadRowNumber
();
if
(
LOGGER
.
isDebugEnabled
())
{
...
...
@@ -104,7 +95,7 @@ public class ExcelHeadProperty {
}
}
private
void
initColumnProperties
(
WorkbookHolder
workbookHolder
)
{
private
void
initColumnProperties
(
Boolean
convertAllFiled
)
{
if
(
headClazz
==
null
)
{
return
;
}
...
...
@@ -127,7 +118,7 @@ public class ExcelHeadProperty {
continue
;
}
ExcelProperty
excelProperty
=
field
.
getAnnotation
(
ExcelProperty
.
class
);
if
(
excelProperty
==
null
&&
(
workbookHolder
==
null
||
!
workbookHolder
.
getConvertAllFiled
())
)
{
if
(
excelProperty
==
null
&&
convertAllFiled
!=
null
&&
!
convertAllFiled
)
{
continue
;
}
if
(
excelProperty
==
null
||
excelProperty
.
index
()
<
0
)
{
...
...
@@ -141,35 +132,24 @@ public class ExcelHeadProperty {
customFiledMap
.
put
(
excelProperty
.
index
(),
field
);
}
HeadStyle
headStyle
=
(
HeadStyle
)
headClazz
.
getAnnotation
(
HeadStyle
.
class
);
ContentStyle
contentStyle
=
(
ContentStyle
)
headClazz
.
getAnnotation
(
ContentStyle
.
class
);
ColumnWidth
columnWidth
=
(
ColumnWidth
)
headClazz
.
getAnnotation
(
ColumnWidth
.
class
);
this
.
headRowHeightProperty
=
RowHeightProperty
.
build
((
HeadRowHeight
)
headClazz
.
getAnnotation
(
HeadRowHeight
.
class
));
this
.
contentRowHeightProperty
=
RowHeightProperty
.
build
((
ContentRowHeight
)
headClazz
.
getAnnotation
(
ContentRowHeight
.
class
));
int
index
=
0
;
for
(
Field
field
:
defaultFieldList
)
{
while
(
customFiledMap
.
containsKey
(
index
))
{
initOneColumnProperty
(
index
,
customFiledMap
.
get
(
index
),
headStyle
,
contentStyle
,
columnWidth
,
workbookHolder
);
initOneColumnProperty
(
index
,
customFiledMap
.
get
(
index
));
customFiledMap
.
remove
(
index
);
index
++;
}
initOneColumnProperty
(
index
,
field
,
headStyle
,
contentStyle
,
columnWidth
,
workbookHolder
);
initOneColumnProperty
(
index
,
field
);
index
++;
}
for
(
Map
.
Entry
<
Integer
,
Field
>
entry
:
customFiledMap
.
entrySet
())
{
initOneColumnProperty
(
index
,
entry
.
getValue
()
,
headStyle
,
contentStyle
,
columnWidth
,
workbookHolder
);
initOneColumnProperty
(
index
,
entry
.
getValue
());
index
++;
}
headKind
=
HeadKindEnum
.
CLASS
;
}
private
void
initOneColumnProperty
(
int
index
,
Field
field
,
HeadStyle
parentHeadStyle
,
ContentStyle
parentContentStyle
,
ColumnWidth
parentColumnWidth
,
WorkbookHolder
workbookHolder
)
{
private
void
initOneColumnProperty
(
int
index
,
Field
field
)
{
ExcelProperty
excelProperty
=
field
.
getAnnotation
(
ExcelProperty
.
class
);
List
<
String
>
tmpHeadList
=
new
ArrayList
<
String
>();
if
(
excelProperty
!=
null
)
{
...
...
@@ -181,36 +161,13 @@ public class ExcelHeadProperty {
tmpHeadList
.
add
(
field
.
getName
());
}
Head
head
=
new
Head
(
index
,
field
.
getName
(),
tmpHeadList
);
HeadStyle
headStyle
=
field
.
getAnnotation
(
HeadStyle
.
class
);
if
(
headStyle
==
null
)
{
headStyle
=
parentHeadStyle
;
}
head
.
setCellStyleProperty
(
CellStyleProperty
.
build
(
headStyle
));
ColumnWidth
columnWidth
=
field
.
getAnnotation
(
ColumnWidth
.
class
);
if
(
columnWidth
==
null
)
{
columnWidth
=
parentColumnWidth
;
}
head
.
setColumnWidthProperty
(
ColumnWidthProperty
.
build
(
columnWidth
));
ExcelContentProperty
excelContentProperty
=
new
ExcelContentProperty
();
excelContentProperty
.
setHead
(
head
);
excelContentProperty
.
setField
(
field
);
ContentStyle
contentStyle
=
field
.
getAnnotation
(
ContentStyle
.
class
);
if
(
contentStyle
==
null
)
{
contentStyle
=
parentContentStyle
;
}
excelContentProperty
.
setCellStyleProperty
(
CellStyleProperty
.
build
(
contentStyle
));
excelContentProperty
.
setDateTimeFormatProperty
(
DateTimeFormatProperty
.
build
(
field
.
getAnnotation
(
DateTimeFormat
.
class
)));
excelContentProperty
.
setNumberFormatProperty
(
NumberFormatProperty
.
build
(
field
.
getAnnotation
(
NumberFormat
.
class
)));
if
(
workbookHolder
!=
null
&&
workbookHolder
.
getReadGlobalProperty
()
!=
null
)
{
excelContentProperty
.
setGlobalProperty
(
workbookHolder
.
getReadGlobalProperty
());
}
headMap
.
put
(
index
,
head
);
contentPropertyMap
.
put
(
index
,
excelContentProperty
);
}
...
...
@@ -259,79 +216,4 @@ public class ExcelHeadProperty {
this
.
contentPropertyMap
=
contentPropertyMap
;
}
public
RowHeightProperty
getHeadRowHeightProperty
()
{
return
headRowHeightProperty
;
}
public
void
setHeadRowHeightProperty
(
RowHeightProperty
headRowHeightProperty
)
{
this
.
headRowHeightProperty
=
headRowHeightProperty
;
}
public
RowHeightProperty
getContentRowHeightProperty
()
{
return
contentRowHeightProperty
;
}
public
void
setContentRowHeightProperty
(
RowHeightProperty
contentRowHeightProperty
)
{
this
.
contentRowHeightProperty
=
contentRowHeightProperty
;
}
/**
* Calculate all cells that need to be merged
*
* @return cells that need to be merged
*/
public
List
<
CellRange
>
headCellRangeList
()
{
List
<
CellRange
>
cellRangeList
=
new
ArrayList
<
CellRange
>();
int
i
=
0
;
for
(
Map
.
Entry
<
Integer
,
Head
>
entry
:
headMap
.
entrySet
())
{
Head
head
=
entry
.
getValue
();
List
<
String
>
columnValues
=
head
.
getHeadNameList
();
for
(
int
j
=
0
;
j
<
columnValues
.
size
();
j
++)
{
int
lastRow
=
getLastRangNum
(
j
,
columnValues
.
get
(
j
),
columnValues
);
int
lastColumn
=
getLastRangNum
(
i
,
columnValues
.
get
(
j
),
head
.
getHeadNameList
());
if
((
lastRow
>
j
||
lastColumn
>
i
)
&&
lastRow
>=
0
&&
lastColumn
>=
0
)
{
cellRangeList
.
add
(
new
CellRange
(
j
,
lastRow
,
i
,
lastColumn
));
}
}
i
++;
}
return
cellRangeList
;
}
/**
* Get the last consecutive string position
*
* @param j
* current value position
* @param value
* value content
* @param values
* values
* @return the last consecutive string position
*/
private
int
getLastRangNum
(
int
j
,
String
value
,
List
<
String
>
values
)
{
if
(
value
==
null
)
{
return
-
1
;
}
if
(
j
>
0
)
{
String
preValue
=
values
.
get
(
j
-
1
);
if
(
value
.
equals
(
preValue
))
{
return
-
1
;
}
}
int
last
=
j
;
for
(
int
i
=
last
+
1
;
i
<
values
.
size
();
i
++)
{
String
current
=
values
.
get
(
i
);
if
(
value
.
equals
(
current
))
{
last
=
i
;
}
else
{
// if i>j && !value.equals(current) Indicates that the continuous range is exceeded
if
(
i
>
j
)
{
break
;
}
}
}
return
last
;
}
}
src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.read.builder
;
import
com.alibaba.excel.metadata.Workbook
;
import
com.alibaba.excel.
write.
metadata.Workbook
;
/**
* Build ExcelWriter
...
...
src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java
浏览文件 @
e2bb1999
...
...
@@ -14,7 +14,7 @@ import com.alibaba.excel.event.AnalysisEventListener;
import
com.alibaba.excel.exception.ExcelDataConvertException
;
import
com.alibaba.excel.metadata.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.
metadata.holder
.read.ReadConfiguration
;
import
com.alibaba.excel.
read.metadata
.read.ReadConfiguration
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
...
...
src/main/java/com/alibaba/excel/read/metadata/ReadBasicParameter.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.read.metadata
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.alibaba.excel.metadata.BasicParameter
;
import
com.alibaba.excel.read.listener.ReadListener
;
/**
* Read basic parameter
*
* @author zhuangjiaju
**/
public
class
ReadBasicParameter
extends
BasicParameter
{
/**
* 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
headRowNumber
;
/**
* Custom type listener run after default
*/
private
List
<
ReadListener
>
customReadListenerList
=
new
ArrayList
<
ReadListener
>();
public
Integer
getHeadRowNumber
()
{
return
headRowNumber
;
}
public
void
setHeadRowNumber
(
Integer
headRowNumber
)
{
this
.
headRowNumber
=
headRowNumber
;
}
public
List
<
ReadListener
>
getCustomReadListenerList
()
{
return
customReadListenerList
;
}
public
void
setCustomReadListenerList
(
List
<
ReadListener
>
customReadListenerList
)
{
this
.
customReadListenerList
=
customReadListenerList
;
}
}
src/main/java/com/alibaba/excel/read/metadata/ReadSheet.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.read.metadata
;
/**
* Read sheet
*
* @author jipengfei
*/
public
class
ReadSheet
extends
ReadBasicParameter
{
/**
* Starting from 0
*/
private
Integer
sheetNo
;
/**
* sheet name
*/
private
String
sheetName
;
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
;
}
}
src/main/java/com/alibaba/excel/read/metadata/ReadWorkbook.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.read.metadata
;
import
java.io.File
;
import
java.io.InputStream
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
/**
* Workbook
*
* @author zhuangjiaju
**/
public
class
ReadWorkbook
extends
ReadBasicParameter
{
/**
* Excel type
*/
private
ExcelTypeEnum
excelType
;
/**
* Read InputStream
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
private
InputStream
inputStream
;
/**
* Read file
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
private
File
file
;
/**
* Default true
*/
private
Boolean
autoCloseStream
;
/**
* Mandatory use 'inputStream' .Default is false
*/
private
Boolean
mandatoryUseInputStream
;
/**
* The default is all excel objects.Default is true.
* <li>if true , you can use {@link com.alibaba.excel.annotation.ExcelIgnore} ignore a field.
* <li>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
;
public
ExcelTypeEnum
getExcelType
()
{
return
excelType
;
}
public
void
setExcelType
(
ExcelTypeEnum
excelType
)
{
this
.
excelType
=
excelType
;
}
public
InputStream
getInputStream
()
{
return
inputStream
;
}
public
void
setInputStream
(
InputStream
inputStream
)
{
this
.
inputStream
=
inputStream
;
}
public
File
getFile
()
{
return
file
;
}
public
void
setFile
(
File
file
)
{
this
.
file
=
file
;
}
public
Boolean
getAutoCloseStream
()
{
return
autoCloseStream
;
}
public
void
setAutoCloseStream
(
Boolean
autoCloseStream
)
{
this
.
autoCloseStream
=
autoCloseStream
;
}
public
Boolean
getMandatoryUseInputStream
()
{
return
mandatoryUseInputStream
;
}
public
void
setMandatoryUseInputStream
(
Boolean
mandatoryUseInputStream
)
{
this
.
mandatoryUseInputStream
=
mandatoryUseInputStream
;
}
public
Boolean
getConvertAllFiled
()
{
return
convertAllFiled
;
}
public
void
setConvertAllFiled
(
Boolean
convertAllFiled
)
{
this
.
convertAllFiled
=
convertAllFiled
;
}
}
src/main/java/com/alibaba/excel/read/metadata/holder/AbstractWriteConfiguration.java
0 → 100644
浏览文件 @
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
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.exception.ExcelAnalysisException
;
import
com.alibaba.excel.exception.ExcelDataConvertException
;
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.ReadListener
;
import
com.alibaba.excel.read.listener.ReadListenerRegistryCenter
;
import
com.alibaba.excel.read.listener.event.AnalysisFinishEvent
;
import
com.alibaba.excel.read.metadata.ReadBasicParameter
;
import
com.alibaba.excel.read.metadata.property.ExcelReadHeadProperty
;
import
com.alibaba.excel.util.StringUtils
;
/**
* Read Holder
*
* @author zhuangjiaju
*/
public
abstract
class
AbstractReadHolder
extends
AbstractHolder
implements
ReadHolder
,
ReadListenerRegistryCenter
{
/**
* 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
headRowNumber
;
/**
* Excel head property
*/
private
ExcelReadHeadProperty
excelReadHeadProperty
;
/**
* Read listener
*/
private
List
<
ReadListener
>
readListenerList
;
/**
* Converter for workbook
*/
private
Map
<
ConverterKey
,
Converter
>
converterMap
;
public
AbstractReadHolder
(
ReadBasicParameter
readBasicParameter
,
AbstractReadHolder
parentAbstractReadHolder
,
Boolean
convertAllFiled
)
{
super
(
readBasicParameter
,
parentAbstractReadHolder
);
if
(
readBasicParameter
.
getUse1904windowing
()
==
null
&&
parentAbstractReadHolder
!=
null
)
{
getGlobalConfiguration
()
.
setUse1904windowing
(
parentAbstractReadHolder
.
getGlobalConfiguration
().
getUse1904windowing
());
}
else
{
getGlobalConfiguration
().
setUse1904windowing
(
readBasicParameter
.
getUse1904windowing
());
}
if
(
readBasicParameter
.
getHeadRowNumber
()
==
null
)
{
if
(
parentAbstractReadHolder
==
null
)
{
this
.
headRowNumber
=
1
;
}
else
{
this
.
headRowNumber
=
parentAbstractReadHolder
.
getHeadRowNumber
();
}
}
else
{
this
.
headRowNumber
=
readBasicParameter
.
getHeadRowNumber
();
}
// Initialization property
this
.
excelReadHeadProperty
=
new
ExcelReadHeadProperty
(
getClazz
(),
getHead
(),
convertAllFiled
);
if
(
parentAbstractReadHolder
==
null
)
{
this
.
readListenerList
=
new
ArrayList
<
ReadListener
>();
}
else
{
this
.
readListenerList
=
new
ArrayList
<
ReadListener
>(
parentAbstractReadHolder
.
getReadListenerList
());
}
if
(
readBasicParameter
.
getCustomReadListenerList
()
!=
null
&&
!
readBasicParameter
.
getCustomReadListenerList
().
isEmpty
())
{
this
.
readListenerList
.
addAll
(
readBasicParameter
.
getCustomReadListenerList
());
}
if
(
parentAbstractReadHolder
==
null
)
{
this
.
converterMap
=
new
HashMap
<
ConverterKey
,
Converter
>();
}
else
{
this
.
converterMap
=
new
HashMap
<
ConverterKey
,
Converter
>(
parentAbstractReadHolder
.
getConverterMap
());
}
if
(
readBasicParameter
.
getCustomConverterList
()
!=
null
&&
!
readBasicParameter
.
getCustomConverterList
().
isEmpty
())
{
for
(
Converter
converter
:
readBasicParameter
.
getCustomConverterList
())
{
converterMap
.
put
(
ConverterKey
.
buildConverterKey
(
converter
),
converter
);
}
}
}
@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
.
currentRowHolder
().
getRow
().
getRowNum
()
>
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
().
excelReadHeadProperty
().
getHeadKind
()))
{
return
;
}
List
<
String
>
dataList
=
(
List
<
String
>)
buildStringList
(
cellDataList
,
analysisContext
.
currentConfiguration
());
ExcelReadHeadProperty
excelHeadPropertyData
=
analysisContext
.
currentConfiguration
().
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
);
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
,
com
.
alibaba
.
excel
.
read
.
metadata
.
read
.
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
;
}
public
List
<
ReadListener
>
getReadListenerList
()
{
return
readListenerList
;
}
public
void
setReadListenerList
(
List
<
ReadListener
>
readListenerList
)
{
this
.
readListenerList
=
readListenerList
;
}
public
Map
<
ConverterKey
,
Converter
>
getConverterMap
()
{
return
converterMap
;
}
public
void
setConverterMap
(
Map
<
ConverterKey
,
Converter
>
converterMap
)
{
this
.
converterMap
=
converterMap
;
}
public
ExcelReadHeadProperty
getExcelReadHeadProperty
()
{
return
excelReadHeadProperty
;
}
public
void
setExcelReadHeadProperty
(
ExcelReadHeadProperty
excelReadHeadProperty
)
{
this
.
excelReadHeadProperty
=
excelReadHeadProperty
;
}
public
Integer
getHeadRowNumber
()
{
return
headRowNumber
;
}
public
void
setHeadRowNumber
(
Integer
headRowNumber
)
{
this
.
headRowNumber
=
headRowNumber
;
}
@Override
public
List
<
ReadListener
>
readListenerList
()
{
return
getReadListenerList
();
}
@Override
public
Map
<
ConverterKey
,
Converter
>
converterMap
()
{
return
getConverterMap
();
}
@Override
public
ExcelReadHeadProperty
excelReadHeadProperty
()
{
return
getExcelReadHeadProperty
();
}
}
src/main/java/com/alibaba/excel/read/metadata/holder/ReadHolder.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.read.metadata.holder
;
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.Holder
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.metadata.property.ExcelReadHeadProperty
;
/**
*
* Get the corresponding Holder
*
* @author zhuangjiaju
**/
public
interface
ReadHolder
extends
Holder
{
/**
* 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
>
converterMap
();
/**
* What 'ExcelReadHeadProperty' does the currently operated cell need to execute
*
* @return
*/
ExcelReadHeadProperty
excelReadHeadProperty
();
}
src/main/java/com/alibaba/excel/read/metadata/holder/ReadRowHolder.java
0 → 100644
浏览文件 @
e2bb1999
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
;
/**
* sheet holder
*
* @author zhuangjiaju
*/
public
class
ReadRowHolder
implements
Holder
{
/***
* poi row
*/
private
Row
row
;
/**
* Some global variables
*/
private
GlobalConfiguration
globalConfiguration
;
/**
* The result of the previous listener
*/
private
Object
currentRowAnalysisResult
;
/**
* Data starting from the first row after the head is removed.Start form 1
*/
private
int
relativeRowIndex
;
public
Row
getRow
()
{
return
row
;
}
public
void
setRow
(
Row
row
)
{
this
.
row
=
row
;
}
public
GlobalConfiguration
getGlobalConfiguration
()
{
return
globalConfiguration
;
}
public
void
setGlobalConfiguration
(
GlobalConfiguration
globalConfiguration
)
{
this
.
globalConfiguration
=
globalConfiguration
;
}
public
Object
getCurrentRowAnalysisResult
()
{
return
currentRowAnalysisResult
;
}
public
void
setCurrentRowAnalysisResult
(
Object
currentRowAnalysisResult
)
{
this
.
currentRowAnalysisResult
=
currentRowAnalysisResult
;
}
public
int
getRelativeRowIndex
()
{
return
relativeRowIndex
;
}
public
void
setRelativeRowIndex
(
int
relativeRowIndex
)
{
this
.
relativeRowIndex
=
relativeRowIndex
;
}
@Override
public
HolderEnum
holderType
()
{
return
HolderEnum
.
ROW
;
}
@Override
public
boolean
isNew
()
{
return
true
;
}
@Override
public
GlobalConfiguration
globalConfiguration
()
{
return
getGlobalConfiguration
();
}
}
src/main/java/com/alibaba/excel/read/metadata/holder/SheetHolder.java
0 → 100644
浏览文件 @
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/
metadata/holder/write
/TableHolder.java
→
src/main/java/com/alibaba/excel/
read/metadata/holder
/TableHolder.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.
metadata.holder.write
;
package
com.alibaba.excel.
read.metadata.holder
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
...
...
@@ -10,8 +10,9 @@ 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.
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
;
...
...
@@ -21,7 +22,7 @@ import com.alibaba.excel.write.style.RowCellStyleStrategy;
*
* @author zhuangjiaju
*/
public
class
TableHolder
extends
AbstractWriteConfiguration
{
public
class
ReadTableHolder
extends
AbstractReadHolder
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
TableHolder
.
class
);
/***
...
...
@@ -35,10 +36,10 @@ public class TableHolder extends AbstractWriteConfiguration {
/**
* current table param
*/
private
com
.
alibaba
.
excel
.
metadata
.
Table
tableParam
;
private
Table
tableParam
;
public
static
TableHolder
buildWriteWorkTableHolder
(
com
.
alibaba
.
excel
.
metadata
.
Table
table
,
SheetHolder
sheetHolder
,
WorkbookHolder
workbookHolder
)
{
public
static
TableHolder
buildWriteWorkTableHolder
(
Table
table
,
SheetHolder
sheetHolder
,
WorkbookHolder
workbookHolder
)
{
TableHolder
tableHolder
=
new
TableHolder
();
tableHolder
.
setTableParam
(
table
);
tableHolder
.
setParentSheet
(
sheetHolder
);
...
...
@@ -95,7 +96,7 @@ public class TableHolder extends AbstractWriteConfiguration {
* Compatible with old code
*/
@Deprecated
private
static
void
compatibleOldCode
(
com
.
alibaba
.
excel
.
metadata
.
Table
table
)
{
private
static
void
compatibleOldCode
(
Table
table
)
{
if
(
table
.
getTableStyle
()
!=
null
)
{
final
TableStyle
tableStyle
=
table
.
getTableStyle
();
if
(
table
.
getCustomWriteHandlerList
()
==
null
)
{
...
...
src/main/java/com/alibaba/excel/
metadata/holder/write
/WorkbookHolder.java
→
src/main/java/com/alibaba/excel/
read/metadata/holder
/WorkbookHolder.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.
metadata.holder.write
;
package
com.alibaba.excel.
read.metadata.holder
;
import
java.io.File
;
import
java.io.InputStream
;
...
...
@@ -17,10 +17,12 @@ 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
;
...
...
@@ -30,35 +32,25 @@ import com.alibaba.excel.write.handler.WriteHandler;
*
* @author zhuangjiaju
*/
public
class
WorkbookHolder
extends
AbstractWriteConfiguration
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
WorkbookHolder
.
class
);
public
class
ReadWorkbookHolder
extends
AbstractReadHolder
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
Read
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
;
private
ReadWorkbook
readWorkbook
;
/**
* Final output stream
*/
private
OutputStream
outputStream
;
/**
* <li>write: Template input stream
* <li>read: Read InputStream
* Read InputStream
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
private
InputStream
inputStream
;
/**
* <li>write: Template file
* <li>read: Read file
* Read file
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
...
...
@@ -81,12 +73,6 @@ public class WorkbookHolder extends AbstractWriteConfiguration {
* 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'
...
...
@@ -115,7 +101,7 @@ public class WorkbookHolder extends AbstractWriteConfiguration {
@Deprecated
private
com
.
alibaba
.
excel
.
event
.
WriteHandler
writeHandler
;
public
static
WorkbookHolder
buildWriteWorkbookHolder
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbook
)
{
public
static
WorkbookHolder
buildWriteWorkbookHolder
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Workbook
workbook
)
{
WorkbookHolder
workbookHolder
=
buildBaseWorkbookHolder
(
workbook
);
workbookHolder
.
setNewInitialization
(
Boolean
.
TRUE
);
if
(
workbook
.
getNeedHead
()
==
null
)
{
...
...
@@ -149,7 +135,7 @@ public class WorkbookHolder extends AbstractWriteConfiguration {
return
workbookHolder
;
}
public
static
WorkbookHolder
buildReadWorkbookHolder
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbook
)
{
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!"
);
...
...
@@ -175,7 +161,7 @@ public class WorkbookHolder extends AbstractWriteConfiguration {
return
workbookHolder
;
}
private
static
WorkbookHolder
buildBaseWorkbookHolder
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbook
)
{
private
static
WorkbookHolder
buildBaseWorkbookHolder
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Workbook
workbook
)
{
WorkbookHolder
workbookHolder
=
new
WorkbookHolder
();
workbookHolder
.
setUse1904windowing
(
workbook
.
getUse1904windowing
());
workbookHolder
.
setWorkbookParam
(
workbook
);
...
...
@@ -218,11 +204,11 @@ public class WorkbookHolder extends AbstractWriteConfiguration {
this
.
hasBeenInitializedSheet
=
hasBeenInitializedSheet
;
}
public
com
.
alibaba
.
excel
.
metadata
.
Workbook
getWorkbookParam
()
{
public
com
.
alibaba
.
excel
.
write
.
metadata
.
Workbook
getWorkbookParam
()
{
return
workbookParam
;
}
public
void
setWorkbookParam
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbookParam
)
{
public
void
setWorkbookParam
(
com
.
alibaba
.
excel
.
write
.
metadata
.
Workbook
workbookParam
)
{
this
.
workbookParam
=
workbookParam
;
}
...
...
@@ -321,4 +307,9 @@ public class WorkbookHolder extends AbstractWriteConfiguration {
public
void
setReadTempFile
(
File
readTempFile
)
{
this
.
readTempFile
=
readTempFile
;
}
@Override
public
HolderEnum
holderType
()
{
return
HolderEnum
.
WORKBOOK
;
}
}
src/main/java/com/alibaba/excel/read/metadata/property/ExcelReadHeadProperty.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.read.metadata.property
;
import
java.util.List
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
/**
* Define the header attribute of excel
*
* @author jipengfei
*/
public
class
ExcelReadHeadProperty
extends
ExcelHeadProperty
{
public
ExcelReadHeadProperty
(
Class
headClazz
,
List
<
List
<
String
>>
head
,
Boolean
convertAllFiled
)
{
super
(
headClazz
,
head
,
convertAllFiled
);
}
}
src/main/java/com/alibaba/excel/util/WorkBookUtil.java
浏览文件 @
e2bb1999
...
...
@@ -13,7 +13,7 @@ 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.
metadata.holder.write
.WorkbookHolder
;
import
com.alibaba.excel.
write.metadata.holder
.WorkbookHolder
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
/**
...
...
@@ -42,7 +42,7 @@ public class WorkBookUtil {
return
new
HSSFWorkbook
();
}
public
static
Sheet
createSheet
(
Workbook
workbook
,
com
.
alibaba
.
excel
.
metadata
.
Sheet
sheet
)
{
public
static
Sheet
createSheet
(
Workbook
workbook
,
com
.
alibaba
.
excel
.
write
.
metadata
.
Sheet
sheet
)
{
return
workbook
.
createSheet
(
sheet
.
getSheetName
()
!=
null
?
sheet
.
getSheetName
()
:
sheet
.
getSheetNo
()
+
""
);
}
...
...
src/main/java/com/alibaba/excel/write/ExcelBuilder.java
浏览文件 @
e2bb1999
...
...
@@ -2,8 +2,8 @@ package com.alibaba.excel.write;
import
java.util.List
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.metadata.Table
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Table
;
import
com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy
;
/**
...
...
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
浏览文件 @
e2bb1999
...
...
@@ -15,9 +15,9 @@ import com.alibaba.excel.converters.Converter;
import
com.alibaba.excel.exception.ExcelDataConvertException
;
import
com.alibaba.excel.metadata.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.metadata.Table
;
import
com.alibaba.excel.
metadata.holder.write
.WriteConfiguration
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Table
;
import
com.alibaba.excel.
write.metadata.holder
.WriteConfiguration
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.util.CollectionUtils
;
import
com.alibaba.excel.util.POITempFile
;
...
...
@@ -25,6 +25,7 @@ import com.alibaba.excel.util.WorkBookUtil;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.alibaba.excel.write.handler.RowWriteHandler
;
import
com.alibaba.excel.write.handler.WriteHandler
;
import
com.alibaba.excel.write.metadata.Workbook
;
import
net.sf.cglib.beans.BeanMap
;
...
...
@@ -35,7 +36,7 @@ public class ExcelBuilderImpl implements ExcelBuilder {
private
WriteContext
context
;
public
ExcelBuilderImpl
(
com
.
alibaba
.
excel
.
metadata
.
Workbook
workbook
)
{
public
ExcelBuilderImpl
(
Workbook
workbook
)
{
// 初始化时候创建临时缓存目录,用于规避POI在并发写bug
POITempFile
.
createPOIFilesDirectory
();
context
=
new
WriteContextImpl
(
workbook
);
...
...
src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java
浏览文件 @
e2bb1999
...
...
@@ -13,7 +13,7 @@ import java.util.List;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.exception.ExcelGenerateException
;
import
com.alibaba.excel.metadata.Workbook
;
import
com.alibaba.excel.
write.
metadata.Workbook
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.handler.WriteHandler
;
...
...
src/main/java/com/alibaba/excel/write/builder/ExcelWriterSheetBuilder.java
浏览文件 @
e2bb1999
...
...
@@ -5,7 +5,7 @@ import java.util.HashMap;
import
java.util.List
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
import
com.alibaba.excel.write.handler.WriteHandler
;
/**
...
...
src/main/java/com/alibaba/excel/write/builder/ExcelWriterTableBuilder.java
浏览文件 @
e2bb1999
...
...
@@ -5,7 +5,7 @@ import java.util.HashMap;
import
java.util.List
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.metadata.Table
;
import
com.alibaba.excel.
write.
metadata.Table
;
import
com.alibaba.excel.write.handler.WriteHandler
;
/**
...
...
src/main/java/com/alibaba/excel/write/handler/CellWriteHandler.java
浏览文件 @
e2bb1999
...
...
@@ -4,8 +4,8 @@ import org.apache.poi.ss.usermodel.Cell;
import
org.apache.poi.ss.usermodel.Row
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.
metadata.holder.write
.SheetHolder
;
import
com.alibaba.excel.
metadata.holder.write
.TableHolder
;
import
com.alibaba.excel.
write.metadata.holder
.SheetHolder
;
import
com.alibaba.excel.
write.metadata.holder
.TableHolder
;
import
com.sun.istack.internal.Nullable
;
/**
...
...
src/main/java/com/alibaba/excel/write/handler/RowWriteHandler.java
浏览文件 @
e2bb1999
...
...
@@ -2,8 +2,8 @@ package com.alibaba.excel.write.handler;
import
org.apache.poi.ss.usermodel.Row
;
import
com.alibaba.excel.
metadata.holder.write
.SheetHolder
;
import
com.alibaba.excel.
metadata.holder.write
.TableHolder
;
import
com.alibaba.excel.
write.metadata.holder
.SheetHolder
;
import
com.alibaba.excel.
write.metadata.holder
.TableHolder
;
import
com.sun.istack.internal.Nullable
;
/**
...
...
src/main/java/com/alibaba/excel/write/handler/SheetWriteHandler.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.write.handler
;
import
com.alibaba.excel.
metadata.holder.write
.SheetHolder
;
import
com.alibaba.excel.
metadata.holder.write
.WorkbookHolder
;
import
com.alibaba.excel.
write.metadata.holder
.SheetHolder
;
import
com.alibaba.excel.
write.metadata.holder
.WorkbookHolder
;
/**
* intercepts handle sheet creation
...
...
src/main/java/com/alibaba/excel/write/handler/WorkbookWriteHandler.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.write.handler
;
import
com.alibaba.excel.
metadata.holder.write
.WorkbookHolder
;
import
com.alibaba.excel.
write.metadata.holder
.WorkbookHolder
;
/**
* intercepts handle Workbook creation
...
...
src/main/java/com/alibaba/excel/write/merge/AbstractMergeStrategy.java
浏览文件 @
e2bb1999
...
...
@@ -5,8 +5,8 @@ import org.apache.poi.ss.usermodel.Row;
import
org.apache.poi.ss.usermodel.Sheet
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.
metadata.holder.write
.SheetHolder
;
import
com.alibaba.excel.
metadata.holder.write
.TableHolder
;
import
com.alibaba.excel.
write.metadata.holder
.SheetHolder
;
import
com.alibaba.excel.
write.metadata.holder
.TableHolder
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
/**
...
...
src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.write.metadata
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.alibaba.excel.metadata.BasicParameter
;
import
com.alibaba.excel.write.handler.WriteHandler
;
/**
* Write basic parameter
*
* @author zhuangjiaju
**/
public
class
WriteBasicParameter
extends
BasicParameter
{
/**
* Writes the head relative to the existing contents of the sheet. Indexes are zero-based.
*/
private
Integer
relativeHeadRowIndex
;
/**
* Need Head
*/
private
Boolean
needHead
;
/**
* Custom type handler override the default
*/
private
List
<
WriteHandler
>
customWriteHandlerList
=
new
ArrayList
<
WriteHandler
>();
public
Integer
getRelativeHeadRowIndex
()
{
return
relativeHeadRowIndex
;
}
public
void
setRelativeHeadRowIndex
(
Integer
relativeHeadRowIndex
)
{
this
.
relativeHeadRowIndex
=
relativeHeadRowIndex
;
}
public
Boolean
getNeedHead
()
{
return
needHead
;
}
public
void
setNeedHead
(
Boolean
needHead
)
{
this
.
needHead
=
needHead
;
}
public
List
<
WriteHandler
>
getCustomWriteHandlerList
()
{
return
customWriteHandlerList
;
}
public
void
setCustomWriteHandlerList
(
List
<
WriteHandler
>
customWriteHandlerList
)
{
this
.
customWriteHandlerList
=
customWriteHandlerList
;
}
}
src/main/java/com/alibaba/excel/write/metadata/WriteSheet.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.write.metadata
;
import
java.util.HashMap
;
import
java.util.Map
;
import
com.alibaba.excel.metadata.TableStyle
;
import
com.alibaba.excel.write.style.RowCellStyleStrategy
;
import
com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy
;
/**
* Write sheet
*
* @author jipengfei
*/
public
class
WriteSheet
extends
WriteBasicParameter
{
/**
* Starting from 0
*/
private
Integer
sheetNo
;
/**
* sheet name
*/
private
String
sheetName
;
/**
* column with
*
* @deprecated please use {@link SimpleColumnWidthStyleStrategy}
*/
@Deprecated
private
Map
<
Integer
,
Integer
>
columnWidthMap
=
new
HashMap
<
Integer
,
Integer
>();
/**
*
* @deprecated please use{@link RowCellStyleStrategy}
*/
@Deprecated
private
TableStyle
tableStyle
;
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
Map
<
Integer
,
Integer
>
getColumnWidthMap
()
{
return
columnWidthMap
;
}
public
void
setColumnWidthMap
(
Map
<
Integer
,
Integer
>
columnWidthMap
)
{
this
.
columnWidthMap
=
columnWidthMap
;
}
public
TableStyle
getTableStyle
()
{
return
tableStyle
;
}
public
void
setTableStyle
(
TableStyle
tableStyle
)
{
this
.
tableStyle
=
tableStyle
;
}
}
src/main/java/com/alibaba/excel/write/metadata/WriteTable.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.write.metadata
;
import
com.alibaba.excel.metadata.TableStyle
;
import
com.alibaba.excel.write.style.RowCellStyleStrategy
;
/**
* table
*
* @author jipengfei
*/
public
class
WriteTable
extends
WriteBasicParameter
{
/**
* Starting from 0
*/
private
Integer
tableNo
;
/**
*
* @deprecated please use{@link RowCellStyleStrategy}
*/
@Deprecated
private
TableStyle
tableStyle
;
public
Integer
getTableNo
()
{
return
tableNo
;
}
public
void
setTableNo
(
Integer
tableNo
)
{
this
.
tableNo
=
tableNo
;
}
public
TableStyle
getTableStyle
()
{
return
tableStyle
;
}
public
void
setTableStyle
(
TableStyle
tableStyle
)
{
this
.
tableStyle
=
tableStyle
;
}
}
src/main/java/com/alibaba/excel/
metadata/
Workbook.java
→
src/main/java/com/alibaba/excel/
write/metadata/Write
Workbook.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.metadata
;
package
com.alibaba.excel.
write.
metadata
;
import
java.io.File
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
com.alibaba.excel.cache.ReadCache
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.handler.WriteHandler
;
...
...
@@ -15,14 +12,13 @@ import com.alibaba.excel.write.handler.WriteHandler;
*
* @author zhuangjiaju
**/
public
class
W
orkbook
extends
BasicParameter
{
public
class
W
riteWorkbook
extends
Write
BasicParameter
{
/**
* Excel type
*/
private
ExcelTypeEnum
excelType
;
/**
*
Read f
inal output stream
*
F
inal output stream
*/
private
OutputStream
outputStream
;
/**
...
...
@@ -31,7 +27,7 @@ public class Workbook extends BasicParameter {
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
private
InputStream
i
nputStream
;
private
InputStream
templateI
nputStream
;
/**
* <li>write: Template file
...
...
@@ -39,30 +35,19 @@ public class Workbook extends BasicParameter {
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
private
File
f
ile
;
private
File
templateF
ile
;
/**
* Default true
*/
private
Boolean
autoCloseStream
;
/**
* 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}
* Mandatory use 'inputStream' .Default is false
*/
private
ReadCache
readCache
;
private
Boolean
mandatoryUseInputStream
;
/**
* true if date uses 1904 windowing, or false if using 1900 date windowing.
*
* @return
*/
private
Boolean
use1904windowing
;
/**
* 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.
* The default is all excel objects.Default is true.
* <li>if true , you can use {@link com.alibaba.excel.annotation.ExcelIgnore} ignore a field.
* <li>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.
*/
...
...
@@ -92,28 +77,20 @@ public class Workbook extends BasicParameter {
this
.
outputStream
=
outputStream
;
}
public
InputStream
getInputStream
()
{
return
i
nputStream
;
public
InputStream
get
Template
InputStream
()
{
return
templateI
nputStream
;
}
public
void
set
InputStream
(
InputStream
i
nputStream
)
{
this
.
inputStream
=
i
nputStream
;
public
void
set
TemplateInputStream
(
InputStream
templateI
nputStream
)
{
this
.
templateInputStream
=
templateI
nputStream
;
}
public
File
getFile
()
{
return
f
ile
;
public
File
get
Template
File
()
{
return
templateF
ile
;
}
public
void
setFile
(
File
file
)
{
this
.
file
=
file
;
}
public
com
.
alibaba
.
excel
.
event
.
WriteHandler
getWriteHandler
()
{
return
writeHandler
;
}
public
void
setWriteHandler
(
com
.
alibaba
.
excel
.
event
.
WriteHandler
writeHandler
)
{
this
.
writeHandler
=
writeHandler
;
public
void
setTemplateFile
(
File
templateFile
)
{
this
.
templateFile
=
templateFile
;
}
public
Boolean
getAutoCloseStream
()
{
...
...
@@ -124,35 +101,27 @@ public class Workbook extends BasicParameter {
this
.
autoCloseStream
=
autoCloseStream
;
}
public
Boolean
getConvertAllFiled
()
{
return
convertAllFiled
;
}
public
void
setConvertAllFiled
(
Boolean
convertAllFiled
)
{
this
.
convertAllFiled
=
convertAllFiled
;
}
public
Object
getReadCustomObject
()
{
return
readCustomObject
;
public
Boolean
getMandatoryUseInputStream
()
{
return
mandatoryUseInputStream
;
}
public
void
set
ReadCustomObject
(
Object
readCustomObject
)
{
this
.
readCustomObject
=
readCustomObject
;
public
void
set
MandatoryUseInputStream
(
Boolean
mandatoryUseInputStream
)
{
this
.
mandatoryUseInputStream
=
mandatoryUseInputStream
;
}
public
ReadCache
getReadCache
()
{
return
readCache
;
public
Boolean
getConvertAllFiled
()
{
return
convertAllFiled
;
}
public
void
set
ReadCache
(
ReadCache
readCache
)
{
this
.
readCache
=
readCache
;
public
void
set
ConvertAllFiled
(
Boolean
convertAllFiled
)
{
this
.
convertAllFiled
=
convertAllFiled
;
}
public
Boolean
getUse1904windowing
()
{
return
use1904windowing
;
public
com
.
alibaba
.
excel
.
event
.
WriteHandler
getWriteHandler
()
{
return
writeHandler
;
}
public
void
set
Use1904windowing
(
Boolean
use1904windowing
)
{
this
.
use1904windowing
=
use1904windowing
;
public
void
set
WriteHandler
(
com
.
alibaba
.
excel
.
event
.
WriteHandler
writeHandler
)
{
this
.
writeHandler
=
writeHandler
;
}
}
src/main/java/com/alibaba/excel/
metadata/holder/write/AbstractWriteConfiguration
.java
→
src/main/java/com/alibaba/excel/
write/metadata/holder/AbstractWriteHolder
.java
浏览文件 @
e2bb1999
此差异已折叠。
点击以展开。
src/main/java/com/alibaba/excel/write/metadata/holder/UTils.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.write.metadata.holder
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
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.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.util.StringUtils
;
/**
* TODO
*
* @author 罗成
**/
public
class
UTils
{
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
;
}
}
src/main/java/com/alibaba/excel/
metadata/holder/write/WriteConfiguration
.java
→
src/main/java/com/alibaba/excel/
write/metadata/holder/WriteHolder
.java
浏览文件 @
e2bb1999
package
com.alibaba.excel.
metadata.holder.write
;
package
com.alibaba.excel.
write.metadata.holder
;
import
java.util.List
;
import
java.util.Map
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.metadata.
property.ExcelHeadProperty
;
import
com.alibaba.excel.metadata.
Holder
;
import
com.alibaba.excel.write.handler.WriteHandler
;
import
com.alibaba.excel.write.property.ExcelWriteHeadProperty
;
/**
*
* Get the corresponding
configuration
* Get the corresponding
Holder
*
* @author zhuangjiaju
**/
public
interface
WriteConfiguration
{
public
interface
WriteHolder
extends
Holder
{
/**
* What 'ExcelWriteHeadProperty' does the currently operated cell need to execute
*/
ExcelWriteHeadProperty
excelWriteHeadProperty
();
/**
* What handler does the currently operated cell need to execute
...
...
@@ -27,7 +32,7 @@ public interface WriteConfiguration {
*
* @return
*/
Map
<
Class
,
Converter
>
writeC
onverterMap
();
Map
<
Class
,
Converter
>
c
onverterMap
();
/**
* Whether a header is required for the currently operated cell
...
...
@@ -38,19 +43,8 @@ public interface WriteConfiguration {
/**
* Writes the head relative to the existing contents of the sheet. Indexes are zero-based.
*/
int
writeRelativeHeadRowIndex
();
/**
* What 'ExcelHeadProperty' does the currently operated cell need to execute
*/
ExcelHeadProperty
excelHeadProperty
();
/**
*
* Record whether it's new or from cache
*
* @return
*/
boolean
isNew
();
int
relativeHeadRowIndex
();
}
src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.write.metadata.holder
;
import
java.util.HashMap
;
import
java.util.Map
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
com.alibaba.excel.enums.HolderEnum
;
import
com.alibaba.excel.read.metadata.holder.TableHolder
;
import
com.alibaba.excel.write.metadata.WriteSheet
;
/**
* sheet holder
*
* @author zhuangjiaju
*/
public
class
WriteSheetHolder
extends
AbstractWriteHolder
{
/**
* current param
*/
private
WriteSheet
writeSheet
;
/***
* poi sheet
*/
private
Sheet
sheet
;
/***
* sheetNo
*/
private
Integer
sheetNo
;
/***
* sheetName
*/
private
String
sheetName
;
/***
* poi sheet
*/
private
WriteWorkbookHolder
parentWorkBook
;
/***
* has been initialized table
*/
private
Map
<
Integer
,
TableHolder
>
hasBeenInitializedTable
;
public
WriteSheetHolder
(
WriteSheet
writeSheet
,
WriteWorkbookHolder
writeWorkbookHolder
)
{
super
(
writeSheet
,
writeWorkbookHolder
,
writeWorkbookHolder
.
getWriteWorkbook
().
getConvertAllFiled
());
this
.
writeSheet
=
writeSheet
;
this
.
sheetNo
=
writeSheet
.
getSheetNo
();
if
(
writeSheet
.
getSheetName
()
==
null
)
{
this
.
sheetName
=
writeSheet
.
getSheetNo
().
toString
();
}
else
{
this
.
sheetName
=
writeSheet
.
getSheetName
();
}
this
.
parentWorkBook
=
writeWorkbookHolder
;
this
.
hasBeenInitializedTable
=
new
HashMap
<
Integer
,
TableHolder
>();
}
public
WriteSheet
getWriteSheet
()
{
return
writeSheet
;
}
public
void
setWriteSheet
(
WriteSheet
writeSheet
)
{
this
.
writeSheet
=
writeSheet
;
}
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
WriteWorkbookHolder
getParentWorkBook
()
{
return
parentWorkBook
;
}
public
void
setParentWorkBook
(
WriteWorkbookHolder
parentWorkBook
)
{
this
.
parentWorkBook
=
parentWorkBook
;
}
public
Map
<
Integer
,
TableHolder
>
getHasBeenInitializedTable
()
{
return
hasBeenInitializedTable
;
}
public
void
setHasBeenInitializedTable
(
Map
<
Integer
,
TableHolder
>
hasBeenInitializedTable
)
{
this
.
hasBeenInitializedTable
=
hasBeenInitializedTable
;
}
@Override
public
HolderEnum
holderType
()
{
return
HolderEnum
.
SHEET
;
}
}
src/main/java/com/alibaba/excel/write/metadata/holder/WriteTableHolder.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.write.metadata.holder
;
import
com.alibaba.excel.enums.HolderEnum
;
import
com.alibaba.excel.write.metadata.WriteTable
;
/**
* sheet holder
*
* @author zhuangjiaju
*/
public
class
WriteTableHolder
extends
AbstractWriteHolder
{
/***
* poi sheet
*/
private
WriteSheetHolder
parentSheet
;
/***
* tableNo
*/
private
Integer
tableNo
;
/**
* current table param
*/
private
WriteTable
writeTable
;
public
WriteTableHolder
(
WriteTable
writeTable
,
WriteSheetHolder
writeSheetHolder
,
WriteWorkbookHolder
writeWorkbookHolder
)
{
super
(
writeTable
,
writeSheetHolder
,
writeWorkbookHolder
.
getWriteWorkbook
().
getConvertAllFiled
());
this
.
parentSheet
=
writeSheetHolder
;
this
.
tableNo
=
writeTable
.
getTableNo
();
this
.
writeTable
=
writeTable
;
}
public
WriteSheetHolder
getParentSheet
()
{
return
parentSheet
;
}
public
void
setParentSheet
(
WriteSheetHolder
parentSheet
)
{
this
.
parentSheet
=
parentSheet
;
}
public
Integer
getTableNo
()
{
return
tableNo
;
}
public
void
setTableNo
(
Integer
tableNo
)
{
this
.
tableNo
=
tableNo
;
}
public
WriteTable
getWriteTable
()
{
return
writeTable
;
}
public
void
setWriteTable
(
WriteTable
writeTable
)
{
this
.
writeTable
=
writeTable
;
}
@Override
public
HolderEnum
holderType
()
{
return
HolderEnum
.
TABLE
;
}
}
src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.write.metadata.holder
;
import
java.io.File
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.util.HashMap
;
import
java.util.Map
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
com.alibaba.excel.enums.HolderEnum
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.metadata.WriteWorkbook
;
/**
* Workbook holder
*
* @author zhuangjiaju
*/
public
class
WriteWorkbookHolder
extends
AbstractWriteHolder
{
/***
* poi Workbook
*/
private
Workbook
workbook
;
/**
* current param
*/
private
WriteWorkbook
writeWorkbook
;
/**
* Final output stream
*/
private
OutputStream
outputStream
;
/**
* Template input stream
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
private
InputStream
templateInputStream
;
/**
* Template file
* <p>
* If 'inputStream' and 'file' all not empty,file first
*/
private
File
templateFile
;
/**
* Default true
*/
private
Boolean
autoCloseStream
;
/**
* Excel type
*/
private
ExcelTypeEnum
excelType
;
/**
* Mandatory use 'inputStream'
*/
private
Boolean
mandatoryUseInputStream
;
/**
* prevent duplicate creation of sheet objects
*/
private
Map
<
Integer
,
WriteSheetHolder
>
hasBeenInitializedSheet
;
public
WriteWorkbookHolder
(
WriteWorkbook
writeWorkbook
)
{
super
(
writeWorkbook
,
null
,
writeWorkbook
.
getConvertAllFiled
());
this
.
writeWorkbook
=
writeWorkbook
;
this
.
outputStream
=
writeWorkbook
.
getOutputStream
();
this
.
templateInputStream
=
writeWorkbook
.
getTemplateInputStream
();
this
.
templateFile
=
writeWorkbook
.
getTemplateFile
();
if
(
writeWorkbook
.
getAutoCloseStream
()
==
null
)
{
this
.
autoCloseStream
=
Boolean
.
TRUE
;
}
else
{
this
.
autoCloseStream
=
writeWorkbook
.
getAutoCloseStream
();
}
this
.
excelType
=
writeWorkbook
.
getExcelType
();
if
(
writeWorkbook
.
getMandatoryUseInputStream
()
==
null
)
{
this
.
mandatoryUseInputStream
=
Boolean
.
FALSE
;
}
else
{
this
.
mandatoryUseInputStream
=
writeWorkbook
.
getMandatoryUseInputStream
();
}
this
.
hasBeenInitializedSheet
=
new
HashMap
<
Integer
,
WriteSheetHolder
>();
}
public
Workbook
getWorkbook
()
{
return
workbook
;
}
public
void
setWorkbook
(
Workbook
workbook
)
{
this
.
workbook
=
workbook
;
}
public
Map
<
Integer
,
WriteSheetHolder
>
getHasBeenInitializedSheet
()
{
return
hasBeenInitializedSheet
;
}
public
void
setHasBeenInitializedSheet
(
Map
<
Integer
,
WriteSheetHolder
>
hasBeenInitializedSheet
)
{
this
.
hasBeenInitializedSheet
=
hasBeenInitializedSheet
;
}
public
WriteWorkbook
getWriteWorkbook
()
{
return
writeWorkbook
;
}
public
void
setWriteWorkbook
(
WriteWorkbook
writeWorkbook
)
{
this
.
writeWorkbook
=
writeWorkbook
;
}
public
OutputStream
getOutputStream
()
{
return
outputStream
;
}
public
void
setOutputStream
(
OutputStream
outputStream
)
{
this
.
outputStream
=
outputStream
;
}
public
InputStream
getTemplateInputStream
()
{
return
templateInputStream
;
}
public
void
setTemplateInputStream
(
InputStream
templateInputStream
)
{
this
.
templateInputStream
=
templateInputStream
;
}
public
File
getTemplateFile
()
{
return
templateFile
;
}
public
void
setTemplateFile
(
File
templateFile
)
{
this
.
templateFile
=
templateFile
;
}
public
Boolean
getAutoCloseStream
()
{
return
autoCloseStream
;
}
public
void
setAutoCloseStream
(
Boolean
autoCloseStream
)
{
this
.
autoCloseStream
=
autoCloseStream
;
}
public
ExcelTypeEnum
getExcelType
()
{
return
excelType
;
}
public
void
setExcelType
(
ExcelTypeEnum
excelType
)
{
this
.
excelType
=
excelType
;
}
public
Boolean
getMandatoryUseInputStream
()
{
return
mandatoryUseInputStream
;
}
public
void
setMandatoryUseInputStream
(
Boolean
mandatoryUseInputStream
)
{
this
.
mandatoryUseInputStream
=
mandatoryUseInputStream
;
}
@Override
public
HolderEnum
holderType
()
{
return
HolderEnum
.
WORKBOOK
;
}
}
src/main/java/com/alibaba/excel/write/property/ExcelWriteHeadProperty.java
0 → 100644
浏览文件 @
e2bb1999
package
com.alibaba.excel.write.property
;
import
java.lang.reflect.Field
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
com.alibaba.excel.annotation.write.style.ColumnWidth
;
import
com.alibaba.excel.annotation.write.style.ContentRowHeight
;
import
com.alibaba.excel.annotation.write.style.ContentStyle
;
import
com.alibaba.excel.annotation.write.style.HeadRowHeight
;
import
com.alibaba.excel.annotation.write.style.HeadStyle
;
import
com.alibaba.excel.enums.HeadKindEnum
;
import
com.alibaba.excel.metadata.CellRange
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.metadata.property.CellStyleProperty
;
import
com.alibaba.excel.metadata.property.ColumnWidthProperty
;
import
com.alibaba.excel.metadata.property.ExcelContentProperty
;
import
com.alibaba.excel.metadata.property.ExcelHeadProperty
;
import
com.alibaba.excel.metadata.property.RowHeightProperty
;
/**
* Define the header attribute of excel
*
* @author jipengfei
*/
public
class
ExcelWriteHeadProperty
extends
ExcelHeadProperty
{
private
RowHeightProperty
headRowHeightProperty
;
private
RowHeightProperty
contentRowHeightProperty
;
public
ExcelWriteHeadProperty
(
Class
headClazz
,
List
<
List
<
String
>>
head
,
Boolean
convertAllFiled
)
{
super
(
headClazz
,
head
,
convertAllFiled
);
if
(
getHeadKind
()
!=
HeadKindEnum
.
CLASS
)
{
return
;
}
this
.
headRowHeightProperty
=
RowHeightProperty
.
build
((
HeadRowHeight
)
headClazz
.
getAnnotation
(
HeadRowHeight
.
class
));
this
.
contentRowHeightProperty
=
RowHeightProperty
.
build
((
ContentRowHeight
)
headClazz
.
getAnnotation
(
ContentRowHeight
.
class
));
HeadStyle
parentHeadStyle
=
(
HeadStyle
)
headClazz
.
getAnnotation
(
HeadStyle
.
class
);
ContentStyle
parentContentStyle
=
(
ContentStyle
)
headClazz
.
getAnnotation
(
ContentStyle
.
class
);
ColumnWidth
parentColumnWidth
=
(
ColumnWidth
)
headClazz
.
getAnnotation
(
ColumnWidth
.
class
);
for
(
Map
.
Entry
<
Integer
,
ExcelContentProperty
>
entry
:
getContentPropertyMap
().
entrySet
())
{
Integer
index
=
entry
.
getKey
();
ExcelContentProperty
excelContentPropertyData
=
entry
.
getValue
();
Field
field
=
excelContentPropertyData
.
getField
();
Head
headData
=
getHeadMap
().
get
(
index
);
HeadStyle
headStyle
=
field
.
getAnnotation
(
HeadStyle
.
class
);
if
(
headStyle
==
null
)
{
headStyle
=
parentHeadStyle
;
}
headData
.
setCellStyleProperty
(
CellStyleProperty
.
build
(
headStyle
));
ColumnWidth
columnWidth
=
field
.
getAnnotation
(
ColumnWidth
.
class
);
if
(
columnWidth
==
null
)
{
columnWidth
=
parentColumnWidth
;
}
headData
.
setColumnWidthProperty
(
ColumnWidthProperty
.
build
(
columnWidth
));
ContentStyle
contentStyle
=
field
.
getAnnotation
(
ContentStyle
.
class
);
if
(
contentStyle
==
null
)
{
contentStyle
=
parentContentStyle
;
}
excelContentPropertyData
.
setCellStyleProperty
(
CellStyleProperty
.
build
(
contentStyle
));
}
}
public
RowHeightProperty
getHeadRowHeightProperty
()
{
return
headRowHeightProperty
;
}
public
void
setHeadRowHeightProperty
(
RowHeightProperty
headRowHeightProperty
)
{
this
.
headRowHeightProperty
=
headRowHeightProperty
;
}
public
RowHeightProperty
getContentRowHeightProperty
()
{
return
contentRowHeightProperty
;
}
public
void
setContentRowHeightProperty
(
RowHeightProperty
contentRowHeightProperty
)
{
this
.
contentRowHeightProperty
=
contentRowHeightProperty
;
}
/**
* Calculate all cells that need to be merged
*
* @return cells that need to be merged
*/
public
List
<
CellRange
>
headCellRangeList
()
{
List
<
CellRange
>
cellRangeList
=
new
ArrayList
<
CellRange
>();
int
i
=
0
;
for
(
Map
.
Entry
<
Integer
,
Head
>
entry
:
getHeadMap
().
entrySet
())
{
Head
head
=
entry
.
getValue
();
List
<
String
>
columnValues
=
head
.
getHeadNameList
();
for
(
int
j
=
0
;
j
<
columnValues
.
size
();
j
++)
{
int
lastRow
=
getLastRangNum
(
j
,
columnValues
.
get
(
j
),
columnValues
);
int
lastColumn
=
getLastRangNum
(
i
,
columnValues
.
get
(
j
),
head
.
getHeadNameList
());
if
((
lastRow
>
j
||
lastColumn
>
i
)
&&
lastRow
>=
0
&&
lastColumn
>=
0
)
{
cellRangeList
.
add
(
new
CellRange
(
j
,
lastRow
,
i
,
lastColumn
));
}
}
i
++;
}
return
cellRangeList
;
}
/**
* Get the last consecutive string position
*
* @param j
* current value position
* @param value
* value content
* @param values
* values
* @return the last consecutive string position
*/
private
int
getLastRangNum
(
int
j
,
String
value
,
List
<
String
>
values
)
{
if
(
value
==
null
)
{
return
-
1
;
}
if
(
j
>
0
)
{
String
preValue
=
values
.
get
(
j
-
1
);
if
(
value
.
equals
(
preValue
))
{
return
-
1
;
}
}
int
last
=
j
;
for
(
int
i
=
last
+
1
;
i
<
values
.
size
();
i
++)
{
String
current
=
values
.
get
(
i
);
if
(
value
.
equals
(
current
))
{
last
=
i
;
}
else
{
// if i>j && !value.equals(current) Indicates that the continuous range is exceeded
if
(
i
>
j
)
{
break
;
}
}
}
return
last
;
}
}
src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java
浏览文件 @
e2bb1999
...
...
@@ -6,9 +6,9 @@ import org.apache.poi.ss.usermodel.Workbook;
import
com.alibaba.excel.event.NotRepeatExecutor
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.
metadata.holder.write
.SheetHolder
;
import
com.alibaba.excel.
metadata.holder.write
.TableHolder
;
import
com.alibaba.excel.
metadata.holder.write
.WorkbookHolder
;
import
com.alibaba.excel.
write.metadata.holder
.SheetHolder
;
import
com.alibaba.excel.
write.metadata.holder
.TableHolder
;
import
com.alibaba.excel.
write.metadata.holder
.WorkbookHolder
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.alibaba.excel.write.handler.WorkbookWriteHandler
;
...
...
src/main/java/com/alibaba/excel/write/style/column/AbstractColumnWidthStyleStrategy.java
浏览文件 @
e2bb1999
...
...
@@ -6,8 +6,8 @@ import org.apache.poi.ss.usermodel.Sheet;
import
com.alibaba.excel.event.NotRepeatExecutor
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.
metadata.holder.write
.SheetHolder
;
import
com.alibaba.excel.
metadata.holder.write
.TableHolder
;
import
com.alibaba.excel.
write.metadata.holder
.SheetHolder
;
import
com.alibaba.excel.
write.metadata.holder
.TableHolder
;
import
com.alibaba.excel.write.handler.CellWriteHandler
;
import
com.sun.istack.internal.Nullable
;
...
...
src/main/java/com/alibaba/excel/write/style/row/AbstractRowHeightStyleStrategy.java
浏览文件 @
e2bb1999
...
...
@@ -3,8 +3,8 @@ package com.alibaba.excel.write.style.row;
import
org.apache.poi.ss.usermodel.Row
;
import
com.alibaba.excel.event.NotRepeatExecutor
;
import
com.alibaba.excel.
metadata.holder.write
.SheetHolder
;
import
com.alibaba.excel.
metadata.holder.write
.TableHolder
;
import
com.alibaba.excel.
write.metadata.holder
.SheetHolder
;
import
com.alibaba.excel.
write.metadata.holder
.TableHolder
;
import
com.alibaba.excel.write.handler.RowWriteHandler
;
/**
...
...
src/test/java/com/alibaba/easyexcel/test/ReadTest.java
浏览文件 @
e2bb1999
...
...
@@ -6,7 +6,7 @@ import com.alibaba.easyexcel.test.model.ReadModel2;
import
com.alibaba.easyexcel.test.util.FileUtil
;
import
com.alibaba.excel.EasyExcelFactory
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
import
org.junit.Test
;
import
java.io.IOException
;
...
...
src/test/java/com/alibaba/easyexcel/test/WriteTest.java
浏览文件 @
e2bb1999
...
...
@@ -5,8 +5,8 @@ import com.alibaba.easyexcel.test.model.WriteModel;
import
com.alibaba.easyexcel.test.util.FileUtil
;
import
com.alibaba.excel.EasyExcelFactory
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.metadata.Table
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Table
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
org.junit.Test
;
...
...
src/test/java/com/alibaba/easyexcel/test/read/ReadTest.java
浏览文件 @
e2bb1999
...
...
@@ -12,7 +12,7 @@ import com.alibaba.easyexcel.test.model.ReadModel2;
import
com.alibaba.easyexcel.test.util.FileUtil
;
import
com.alibaba.excel.EasyExcelFactory
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
public
class
ReadTest
{
...
...
src/test/java/com/alibaba/easyexcel/test/read/large/LargeData07Test.java
浏览文件 @
e2bb1999
...
...
@@ -6,7 +6,7 @@ import org.slf4j.LoggerFactory;
import
com.alibaba.excel.EasyExcelFactory
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
/**
* Simple data test
...
...
src/test/java/com/alibaba/easyexcel/test/read/simple/SimpleData07Test.java
浏览文件 @
e2bb1999
...
...
@@ -7,7 +7,7 @@ import org.junit.Test;
import
com.alibaba.easyexcel.test.util.FileUtil
;
import
com.alibaba.excel.EasyExcelFactory
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
/**
* Simple data test
...
...
src/test/java/com/alibaba/easyexcel/test/wirte/nohead/NoHeadData07Test.java
浏览文件 @
e2bb1999
...
...
@@ -9,7 +9,7 @@ import com.alibaba.easyexcel.test.util.FileUtil;
import
com.alibaba.easyexcel.test.wirte.order.OrderData
;
import
com.alibaba.excel.EasyExcelFactory
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
/**
* Order data test
...
...
src/test/java/com/alibaba/easyexcel/test/wirte/order/OrderData07Test.java
浏览文件 @
e2bb1999
...
...
@@ -8,7 +8,7 @@ import org.junit.Test;
import
com.alibaba.easyexcel.test.util.FileUtil
;
import
com.alibaba.excel.EasyExcelFactory
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
/**
* Order data test
...
...
src/test/java/com/alibaba/easyexcel/test/wirte/simple/SimpleData07Test.java
浏览文件 @
e2bb1999
...
...
@@ -8,7 +8,7 @@ import org.junit.Test;
import
com.alibaba.easyexcel.test.util.FileUtil
;
import
com.alibaba.excel.EasyExcelFactory
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.
write.
metadata.Sheet
;
/**
* Simple data test
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录