Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
不停的脚步
easyexcel
提交
35558838
E
easyexcel
项目概览
不停的脚步
/
easyexcel
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
easyexcel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
35558838
编写于
12月 24, 2019
作者:
庄家钜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复用String接收日期、数字和excel显示不一致的bug
上级
9c7e0602
变更
35
隐藏空白更改
内联
并排
Showing
35 changed file
with
618 addition
and
647 deletion
+618
-647
pom.xml
pom.xml
+2
-2
src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
...in/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
+9
-0
src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
...n/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
+3
-3
src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java
...baba/excel/analysis/v03/handlers/NumberRecordHandler.java
+7
-6
src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
...ibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
+3
-5
src/main/java/com/alibaba/excel/constant/BuiltinFormats.java
src/main/java/com/alibaba/excel/constant/BuiltinFormats.java
+183
-10
src/main/java/com/alibaba/excel/context/AnalysisContext.java
src/main/java/com/alibaba/excel/context/AnalysisContext.java
+0
-1
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
...main/java/com/alibaba/excel/context/WriteContextImpl.java
+9
-0
src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java
...a/excel/converters/byteconverter/ByteNumberConverter.java
+1
-1
src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java
...excel/converters/floatconverter/FloatNumberConverter.java
+1
-1
src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java
...baba/excel/converters/integer/IntegerNumberConverter.java
+1
-1
src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java
...excel/converters/shortconverter/ShortNumberConverter.java
+1
-1
src/main/java/com/alibaba/excel/metadata/AbstractHolder.java
src/main/java/com/alibaba/excel/metadata/AbstractHolder.java
+11
-1
src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java
.../com/alibaba/excel/metadata/AbstractParameterBuilder.java
+93
-0
src/main/java/com/alibaba/excel/metadata/DataFormatter.java
src/main/java/com/alibaba/excel/metadata/DataFormatter.java
+2
-2
src/main/java/com/alibaba/excel/read/builder/AbstractExcelReaderParameterBuilder.java
...cel/read/builder/AbstractExcelReaderParameterBuilder.java
+47
-0
src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java
...va/com/alibaba/excel/read/builder/ExcelReaderBuilder.java
+6
-97
src/main/java/com/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java
...m/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java
+5
-96
src/main/java/com/alibaba/excel/util/DateUtils.java
src/main/java/com/alibaba/excel/util/DateUtils.java
+2
-3
src/main/java/com/alibaba/excel/util/NumberDataFormatterUtils.java
...java/com/alibaba/excel/util/NumberDataFormatterUtils.java
+2
-3
src/main/java/com/alibaba/excel/util/ThreadLocalCachedUtils.java
...n/java/com/alibaba/excel/util/ThreadLocalCachedUtils.java
+0
-14
src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java
...el/write/builder/AbstractExcelWriterParameterBuilder.java
+104
-0
src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java
...a/com/alibaba/excel/write/builder/ExcelWriterBuilder.java
+5
-128
src/main/java/com/alibaba/excel/write/builder/ExcelWriterSheetBuilder.java
.../alibaba/excel/write/builder/ExcelWriterSheetBuilder.java
+6
-130
src/main/java/com/alibaba/excel/write/builder/ExcelWriterTableBuilder.java
.../alibaba/excel/write/builder/ExcelWriterTableBuilder.java
+5
-130
src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatData.java
...libaba/easyexcel/test/core/dataformat/DateFormatData.java
+4
-2
src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java
...libaba/easyexcel/test/core/dataformat/DateFormatTest.java
+19
-8
src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatTest.java
...libaba/easyexcel/test/temp/dataformat/DataFormatTest.java
+1
-1
src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java
...ava/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java
+12
-0
src/test/java/com/alibaba/easyexcel/test/temp/simple/JsonData.java
...java/com/alibaba/easyexcel/test/temp/simple/JsonData.java
+15
-0
src/test/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java
...st/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java
+40
-1
src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteData.java
...ava/com/alibaba/easyexcel/test/temp/simple/WriteData.java
+13
-0
src/test/resources/dataformat/dataformat.xls
src/test/resources/dataformat/dataformat.xls
+0
-0
src/test/resources/dataformat/dataformat.xlsx
src/test/resources/dataformat/dataformat.xlsx
+0
-0
update.md
update.md
+6
-0
未找到文件。
pom.xml
浏览文件 @
35558838
...
...
@@ -17,7 +17,7 @@
<properties>
<!--<gpg.skip>true</gpg.skip>-->
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<jdk.version>
1.
7
</jdk.version>
<jdk.version>
1.
6
</jdk.version>
</properties>
<scm>
...
...
@@ -84,7 +84,7 @@
<dependency>
<groupId>
org.ehcache
</groupId>
<artifactId>
ehcache
</artifactId>
<version>
3.
7.1
</version>
<version>
3.
4.0
</version>
</dependency>
<!--test-->
<dependency>
...
...
src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
浏览文件 @
35558838
...
...
@@ -22,7 +22,9 @@ import com.alibaba.excel.read.metadata.ReadWorkbook;
import
com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.util.CollectionUtils
;
import
com.alibaba.excel.util.DateUtils
;
import
com.alibaba.excel.util.FileUtils
;
import
com.alibaba.excel.util.NumberDataFormatterUtils
;
import
com.alibaba.excel.util.StringUtils
;
/**
...
...
@@ -175,11 +177,18 @@ public class ExcelAnalyserImpl implements ExcelAnalyser {
clearEncrypt03
();
removeThreadLocalCache
();
if
(
throwable
!=
null
)
{
throw
new
ExcelAnalysisException
(
"Can not close IO."
,
throwable
);
}
}
private
void
removeThreadLocalCache
()
{
NumberDataFormatterUtils
.
removeThreadLocalCache
();
DateUtils
.
removeThreadLocalCache
();
}
private
void
clearEncrypt03
()
{
if
(
StringUtils
.
isEmpty
(
analysisContext
.
readWorkbookHolder
().
getPassword
())
||
!
ExcelTypeEnum
.
XLS
.
equals
(
analysisContext
.
readWorkbookHolder
().
getExcelType
()))
{
...
...
src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
浏览文件 @
35558838
...
...
@@ -3,10 +3,10 @@ package com.alibaba.excel.analysis.v03;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
import
org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder
;
import
org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener
;
...
...
@@ -191,7 +191,7 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
analysisContext
.
readRowHolder
(
new
ReadRowHolder
(
lastRowNumber
,
analysisContext
.
readSheetHolder
().
getGlobalConfiguration
()));
analysisContext
.
readSheetHolder
().
notifyEndOneRow
(
new
EachRowAnalysisFinishEvent
(
records
),
analysisContext
);
records
.
clear
();
records
=
new
HashMap
<
Integer
,
CellData
>
();
lastColumnNumber
=
-
1
;
}
...
...
@@ -208,7 +208,7 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
recordHandlers
.
add
(
new
FormulaRecordHandler
(
stubWorkbook
,
formatListener
));
recordHandlers
.
add
(
new
LabelRecordHandler
());
recordHandlers
.
add
(
new
NoteRecordHandler
());
recordHandlers
.
add
(
new
NumberRecordHandler
(
formatListener
));
recordHandlers
.
add
(
new
NumberRecordHandler
(
analysisContext
,
formatListener
));
recordHandlers
.
add
(
new
RkRecordHandler
());
recordHandlers
.
add
(
new
SstRecordHandler
());
recordHandlers
.
add
(
new
MissingCellDummyRecordHandler
());
...
...
src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java
浏览文件 @
35558838
...
...
@@ -8,6 +8,7 @@ import org.apache.poi.hssf.record.Record;
import
com.alibaba.excel.analysis.v03.AbstractXlsRecordHandler
;
import
com.alibaba.excel.constant.BuiltinFormats
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.metadata.CellData
;
/**
...
...
@@ -18,7 +19,10 @@ import com.alibaba.excel.metadata.CellData;
public
class
NumberRecordHandler
extends
AbstractXlsRecordHandler
{
private
FormatTrackingHSSFListener
formatListener
;
public
NumberRecordHandler
(
FormatTrackingHSSFListener
formatListener
)
{
private
AnalysisContext
context
;
public
NumberRecordHandler
(
AnalysisContext
context
,
FormatTrackingHSSFListener
formatListener
)
{
this
.
context
=
context
;
this
.
formatListener
=
formatListener
;
}
...
...
@@ -35,11 +39,8 @@ public class NumberRecordHandler extends AbstractXlsRecordHandler {
this
.
cellData
=
new
CellData
(
BigDecimal
.
valueOf
(
numrec
.
getValue
()));
int
dataFormat
=
formatListener
.
getFormatIndex
(
numrec
);
this
.
cellData
.
setDataFormat
(
dataFormat
);
if
(
dataFormat
<=
BuiltinFormats
.
builtinFormats
.
length
)
{
this
.
cellData
.
setDataFormatString
(
BuiltinFormats
.
getBuiltinFormat
(
dataFormat
));
}
else
{
this
.
cellData
.
setDataFormatString
(
formatListener
.
getFormatString
(
numrec
));
}
this
.
cellData
.
setDataFormatString
(
BuiltinFormats
.
getBuiltinFormat
(
dataFormat
,
formatListener
.
getFormatString
(
numrec
),
context
.
readSheetHolder
().
getGlobalConfiguration
().
getLocale
()));
}
@Override
...
...
src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
浏览文件 @
35558838
...
...
@@ -88,11 +88,9 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder
XSSFCellStyle
xssfCellStyle
=
stylesTable
.
getStyleAt
(
dateFormatIndexInteger
);
int
dataFormat
=
xssfCellStyle
.
getDataFormat
();
currentCellData
.
setDataFormat
(
dataFormat
);
if
(
dataFormat
<=
BuiltinFormats
.
builtinFormats
.
length
)
{
currentCellData
.
setDataFormatString
(
BuiltinFormats
.
getBuiltinFormat
(
dataFormat
));
}
else
{
currentCellData
.
setDataFormatString
(
xssfCellStyle
.
getDataFormatString
());
}
currentCellData
.
setDataFormatString
(
BuiltinFormats
.
getBuiltinFormat
(
dataFormat
,
xssfCellStyle
.
getDataFormatString
(),
analysisContext
.
readSheetHolder
().
getGlobalConfiguration
().
getLocale
()));
}
}
// cell is formula
...
...
src/main/java/com/alibaba/excel/constant/BuiltinFormats.java
浏览文件 @
35558838
package
com.alibaba.excel.constant
;
import
com.alibaba.excel.util.StringUtils
;
import
java.util.Locale
;
/**
* Excel's built-in format conversion.Currently only supports Chinese.
...
...
@@ -17,7 +17,179 @@ import com.alibaba.excel.util.StringUtils;
**/
public
class
BuiltinFormats
{
public
static
String
[]
builtinFormats
=
{
private
static
final
String
[]
BUILTIN_FORMATS_CN
=
{
// 0
"General"
,
// 1
"0"
,
// 2
"0.00"
,
// 3
"#,##0"
,
// 4
"#,##0.00"
,
// 5
"\"¥\"#,##0_);(\"¥\"#,##0)"
,
// 6
"\"¥\"#,##0_);[Red](\"¥\"#,##0)"
,
// 7
"\"¥\"#,##0.00_);(\"¥\"#,##0.00)"
,
// 8
"\"¥\"#,##0.00_);[Red](\"¥\"#,##0.00)"
,
// 9
"0%"
,
// 10
"0.00%"
,
// 11
"0.00E+00"
,
// 12
"# ?/?"
,
// 13
"# ??/??"
,
// 14
// The official documentation shows "m/d/yy", but the actual test is "yyyy/m/d".
"yyyy/m/d"
,
// 15
"d-mmm-yy"
,
// 16
"d-mmm"
,
// 17
"mmm-yy"
,
// 18
"h:mm AM/PM"
,
// 19
"h:mm:ss AM/PM"
,
// 20
"h:mm"
,
// 21
"h:mm:ss"
,
// 22
// The official documentation shows "m/d/yy h:mm", but the actual test is "yyyy/m/d h:mm".
"yyyy/m/d h:mm"
,
// 23-26 No specific correspondence found in the official documentation.
// 23
null
,
// 24
null
,
// 25
null
,
// 26
null
,
// 27
"yyyy\"年\"m\"月\""
,
// 28
"m\"月\"d\"日\""
,
// 29
"m\"月\"d\"日\""
,
// 30
"m-d-yy"
,
// 31
"yyyy\"年\"m\"月\"d\"日\""
,
// 32
"h\"时\"mm\"分\""
,
// 33
"h\"时\"mm\"分\"ss\"秒\""
,
// 34
"上午/下午h\"时\"mm\"分\""
,
// 35
"上午/下午h\"时\"mm\"分\"ss\"秒\""
,
// 36
"yyyy\"年\"m\"月\""
,
// 37
"#,##0_);(#,##0)"
,
// 38
"#,##0_);[Red](#,##0)"
,
// 39
"#,##0.00_);(#,##0.00)"
,
// 40
"#,##0.00_);[Red](#,##0.00)"
,
// 41
"_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)"
,
// 42
"_(\"¥\"* #,##0_);_(\"¥\"* (#,##0);_(\"¥\"* \"-\"_);_(@_)"
,
// 43
"_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)"
,
// 44
"_(\"¥\"* #,##0.00_);_(\"¥\"* (#,##0.00);_(\"¥\"* \"-\"??_);_(@_)"
,
// 45
"mm:ss"
,
// 46
"[h]:mm:ss"
,
// 47
"mm:ss.0"
,
// 48
"##0.0E+0"
,
// 49
"@"
,
// 50
"yyyy\"年\"m\"月\""
,
// 51
"m\"月\"d\"日\""
,
// 52
"yyyy\"年\"m\"月\""
,
// 53
"m\"月\"d\"日\""
,
// 54
"m\"月\"d\"日\""
,
// 55
"上午/下午h\"时\"mm\"分\""
,
// 56
"上午/下午h\"时\"mm\"分\"ss\"秒\""
,
// 57
"yyyy\"年\"m\"月\""
,
// 58
"m\"月\"d\"日\""
,
// 59
"t0"
,
// 60
"t0.00"
,
// 61
"t#,##0"
,
// 62
"t#,##0.00"
,
// 63-66 No specific correspondence found in the official documentation.
// 63
null
,
// 64
null
,
// 65
null
,
// 66
null
,
// 67
"t0%"
,
// 68
"t0.00%"
,
// 69
"t# ?/?"
,
// 70
"t# ??/??"
,
// 71
"ว/ด/ปปปป"
,
// 72
"ว-ดดด-ปป"
,
// 73
"ว-ดดด"
,
// 74
"ดดด-ปป"
,
// 75
"ช:นน"
,
// 76
"ช:นน:ทท"
,
// 77
"ว/ด/ปปปป ช:นน"
,
// 78
"นน:ทท"
,
// 79
"[ช]:นน:ทท"
,
// 80
"นน:ทท.0"
,
// 81
"d/m/bb"
,
// end
};
private
static
final
String
[]
BUILTIN_FORMATS_US
=
{
// 0
"General"
,
// 1
...
...
@@ -189,18 +361,19 @@ public class BuiltinFormats {
// end
};
public
static
String
getBuiltinFormat
(
Integer
index
)
{
if
(
index
==
null
||
index
<
0
||
index
>=
builtinFormats
.
length
)
{
return
null
;
public
static
String
getBuiltinFormat
(
Integer
index
,
String
defaultFormat
,
Locale
locale
)
{
String
[]
builtinFormat
=
switchBuiltinFormats
(
locale
);
if
(
index
==
null
||
index
<
0
||
index
>=
builtinFormat
.
length
)
{
return
defaultFormat
;
}
return
builtinFormat
s
[
index
];
return
builtinFormat
[
index
];
}
p
ublic
static
String
getFormat
(
Integer
index
,
String
format
)
{
if
(
!
StringUtils
.
isEmpty
(
format
))
{
return
format
;
p
rivate
static
String
[]
switchBuiltinFormats
(
Locale
locale
)
{
if
(
locale
!=
null
&&
Locale
.
US
.
getCountry
().
equals
(
locale
.
getCountry
()
))
{
return
BUILTIN_FORMATS_US
;
}
return
getBuiltinFormat
(
index
)
;
return
BUILTIN_FORMATS_CN
;
}
}
src/main/java/com/alibaba/excel/context/AnalysisContext.java
浏览文件 @
35558838
...
...
@@ -2,7 +2,6 @@ package com.alibaba.excel.context;
import
java.io.InputStream
;
import
com.alibaba.excel.analysis.ExcelReadExecutor
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.metadata.Sheet
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
...
...
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
浏览文件 @
35558838
...
...
@@ -27,7 +27,9 @@ import com.alibaba.excel.exception.ExcelGenerateException;
import
com.alibaba.excel.metadata.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.util.DateUtils
;
import
com.alibaba.excel.util.FileUtils
;
import
com.alibaba.excel.util.NumberDataFormatterUtils
;
import
com.alibaba.excel.util.StringUtils
;
import
com.alibaba.excel.util.WorkBookUtil
;
import
com.alibaba.excel.util.WriteHandlerUtils
;
...
...
@@ -327,6 +329,8 @@ public class WriteContextImpl implements WriteContext {
clearEncrypt03
();
removeThreadLocalCache
();
if
(
throwable
!=
null
)
{
throw
new
ExcelGenerateException
(
"Can not close IO."
,
throwable
);
}
...
...
@@ -336,6 +340,11 @@ public class WriteContextImpl implements WriteContext {
}
}
private
void
removeThreadLocalCache
()
{
NumberDataFormatterUtils
.
removeThreadLocalCache
();
DateUtils
.
removeThreadLocalCache
();
}
@Override
public
Sheet
getCurrentSheet
()
{
return
writeSheetHolder
.
getSheet
();
...
...
src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java
浏览文件 @
35558838
...
...
@@ -34,7 +34,7 @@ public class ByteNumberConverter implements Converter<Byte> {
@Override
public
CellData
convertToExcelData
(
Byte
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
BigDecimal
.
valueOf
(
value
));
return
new
CellData
(
new
BigDecimal
(
Byte
.
toString
(
value
)
));
}
}
src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java
浏览文件 @
35558838
...
...
@@ -34,7 +34,7 @@ public class FloatNumberConverter implements Converter<Float> {
@Override
public
CellData
convertToExcelData
(
Float
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
BigDecimal
.
valueOf
(
value
));
return
new
CellData
(
new
BigDecimal
(
Float
.
toString
(
value
)
));
}
}
src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java
浏览文件 @
35558838
...
...
@@ -34,7 +34,7 @@ public class IntegerNumberConverter implements Converter<Integer> {
@Override
public
CellData
convertToExcelData
(
Integer
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
BigDecimal
.
valueOf
(
value
));
return
new
CellData
(
new
BigDecimal
(
Integer
.
toString
(
value
)
));
}
}
src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java
浏览文件 @
35558838
...
...
@@ -34,7 +34,7 @@ public class ShortNumberConverter implements Converter<Short> {
@Override
public
CellData
convertToExcelData
(
Short
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
BigDecimal
.
valueOf
(
value
));
return
new
CellData
(
new
BigDecimal
(
Short
.
toString
(
value
)
));
}
}
src/main/java/com/alibaba/excel/metadata/AbstractHolder.java
浏览文件 @
35558838
package
com.alibaba.excel.metadata
;
import
java.util.List
;
import
java.util.Locale
;
import
java.util.Map
;
import
com.alibaba.excel.converters.Converter
;
...
...
@@ -27,7 +28,6 @@ public abstract class AbstractHolder implements ConfigurationHolder {
* Some global variables
*/
private
GlobalConfiguration
globalConfiguration
;
/**
* <p>
* Read key:
...
...
@@ -58,6 +58,16 @@ public abstract class AbstractHolder implements ConfigurationHolder {
}
else
{
globalConfiguration
.
setAutoTrim
(
basicParameter
.
getAutoTrim
());
}
if
(
basicParameter
.
getLocale
()
==
null
)
{
if
(
prentAbstractHolder
==
null
)
{
globalConfiguration
.
setLocale
(
Locale
.
getDefault
());
}
else
{
globalConfiguration
.
setLocale
(
prentAbstractHolder
.
getGlobalConfiguration
().
getLocale
());
}
}
else
{
globalConfiguration
.
setLocale
(
basicParameter
.
getLocale
());
}
}
public
Boolean
getNewInitialization
()
{
...
...
src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java
0 → 100644
浏览文件 @
35558838
package
com.alibaba.excel.metadata
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Locale
;
import
com.alibaba.excel.converters.Converter
;
/**
* ExcelBuilder
*
* @author Jiaju Zhuang
*/
public
abstract
class
AbstractParameterBuilder
<
T
extends
AbstractParameterBuilder
,
C
extends
BasicParameter
>
{
/**
* You can only choose one of the {@link #head(List)} and {@link #head(Class)}
*
* @param head
* @return
*/
public
T
head
(
List
<
List
<
String
>>
head
)
{
parameter
().
setHead
(
head
);
return
self
();
}
/**
* You can only choose one of the {@link #head(List)} and {@link #head(Class)}
*
* @param clazz
* @return
*/
public
T
head
(
Class
clazz
)
{
parameter
().
setClazz
(
clazz
);
return
self
();
}
/**
* Custom type conversions override the default.
*
* @param converter
* @return
*/
public
T
registerConverter
(
Converter
converter
)
{
if
(
parameter
().
getCustomConverterList
()
==
null
)
{
parameter
().
setCustomConverterList
(
new
ArrayList
<
Converter
>());
}
parameter
().
getCustomConverterList
().
add
(
converter
);
return
self
();
}
/**
* true if date uses 1904 windowing, or false if using 1900 date windowing.
*
* default is false
*
* @param use1904windowing
* @return
*/
public
T
use1904windowing
(
Boolean
use1904windowing
)
{
parameter
().
setUse1904windowing
(
use1904windowing
);
return
self
();
}
/**
* A <code>Locale</code> object represents a specific geographical, political, or cultural region. This parameter is
* used when formatting dates and numbers.
*
* @param locale
* @return
*/
public
T
locale
(
Locale
locale
)
{
parameter
().
setLocale
(
locale
);
return
self
();
}
/**
* Automatic trim includes sheet name and content
*
* @param autoTrim
* @return
*/
public
T
autoTrim
(
Boolean
autoTrim
)
{
parameter
().
setAutoTrim
(
autoTrim
);
return
self
();
}
@SuppressWarnings
(
"unchecked"
)
protected
T
self
()
{
return
(
T
)
this
;
}
protected
abstract
C
parameter
();
}
src/main/java/com/alibaba/excel/metadata/DataFormatter.java
浏览文件 @
35558838
...
...
@@ -63,7 +63,8 @@ public class DataFormatter {
private
static
final
Pattern
daysAsText
=
Pattern
.
compile
(
"([d]{3,})"
,
Pattern
.
CASE_INSENSITIVE
);
/** Pattern to find "AM/PM" marker */
private
static
final
Pattern
amPmPattern
=
Pattern
.
compile
(
"(([AP])[M/P]*)|(([上下])[午/下]*)"
,
Pattern
.
CASE_INSENSITIVE
);
private
static
final
Pattern
amPmPattern
=
Pattern
.
compile
(
"(([AP])[M/P]*)|(([上下])[午/下]*)"
,
Pattern
.
CASE_INSENSITIVE
);
/** Pattern to find formats with condition ranges e.g. [>=100] */
private
static
final
Pattern
rangeConditionalPattern
=
...
...
@@ -152,7 +153,6 @@ public class DataFormatter {
public
DataFormatter
(
Locale
locale
,
Boolean
use1904windowing
)
{
this
.
use1904windowing
=
use1904windowing
!=
null
?
use1904windowing
:
Boolean
.
FALSE
;
this
.
locale
=
locale
!=
null
?
locale
:
Locale
.
getDefault
();
this
.
locale
=
Locale
.
US
;
this
.
dateSymbols
=
DateFormatSymbols
.
getInstance
(
this
.
locale
);
this
.
decimalSymbols
=
DecimalFormatSymbols
.
getInstance
(
this
.
locale
);
}
...
...
src/main/java/com/alibaba/excel/read/builder/AbstractExcelReaderParameterBuilder.java
0 → 100644
浏览文件 @
35558838
package
com.alibaba.excel.read.builder
;
import
java.util.ArrayList
;
import
com.alibaba.excel.metadata.AbstractParameterBuilder
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.metadata.ReadBasicParameter
;
/**
* Build ExcelBuilder
*
* @author Jiaju Zhuang
*/
public
abstract
class
AbstractExcelReaderParameterBuilder
<
T
extends
AbstractExcelReaderParameterBuilder
,
C
extends
ReadBasicParameter
>
extends
AbstractParameterBuilder
<
T
,
C
>
{
/**
* Count the number of added heads when read sheet.
*
* <p>
* 0 - This Sheet has no head ,since the first row are the data
* <p>
* 1 - This Sheet has one row head , this is the default
* <p>
* 2 - This Sheet has two row head ,since the third row is the data
*
* @param headRowNumber
* @return
*/
public
T
headRowNumber
(
Integer
headRowNumber
)
{
parameter
().
setHeadRowNumber
(
headRowNumber
);
return
self
();
}
/**
* Custom type listener run after default
*
* @param readListener
* @return
*/
public
T
registerReadListener
(
ReadListener
readListener
)
{
if
(
parameter
().
getCustomReadListenerList
()
==
null
)
{
parameter
().
setCustomReadListenerList
(
new
ArrayList
<
ReadListener
>());
}
parameter
().
getCustomReadListenerList
().
add
(
readListener
);
return
self
();
}
}
src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java
浏览文件 @
35558838
...
...
@@ -2,8 +2,6 @@ package com.alibaba.excel.read.builder;
import
java.io.File
;
import
java.io.InputStream
;
import
java.util.ArrayList
;
import
java.util.List
;
import
javax.xml.parsers.SAXParserFactory
;
...
...
@@ -11,9 +9,7 @@ import com.alibaba.excel.ExcelReader;
import
com.alibaba.excel.cache.ReadCache
;
import
com.alibaba.excel.cache.selector.ReadCacheSelector
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.metadata.ReadWorkbook
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
...
...
@@ -22,7 +18,7 @@ import com.alibaba.excel.support.ExcelTypeEnum;
*
* @author Jiaju Zhuang
*/
public
class
ExcelReaderBuilder
{
public
class
ExcelReaderBuilder
extends
AbstractExcelReaderParameterBuilder
<
ExcelReaderBuilder
,
ReadWorkbook
>
{
/**
* Workbook
*/
...
...
@@ -132,98 +128,6 @@ public class ExcelReaderBuilder {
return
this
;
}
/**
* Count the number of added heads when read sheet.
*
* <p>
* 0 - This Sheet has no head ,since the first row are the data
* <p>
* 1 - This Sheet has one row head , this is the default
* <p>
* 2 - This Sheet has two row head ,since the third row is the data
*
* @param headRowNumber
* @return
*/
public
ExcelReaderBuilder
headRowNumber
(
Integer
headRowNumber
)
{
readWorkbook
.
setHeadRowNumber
(
headRowNumber
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelReaderBuilder#head(List)} and {@link ExcelReaderBuilder#head(Class)}
*
* @param head
* @return
*/
public
ExcelReaderBuilder
head
(
List
<
List
<
String
>>
head
)
{
readWorkbook
.
setHead
(
head
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelReaderBuilder#head(List)} and {@link ExcelReaderBuilder#head(Class)}
*
* @param clazz
* @return
*/
public
ExcelReaderBuilder
head
(
Class
clazz
)
{
readWorkbook
.
setClazz
(
clazz
);
return
this
;
}
/**
* Custom type conversions override the default.
*
* @param converter
* @return
*/
public
ExcelReaderBuilder
registerConverter
(
Converter
converter
)
{
if
(
readWorkbook
.
getCustomConverterList
()
==
null
)
{
readWorkbook
.
setCustomConverterList
(
new
ArrayList
<
Converter
>());
}
readWorkbook
.
getCustomConverterList
().
add
(
converter
);
return
this
;
}
/**
* Custom type listener run after default
*
* @param readListener
* @return
*/
public
ExcelReaderBuilder
registerReadListener
(
ReadListener
readListener
)
{
if
(
readWorkbook
.
getCustomReadListenerList
()
==
null
)
{
readWorkbook
.
setCustomReadListenerList
(
new
ArrayList
<
ReadListener
>());
}
readWorkbook
.
getCustomReadListenerList
().
add
(
readListener
);
return
this
;
}
/**
* true if date uses 1904 windowing, or false if using 1900 date windowing.
*
* default is false
*
* @param use1904windowing
* @return
*/
public
ExcelReaderBuilder
use1904windowing
(
Boolean
use1904windowing
)
{
readWorkbook
.
setUse1904windowing
(
use1904windowing
);
return
this
;
}
/**
* Automatic trim includes sheet name and content
*
* @param autoTrim
* @return
*/
public
ExcelReaderBuilder
autoTrim
(
Boolean
autoTrim
)
{
readWorkbook
.
setAutoTrim
(
autoTrim
);
return
this
;
}
/**
* Whether the encryption
*
...
...
@@ -285,4 +189,9 @@ public class ExcelReaderBuilder {
}
return
excelReaderSheetBuilder
;
}
@Override
protected
ReadWorkbook
parameter
()
{
return
readWorkbook
;
}
}
src/main/java/com/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java
浏览文件 @
35558838
package
com.alibaba.excel.read.builder
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.event.SyncReadListener
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.exception.ExcelGenerateException
;
import
com.alibaba.excel.read.listener.ReadListener
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
/**
...
...
@@ -16,7 +13,7 @@ import com.alibaba.excel.read.metadata.ReadSheet;
*
* @author Jiaju Zhuang
*/
public
class
ExcelReaderSheetBuilder
{
public
class
ExcelReaderSheetBuilder
extends
AbstractExcelReaderParameterBuilder
<
ExcelReaderSheetBuilder
,
ReadSheet
>
{
private
ExcelReader
excelReader
;
/**
* Sheet
...
...
@@ -54,98 +51,6 @@ public class ExcelReaderSheetBuilder {
return
this
;
}
/**
* Count the number of added heads when read sheet.
*
* <p>
* 0 - This Sheet has no head ,since the first row are the data
* <p>
* 1 - This Sheet has one row head , this is the default
* <p>
* 2 - This Sheet has two row head ,since the third row is the data
*
* @param headRowNumber
* @return
*/
public
ExcelReaderSheetBuilder
headRowNumber
(
Integer
headRowNumber
)
{
readSheet
.
setHeadRowNumber
(
headRowNumber
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelReaderBuilder#head(List)} and {@link ExcelReaderBuilder#head(Class)}
*
* @param head
* @return
*/
public
ExcelReaderSheetBuilder
head
(
List
<
List
<
String
>>
head
)
{
readSheet
.
setHead
(
head
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelReaderBuilder#head(List)} and {@link ExcelReaderBuilder#head(Class)}
*
* @param clazz
* @return
*/
public
ExcelReaderSheetBuilder
head
(
Class
clazz
)
{
readSheet
.
setClazz
(
clazz
);
return
this
;
}
/**
* Custom type conversions override the default.
*
* @param converter
* @return
*/
public
ExcelReaderSheetBuilder
registerConverter
(
Converter
converter
)
{
if
(
readSheet
.
getCustomConverterList
()
==
null
)
{
readSheet
.
setCustomConverterList
(
new
ArrayList
<
Converter
>());
}
readSheet
.
getCustomConverterList
().
add
(
converter
);
return
this
;
}
/**
* Custom type listener run after default
*
* @param readListener
* @return
*/
public
ExcelReaderSheetBuilder
registerReadListener
(
ReadListener
readListener
)
{
if
(
readSheet
.
getCustomReadListenerList
()
==
null
)
{
readSheet
.
setCustomReadListenerList
(
new
ArrayList
<
ReadListener
>());
}
readSheet
.
getCustomReadListenerList
().
add
(
readListener
);
return
this
;
}
/**
* true if date uses 1904 windowing, or false if using 1900 date windowing.
*
* default is false
*
* @param use1904windowing
* @return
*/
public
ExcelReaderSheetBuilder
use1904windowing
(
Boolean
use1904windowing
)
{
readSheet
.
setUse1904windowing
(
use1904windowing
);
return
this
;
}
/**
* Automatic trim includes sheet name and content
*
* @param autoTrim
* @return
*/
public
ExcelReaderSheetBuilder
autoTrim
(
Boolean
autoTrim
)
{
readSheet
.
setAutoTrim
(
autoTrim
);
return
this
;
}
public
ReadSheet
build
()
{
return
readSheet
;
}
...
...
@@ -177,4 +82,8 @@ public class ExcelReaderSheetBuilder {
return
(
List
<
T
>)
syncReadListener
.
getList
();
}
@Override
protected
ReadSheet
parameter
()
{
return
readSheet
;
}
}
src/main/java/com/alibaba/excel/util/DateUtils.java
浏览文件 @
35558838
...
...
@@ -13,7 +13,7 @@ import java.util.regex.Pattern;
*
* @author Jiaju Zhuang
**/
public
class
DateUtils
implements
ThreadLocalCachedUtils
{
public
class
DateUtils
{
/**
* Is a cache of dates
*/
...
...
@@ -302,8 +302,7 @@ public class DateUtils implements ThreadLocalCachedUtils {
return
false
;
}
@Override
public
void
removeThreadLocalCache
()
{
public
static
void
removeThreadLocalCache
()
{
DATE_THREAD_LOCAL
.
remove
();
DATE_FORMAT_THREAD_LOCAL
.
remove
();
}
...
...
src/main/java/com/alibaba/excel/util/NumberDataFormatterUtils.java
浏览文件 @
35558838
...
...
@@ -8,7 +8,7 @@ import com.alibaba.excel.metadata.GlobalConfiguration;
*
* @author Jiaju Zhuang
**/
public
class
NumberDataFormatterUtils
implements
ThreadLocalCachedUtils
{
public
class
NumberDataFormatterUtils
{
/**
* Cache DataFormatter.
*/
...
...
@@ -40,8 +40,7 @@ public class NumberDataFormatterUtils implements ThreadLocalCachedUtils {
}
@Override
public
void
removeThreadLocalCache
()
{
public
static
void
removeThreadLocalCache
()
{
DATA_FORMATTER_THREAD_LOCAL
.
remove
();
}
}
src/main/java/com/alibaba/excel/util/ThreadLocalCachedUtils.java
已删除
100644 → 0
浏览文件 @
9c7e0602
package
com.alibaba.excel.util
;
/**
* Thread local cache in the current tool class.
*
* @author Jiaju Zhuang
**/
public
interface
ThreadLocalCachedUtils
{
/**
* Remove remove thread local cached.
*/
void
removeThreadLocalCache
();
}
src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java
0 → 100644
浏览文件 @
35558838
package
com.alibaba.excel.write.builder
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
com.alibaba.excel.metadata.AbstractParameterBuilder
;
import
com.alibaba.excel.write.handler.WriteHandler
;
import
com.alibaba.excel.write.metadata.WriteBasicParameter
;
/**
* Build ExcelBuilder
*
* @author Jiaju Zhuang
*/
public
abstract
class
AbstractExcelWriterParameterBuilder
<
T
extends
AbstractExcelWriterParameterBuilder
,
C
extends
WriteBasicParameter
>
extends
AbstractParameterBuilder
<
T
,
C
>
{
/**
* Writes the head relative to the existing contents of the sheet. Indexes are zero-based.
*
* @param relativeHeadRowIndex
* @return
*/
public
T
relativeHeadRowIndex
(
Integer
relativeHeadRowIndex
)
{
parameter
().
setRelativeHeadRowIndex
(
relativeHeadRowIndex
);
return
self
();
}
/**
* Need Head
*/
public
T
needHead
(
Boolean
needHead
)
{
parameter
().
setNeedHead
(
needHead
);
return
self
();
}
/**
* Custom write handler
*
* @param writeHandler
* @return
*/
public
T
registerWriteHandler
(
WriteHandler
writeHandler
)
{
if
(
parameter
().
getCustomWriteHandlerList
()
==
null
)
{
parameter
().
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
parameter
().
getCustomWriteHandlerList
().
add
(
writeHandler
);
return
self
();
}
/**
* Use the default style.Default is true.
*
* @param useDefaultStyle
* @return
*/
public
T
useDefaultStyle
(
Boolean
useDefaultStyle
)
{
parameter
().
setUseDefaultStyle
(
useDefaultStyle
);
return
self
();
}
/**
* Whether to automatically merge headers.Default is true.
*
* @param automaticMergeHead
* @return
*/
public
T
automaticMergeHead
(
Boolean
automaticMergeHead
)
{
parameter
().
setAutomaticMergeHead
(
automaticMergeHead
);
return
self
();
}
/**
* Ignore the custom columns.
*/
public
T
excludeColumnIndexes
(
Collection
<
Integer
>
excludeColumnIndexes
)
{
parameter
().
setExcludeColumnIndexes
(
excludeColumnIndexes
);
return
self
();
}
/**
* Ignore the custom columns.
*/
public
T
excludeColumnFiledNames
(
Collection
<
String
>
excludeColumnFiledNames
)
{
parameter
().
setExcludeColumnFiledNames
(
excludeColumnFiledNames
);
return
self
();
}
/**
* Only output the custom columns.
*/
public
T
includeColumnIndexes
(
Collection
<
Integer
>
includeColumnIndexes
)
{
parameter
().
setIncludeColumnIndexes
(
includeColumnIndexes
);
return
self
();
}
/**
* Only output the custom columns.
*/
public
T
includeColumnFiledNames
(
Collection
<
String
>
includeColumnFiledNames
)
{
parameter
().
setIncludeColumnFiledNames
(
includeColumnFiledNames
);
return
self
();
}
}
src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java
浏览文件 @
35558838
...
...
@@ -3,12 +3,8 @@ package com.alibaba.excel.write.builder;
import
java.io.File
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.write.handler.WriteHandler
;
import
com.alibaba.excel.write.metadata.WriteWorkbook
;
...
...
@@ -18,7 +14,7 @@ import com.alibaba.excel.write.metadata.WriteWorkbook;
*
* @author Jiaju Zhuang
*/
public
class
ExcelWriterBuilder
{
public
class
ExcelWriterBuilder
extends
AbstractExcelWriterParameterBuilder
<
ExcelWriterBuilder
,
WriteWorkbook
>
{
/**
* Workbook
*/
...
...
@@ -28,47 +24,6 @@ public class ExcelWriterBuilder {
this
.
writeWorkbook
=
new
WriteWorkbook
();
}
/**
* Writes the head relative to the existing contents of the sheet. Indexes are zero-based.
*
* @param relativeHeadRowIndex
* @return
*/
public
ExcelWriterBuilder
relativeHeadRowIndex
(
Integer
relativeHeadRowIndex
)
{
writeWorkbook
.
setRelativeHeadRowIndex
(
relativeHeadRowIndex
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelWriterBuilder#head(List)} and {@link ExcelWriterBuilder#head(Class)}
*
* @param head
* @return
*/
public
ExcelWriterBuilder
head
(
List
<
List
<
String
>>
head
)
{
writeWorkbook
.
setHead
(
head
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelWriterBuilder#head(List)} and {@link ExcelWriterBuilder#head(Class)}
*
* @param clazz
* @return
*/
public
ExcelWriterBuilder
head
(
Class
clazz
)
{
writeWorkbook
.
setClazz
(
clazz
);
return
this
;
}
/**
* Need Head
*/
public
ExcelWriterBuilder
needHead
(
Boolean
needHead
)
{
writeWorkbook
.
setNeedHead
(
needHead
);
return
this
;
}
/**
* Default true
*
...
...
@@ -80,28 +35,6 @@ public class ExcelWriterBuilder {
return
this
;
}
/**
* Use the default style.Default is true.
*
* @param useDefaultStyle
* @return
*/
public
ExcelWriterBuilder
useDefaultStyle
(
Boolean
useDefaultStyle
)
{
writeWorkbook
.
setUseDefaultStyle
(
useDefaultStyle
);
return
this
;
}
/**
* Whether to automatically merge headers.Default is true.
*
* @param automaticMergeHead
* @return
*/
public
ExcelWriterBuilder
automaticMergeHead
(
Boolean
automaticMergeHead
)
{
writeWorkbook
.
setAutomaticMergeHead
(
automaticMergeHead
);
return
this
;
}
/**
* Whether the encryption.
* <p>
...
...
@@ -125,38 +58,6 @@ public class ExcelWriterBuilder {
return
this
;
}
/**
* Ignore the custom columns.
*/
public
ExcelWriterBuilder
excludeColumnIndexes
(
Collection
<
Integer
>
excludeColumnIndexes
)
{
writeWorkbook
.
setExcludeColumnIndexes
(
excludeColumnIndexes
);
return
this
;
}
/**
* Ignore the custom columns.
*/
public
ExcelWriterBuilder
excludeColumnFiledNames
(
Collection
<
String
>
excludeColumnFiledNames
)
{
writeWorkbook
.
setExcludeColumnFiledNames
(
excludeColumnFiledNames
);
return
this
;
}
/**
* Only output the custom columns.
*/
public
ExcelWriterBuilder
includeColumnIndexes
(
Collection
<
Integer
>
includeColumnIndexes
)
{
writeWorkbook
.
setIncludeColumnIndexes
(
includeColumnIndexes
);
return
this
;
}
/**
* Only output the custom columns.
*/
public
ExcelWriterBuilder
includeColumnFiledNames
(
Collection
<
String
>
includeColumnFiledNames
)
{
writeWorkbook
.
setIncludeColumnFiledNames
(
includeColumnFiledNames
);
return
this
;
}
/**
* Excel is also written in the event of an exception being thrown.The default false.
*/
...
...
@@ -181,34 +82,6 @@ public class ExcelWriterBuilder {
return
this
;
}
/**
* Custom type conversions override the default.
*
* @param converter
* @return
*/
public
ExcelWriterBuilder
registerConverter
(
Converter
converter
)
{
if
(
writeWorkbook
.
getCustomConverterList
()
==
null
)
{
writeWorkbook
.
setCustomConverterList
(
new
ArrayList
<
Converter
>());
}
writeWorkbook
.
getCustomConverterList
().
add
(
converter
);
return
this
;
}
/**
* Custom write handler
*
* @param writeHandler
* @return
*/
public
ExcelWriterBuilder
registerWriteHandler
(
WriteHandler
writeHandler
)
{
if
(
writeWorkbook
.
getCustomWriteHandlerList
()
==
null
)
{
writeWorkbook
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
writeWorkbook
.
getCustomWriteHandlerList
().
add
(
writeHandler
);
return
this
;
}
public
ExcelWriterBuilder
excelType
(
ExcelTypeEnum
excelType
)
{
writeWorkbook
.
setExcelType
(
excelType
);
return
this
;
...
...
@@ -281,4 +154,8 @@ public class ExcelWriterBuilder {
return
excelWriterSheetBuilder
;
}
@Override
protected
WriteWorkbook
parameter
()
{
return
writeWorkbook
;
}
}
src/main/java/com/alibaba/excel/write/builder/ExcelWriterSheetBuilder.java
浏览文件 @
35558838
package
com.alibaba.excel.write.builder
;
import
java.util.ArrayList
;
import
java.util.Collection
;
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.write.handler.WriteHandler
;
import
com.alibaba.excel.write.metadata.WriteSheet
;
import
com.alibaba.excel.write.metadata.fill.FillConfig
;
...
...
@@ -16,7 +12,7 @@ import com.alibaba.excel.write.metadata.fill.FillConfig;
*
* @author Jiaju Zhuang
*/
public
class
ExcelWriterSheetBuilder
{
public
class
ExcelWriterSheetBuilder
extends
AbstractExcelWriterParameterBuilder
<
ExcelWriterSheetBuilder
,
WriteSheet
>
{
private
ExcelWriter
excelWriter
;
/**
* Sheet
...
...
@@ -32,99 +28,6 @@ public class ExcelWriterSheetBuilder {
this
.
excelWriter
=
excelWriter
;
}
/**
* Writes the head relative to the existing contents of the sheet. Indexes are zero-based.
*
* @param relativeHeadRowIndex
* @return
*/
public
ExcelWriterSheetBuilder
relativeHeadRowIndex
(
Integer
relativeHeadRowIndex
)
{
writeSheet
.
setRelativeHeadRowIndex
(
relativeHeadRowIndex
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelWriterSheetBuilder#head(List)} and
* {@link ExcelWriterSheetBuilder#head(Class)}
*
* @param head
* @return
*/
public
ExcelWriterSheetBuilder
head
(
List
<
List
<
String
>>
head
)
{
writeSheet
.
setHead
(
head
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelWriterSheetBuilder#head(List)} and
* {@link ExcelWriterSheetBuilder#head(Class)}
*
* @param clazz
* @return
*/
public
ExcelWriterSheetBuilder
head
(
Class
clazz
)
{
writeSheet
.
setClazz
(
clazz
);
return
this
;
}
/**
* Need Head
*/
public
ExcelWriterSheetBuilder
needHead
(
Boolean
needHead
)
{
writeSheet
.
setNeedHead
(
needHead
);
return
this
;
}
/**
* Use the default style.Default is true.
*
* @param useDefaultStyle
* @return
*/
public
ExcelWriterSheetBuilder
useDefaultStyle
(
Boolean
useDefaultStyle
)
{
writeSheet
.
setUseDefaultStyle
(
useDefaultStyle
);
return
this
;
}
/**
* Whether to automatically merge headers.Default is true.
*
* @param automaticMergeHead
* @return
*/
public
ExcelWriterSheetBuilder
automaticMergeHead
(
Boolean
automaticMergeHead
)
{
writeSheet
.
setAutomaticMergeHead
(
automaticMergeHead
);
return
this
;
}
/**
* Custom type conversions override the default.
*
* @param converter
* @return
*/
public
ExcelWriterSheetBuilder
registerConverter
(
Converter
converter
)
{
if
(
writeSheet
.
getCustomConverterList
()
==
null
)
{
writeSheet
.
setCustomConverterList
(
new
ArrayList
<
Converter
>());
}
writeSheet
.
getCustomConverterList
().
add
(
converter
);
return
this
;
}
/**
* Custom write handler
*
* @param writeHandler
* @return
*/
public
ExcelWriterSheetBuilder
registerWriteHandler
(
WriteHandler
writeHandler
)
{
if
(
writeSheet
.
getCustomWriteHandlerList
()
==
null
)
{
writeSheet
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
writeSheet
.
getCustomWriteHandlerList
().
add
(
writeHandler
);
return
this
;
}
/**
* Starting from 0
*
...
...
@@ -147,38 +50,6 @@ public class ExcelWriterSheetBuilder {
return
this
;
}
/**
* Ignore the custom columns.
*/
public
ExcelWriterSheetBuilder
excludeColumnIndexes
(
Collection
<
Integer
>
excludeColumnIndexes
)
{
writeSheet
.
setExcludeColumnIndexes
(
excludeColumnIndexes
);
return
this
;
}
/**
* Ignore the custom columns.
*/
public
ExcelWriterSheetBuilder
excludeColumnFiledNames
(
Collection
<
String
>
excludeColumnFiledNames
)
{
writeSheet
.
setExcludeColumnFiledNames
(
excludeColumnFiledNames
);
return
this
;
}
/**
* Only output the custom columns.
*/
public
ExcelWriterSheetBuilder
includeColumnIndexes
(
Collection
<
Integer
>
includeColumnIndexes
)
{
writeSheet
.
setIncludeColumnIndexes
(
includeColumnIndexes
);
return
this
;
}
/**
* Only output the custom columns.
*/
public
ExcelWriterSheetBuilder
includeColumnFiledNames
(
Collection
<
String
>
includeColumnFiledNames
)
{
writeSheet
.
setIncludeColumnFiledNames
(
includeColumnFiledNames
);
return
this
;
}
public
WriteSheet
build
()
{
return
writeSheet
;
}
...
...
@@ -215,4 +86,9 @@ public class ExcelWriterSheetBuilder {
return
excelWriterTableBuilder
;
}
@Override
protected
WriteSheet
parameter
()
{
return
writeSheet
;
}
}
src/main/java/com/alibaba/excel/write/builder/ExcelWriterTableBuilder.java
浏览文件 @
35558838
package
com.alibaba.excel.write.builder
;
import
java.util.ArrayList
;
import
java.util.Collection
;
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.write.handler.WriteHandler
;
import
com.alibaba.excel.write.metadata.WriteSheet
;
import
com.alibaba.excel.write.metadata.WriteTable
;
...
...
@@ -16,7 +12,7 @@ import com.alibaba.excel.write.metadata.WriteTable;
*
* @author Jiaju Zhuang
*/
public
class
ExcelWriterTableBuilder
{
public
class
ExcelWriterTableBuilder
extends
AbstractExcelWriterParameterBuilder
<
ExcelWriterTableBuilder
,
WriteTable
>
{
private
ExcelWriter
excelWriter
;
...
...
@@ -36,99 +32,6 @@ public class ExcelWriterTableBuilder {
this
.
writeTable
=
new
WriteTable
();
}
/**
* Writes the head relative to the existing contents of the sheet. Indexes are zero-based.
*
* @param relativeHeadRowIndex
* @return
*/
public
ExcelWriterTableBuilder
relativeHeadRowIndex
(
Integer
relativeHeadRowIndex
)
{
writeTable
.
setRelativeHeadRowIndex
(
relativeHeadRowIndex
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelWriterTableBuilder#head(List)} and
* {@link ExcelWriterTableBuilder#head(Class)}
*
* @param head
* @return
*/
public
ExcelWriterTableBuilder
head
(
List
<
List
<
String
>>
head
)
{
writeTable
.
setHead
(
head
);
return
this
;
}
/**
* You can only choose one of the {@link ExcelWriterTableBuilder#head(List)} and
* {@link ExcelWriterTableBuilder#head(Class)}
*
* @param clazz
* @return
*/
public
ExcelWriterTableBuilder
head
(
Class
clazz
)
{
writeTable
.
setClazz
(
clazz
);
return
this
;
}
/**
* Need Head
*/
public
ExcelWriterTableBuilder
needHead
(
Boolean
needHead
)
{
writeTable
.
setNeedHead
(
needHead
);
return
this
;
}
/**
* Use the default style.Default is true.
*
* @param useDefaultStyle
* @return
*/
public
ExcelWriterTableBuilder
useDefaultStyle
(
Boolean
useDefaultStyle
)
{
writeTable
.
setUseDefaultStyle
(
useDefaultStyle
);
return
this
;
}
/**
* Whether to automatically merge headers.Default is true.
*
* @param automaticMergeHead
* @return
*/
public
ExcelWriterTableBuilder
automaticMergeHead
(
Boolean
automaticMergeHead
)
{
writeTable
.
setAutomaticMergeHead
(
automaticMergeHead
);
return
this
;
}
/**
* Custom type conversions override the default.
*
* @param converter
* @return
*/
public
ExcelWriterTableBuilder
registerConverter
(
Converter
converter
)
{
if
(
writeTable
.
getCustomConverterList
()
==
null
)
{
writeTable
.
setCustomConverterList
(
new
ArrayList
<
Converter
>());
}
writeTable
.
getCustomConverterList
().
add
(
converter
);
return
this
;
}
/**
* Custom write handler
*
* @param writeHandler
* @return
*/
public
ExcelWriterTableBuilder
registerWriteHandler
(
WriteHandler
writeHandler
)
{
if
(
writeTable
.
getCustomWriteHandlerList
()
==
null
)
{
writeTable
.
setCustomWriteHandlerList
(
new
ArrayList
<
WriteHandler
>());
}
writeTable
.
getCustomWriteHandlerList
().
add
(
writeHandler
);
return
this
;
}
/**
* Starting from 0
*
...
...
@@ -140,38 +43,6 @@ public class ExcelWriterTableBuilder {
return
this
;
}
/**
* Ignore the custom columns.
*/
public
ExcelWriterTableBuilder
excludeColumnIndexes
(
Collection
<
Integer
>
excludeColumnIndexes
)
{
writeTable
.
setExcludeColumnIndexes
(
excludeColumnIndexes
);
return
this
;
}
/**
* Ignore the custom columns.
*/
public
ExcelWriterTableBuilder
excludeColumnFiledNames
(
Collection
<
String
>
excludeColumnFiledNames
)
{
writeTable
.
setExcludeColumnFiledNames
(
excludeColumnFiledNames
);
return
this
;
}
/**
* Only output the custom columns.
*/
public
ExcelWriterTableBuilder
includeColumnIndexes
(
Collection
<
Integer
>
includeColumnIndexes
)
{
writeTable
.
setIncludeColumnIndexes
(
includeColumnIndexes
);
return
this
;
}
/**
* Only output the custom columns.
*/
public
ExcelWriterTableBuilder
includeColumnFiledNames
(
Collection
<
String
>
includeColumnFiledNames
)
{
writeSheet
.
setIncludeColumnFiledNames
(
includeColumnFiledNames
);
return
this
;
}
public
WriteTable
build
()
{
return
writeTable
;
}
...
...
@@ -184,4 +55,8 @@ public class ExcelWriterTableBuilder {
excelWriter
.
finish
();
}
@Override
protected
WriteTable
parameter
()
{
return
writeTable
;
}
}
src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatData.java
浏览文件 @
35558838
...
...
@@ -8,7 +8,9 @@ import lombok.Data;
@Data
public
class
DateFormatData
{
private
String
date
;
private
String
dateString
;
private
String
dateStringCn
;
private
String
dateStringUs
;
private
String
number
;
private
String
numberString
;
private
String
numberStringCn
;
private
String
numberStringUs
;
}
src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java
浏览文件 @
35558838
...
...
@@ -2,7 +2,9 @@ package com.alibaba.easyexcel.test.core.dataformat;
import
java.io.File
;
import
java.util.List
;
import
java.util.Locale
;
import
org.junit.Assert
;
import
org.junit.BeforeClass
;
import
org.junit.Test
;
import
org.slf4j.Logger
;
...
...
@@ -10,7 +12,6 @@ import org.slf4j.LoggerFactory;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.fastjson.JSON
;
/**
*
...
...
@@ -30,21 +31,31 @@ public class DateFormatTest {
@Test
public
void
t01Read07
()
{
read
(
file07
);
readCn
(
file07
);
readUs
(
file07
);
}
@Test
public
void
t02Read03
()
{
read
(
file03
);
readCn
(
file03
);
readUs
(
file03
);
}
private
void
read
(
File
file
)
{
List
<
DateFormatData
>
list
=
EasyExcel
.
read
(
file
,
DateFormatData
.
class
,
null
).
sheet
().
doReadSync
();
private
void
readCn
(
File
file
)
{
List
<
DateFormatData
>
list
=
EasyExcel
.
read
(
file
,
DateFormatData
.
class
,
null
).
locale
(
Locale
.
CHINA
).
sheet
().
doReadSync
();
for
(
DateFormatData
data
:
list
)
{
if
(!
data
.
getDate
().
equals
(
data
.
getDateString
()))
{
LOGGER
.
info
(
"返回:{}"
,
JSON
.
toJSONString
(
data
));
}
Assert
.
assertEquals
(
data
.
getDate
(),
data
.
getDateStringCn
());
Assert
.
assertEquals
(
data
.
getNumber
(),
data
.
getNumberStringCn
());
}
}
private
void
readUs
(
File
file
)
{
List
<
DateFormatData
>
list
=
EasyExcel
.
read
(
file
,
DateFormatData
.
class
,
null
).
locale
(
Locale
.
US
).
sheet
().
doReadSync
();
for
(
DateFormatData
data
:
list
)
{
Assert
.
assertEquals
(
data
.
getDate
(),
data
.
getDateStringUs
());
Assert
.
assertEquals
(
data
.
getNumber
(),
data
.
getNumberStringUs
());
}
}
}
src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatTest.java
浏览文件 @
35558838
...
...
@@ -146,7 +146,7 @@ public class DataFormatTest {
@Test
public
void
test3556
()
throws
IOException
,
InvalidFormatException
{
String
file
=
"D://test/dataformat.xlsx"
;
String
file
=
"D://test/dataformat
1
.xlsx"
;
XSSFWorkbook
xssfWorkbook
=
new
XSSFWorkbook
(
file
);
Sheet
xssfSheet
=
xssfWorkbook
.
getSheetAt
(
0
);
DataFormatter
d
=
new
DataFormatter
(
Locale
.
CHINA
);
...
...
src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java
浏览文件 @
35558838
...
...
@@ -2,6 +2,7 @@ package com.alibaba.easyexcel.test.temp.poi;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.math.BigDecimal
;
import
java.util.regex.Pattern
;
import
org.apache.poi.xssf.streaming.SXSSFCell
;
...
...
@@ -35,9 +36,20 @@ public class PoiWriteTest {
cell1
.
setCellValue
(
999999999999999L
);
SXSSFCell
cell2
=
row
.
createCell
(
1
);
cell2
.
setCellValue
(
1000000000000001L
);
SXSSFCell
cell32
=
row
.
createCell
(
2
);
cell32
.
setCellValue
(
300.35f
);
sxxsFWorkbook
.
write
(
fileOutputStream
);
}
@Test
public
void
write01
()
throws
IOException
{
float
ff
=
300.35f
;
BigDecimal
bd
=
new
BigDecimal
(
Float
.
toString
(
ff
));
System
.
out
.
println
(
bd
.
doubleValue
());
System
.
out
.
println
(
bd
.
floatValue
());
}
@Test
public
void
write
()
throws
IOException
{
FileOutputStream
fileOutputStream
=
...
...
src/test/java/com/alibaba/easyexcel/test/temp/simple/JsonData.java
0 → 100644
浏览文件 @
35558838
package
com.alibaba.easyexcel.test.temp.simple
;
import
lombok.Data
;
/**
* TODO
*
* @author Jiaju Zhuang
**/
@Data
public
class
JsonData
{
private
String
SS1
;
private
String
sS2
;
private
String
ss3
;
}
src/test/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java
浏览文件 @
35558838
...
...
@@ -14,6 +14,7 @@ import com.alibaba.easyexcel.test.core.large.LargeData;
import
com.alibaba.easyexcel.test.demo.write.DemoData
;
import
com.alibaba.easyexcel.test.util.TestFileUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.fastjson.JSON
;
import
net.sf.cglib.beans.BeanMap
;
...
...
@@ -43,7 +44,35 @@ public class Wirte {
String
fileName
=
TestFileUtil
.
getPath
()
+
"t22"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
// 如果这里想使用03 则 传入excelType参数即可
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
sheet
(
"模板"
).
doWrite
(
data
());
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
relativeHeadRowIndex
(
10
).
sheet
(
"模板"
).
doWrite
(
data
());
}
@Test
public
void
simpleWrite2
()
{
// 写法1
String
fileName
=
TestFileUtil
.
getPath
()
+
"t22"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
// 如果这里想使用03 则 传入excelType参数即可
EasyExcel
.
write
(
fileName
,
WriteData
.
class
).
sheet
(
"模板"
).
doWrite
(
data1
());
}
@Test
public
void
json
()
{
JsonData
jsonData
=
new
JsonData
();
jsonData
.
setSS1
(
"11"
);
jsonData
.
setSS2
(
"22"
);
jsonData
.
setSs3
(
"33"
);
System
.
out
.
println
(
JSON
.
toJSONString
(
jsonData
));
}
@Test
public
void
json3
()
{
String
json
=
"{\"SS1\":\"11\",\"sS2\":\"22\",\"ss3\":\"33\"}"
;
JsonData
jsonData
=
JSON
.
parseObject
(
json
,
JsonData
.
class
);
System
.
out
.
println
(
JSON
.
toJSONString
(
jsonData
));
}
private
List
<
List
<
String
>>
head
()
{
...
...
@@ -72,4 +101,14 @@ public class Wirte {
return
list
;
}
private
List
<
WriteData
>
data1
()
{
List
<
WriteData
>
list
=
new
ArrayList
<
WriteData
>();
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
WriteData
data
=
new
WriteData
();
data
.
setF
(
300.35f
);
list
.
add
(
data
);
}
return
list
;
}
}
src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteData.java
0 → 100644
浏览文件 @
35558838
package
com.alibaba.easyexcel.test.temp.simple
;
import
lombok.Data
;
/**
* write data
*
* @author Jiaju Zhuang
**/
@Data
public
class
WriteData
{
private
float
f
;
}
src/test/resources/dataformat/dataformat.xls
0 → 100644
浏览文件 @
35558838
文件已添加
src/test/resources/dataformat/dataformat.xlsx
浏览文件 @
35558838
无法预览此类型文件
update.md
浏览文件 @
35558838
# 2.2.0-beta1
*
修复用String接收日期、数字和excel显示不一致的bug(不是完美修复,但是大部分情况已经兼容)
*
降低Ehcache版本 3.7.1(jkd7) -> 3.4.0(jdk6)
*
修复xls 用Map接收时多次接收会是同一个对象的bug
*
修复浮点型数据导入到excel 会丢失精度的bug
# 2.1.3
*
每个java进程单独创建一个缓存目录
[
Issue #813
](
https://github.com/alibaba/easyexcel/issues/813
)
*
统一修改合并为unsafe,提高大量数据导出的合并的效率
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录