Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Laubin729
easyexcel
提交
33929c71
E
easyexcel
项目概览
Laubin729
/
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,发现更多精彩内容 >>
提交
33929c71
编写于
9月 16, 2019
作者:
庄家钜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复用string去接收number数据会导致科学计数法的问题
上级
1bfb8da9
变更
22
隐藏空白更改
内联
并排
Showing
22 changed file
with
297 addition
and
65 deletion
+297
-65
src/main/java/com/alibaba/excel/EasyExcelFactory.java
src/main/java/com/alibaba/excel/EasyExcelFactory.java
+1
-1
src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java
...aba/excel/analysis/v03/handlers/FormulaRecordHandler.java
+3
-1
src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java
...baba/excel/analysis/v03/handlers/NumberRecordHandler.java
+3
-1
src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
...ibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
+3
-2
src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java
...xcel/converters/bigdecimal/BigDecimalNumberConverter.java
+2
-2
src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java
...l/converters/booleanconverter/BooleanNumberConverter.java
+5
-7
src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java
...a/excel/converters/byteconverter/ByteNumberConverter.java
+4
-2
src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java
...om/alibaba/excel/converters/date/DateNumberConverter.java
+12
-4
src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java
...cel/converters/doubleconverter/DoubleNumberConverter.java
+4
-2
src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java
...excel/converters/floatconverter/FloatNumberConverter.java
+4
-2
src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java
...baba/excel/converters/integer/IntegerNumberConverter.java
+4
-2
src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java
...a/excel/converters/longconverter/LongNumberConverter.java
+4
-2
src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java
...excel/converters/shortconverter/ShortNumberConverter.java
+4
-2
src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java
...libaba/excel/converters/string/StringNumberConverter.java
+8
-6
src/main/java/com/alibaba/excel/metadata/CellData.java
src/main/java/com/alibaba/excel/metadata/CellData.java
+43
-14
src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java
.../alibaba/excel/read/listener/ModelBuildEventListener.java
+3
-3
src/main/java/com/alibaba/excel/util/ConverterUtils.java
src/main/java/com/alibaba/excel/util/ConverterUtils.java
+37
-3
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
+32
-7
src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java
...te/style/column/LongestMatchColumnWidthStyleStrategy.java
+1
-1
src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java
...ava/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java
+101
-0
src/test/java/com/alibaba/easyexcel/test/temp/poi/TestCell.java
...st/java/com/alibaba/easyexcel/test/temp/poi/TestCell.java
+18
-0
src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java
...t/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java
+1
-1
未找到文件。
src/main/java/com/alibaba/excel/EasyExcelFactory.java
浏览文件 @
33929c71
...
...
@@ -73,7 +73,7 @@ public class EasyExcelFactory {
* read sheet.
* @param listener
* Callback method after each row is parsed.
* @deprecated please use 'EasyExcel.read(in,head,listener).sheet(sheetNo).doRead()
.finish()
;'
* @deprecated please use 'EasyExcel.read(in,head,listener).sheet(sheetNo).doRead();'
*/
@Deprecated
public
static
void
readBySax
(
InputStream
in
,
Sheet
sheet
,
AnalysisEventListener
listener
)
{
...
...
src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java
浏览文件 @
33929c71
package
com.alibaba.excel.analysis.v03.handlers
;
import
java.math.BigDecimal
;
import
org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener
;
import
org.apache.poi.hssf.model.HSSFFormulaParser
;
import
org.apache.poi.hssf.record.FormulaRecord
;
...
...
@@ -66,7 +68,7 @@ public class FormulaRecordHandler extends AbstractXlsRecordHandler {
tempCellData
.
setFormulaValue
(
formulaValue
);
break
;
case
NUMERIC:
this
.
cellData
=
new
CellData
(
frec
.
getValue
(
));
this
.
cellData
=
new
CellData
(
BigDecimal
.
valueOf
(
frec
.
getValue
()
));
this
.
cellData
.
setFormula
(
Boolean
.
TRUE
);
this
.
cellData
.
setFormulaValue
(
formulaValue
);
break
;
...
...
src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java
浏览文件 @
33929c71
package
com.alibaba.excel.analysis.v03.handlers
;
import
java.math.BigDecimal
;
import
org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener
;
import
org.apache.poi.hssf.record.NumberRecord
;
import
org.apache.poi.hssf.record.Record
;
...
...
@@ -29,7 +31,7 @@ public class NumberRecordHandler extends AbstractXlsRecordHandler {
NumberRecord
numrec
=
(
NumberRecord
)
record
;
this
.
row
=
numrec
.
getRow
();
this
.
column
=
numrec
.
getColumn
();
this
.
cellData
=
new
CellData
(
numrec
.
getValue
(
));
this
.
cellData
=
new
CellData
(
BigDecimal
.
valueOf
(
numrec
.
getValue
()
));
this
.
cellData
.
setDataFormat
(
formatListener
.
getFormatIndex
(
numrec
));
this
.
cellData
.
setDataFormatString
(
formatListener
.
getFormatString
(
numrec
));
}
...
...
src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
浏览文件 @
33929c71
...
...
@@ -7,6 +7,7 @@ import static com.alibaba.excel.constant.ExcelXmlConstants.CELL_TAG;
import
static
com
.
alibaba
.
excel
.
constant
.
ExcelXmlConstants
.
CELL_VALUE_TAG
;
import
static
com
.
alibaba
.
excel
.
constant
.
ExcelXmlConstants
.
CELL_VALUE_TYPE_TAG
;
import
java.math.BigDecimal
;
import
java.util.Map
;
import
java.util.TreeMap
;
...
...
@@ -162,8 +163,8 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder
case
NUMBER:
case
EMPTY:
currentCellData
.
setType
(
CellDataTypeEnum
.
NUMBER
);
if
(
currentCellData
.
get
Double
Value
()
==
null
)
{
currentCellData
.
set
DoubleValue
(
Double
.
valueOf
(
currentCellValue
));
if
(
currentCellData
.
get
Number
Value
()
==
null
)
{
currentCellData
.
set
NumberValue
(
new
BigDecimal
(
currentCellValue
));
}
break
;
default
:
...
...
src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java
浏览文件 @
33929c71
...
...
@@ -28,12 +28,12 @@ public class BigDecimalNumberConverter implements Converter<BigDecimal> {
@Override
public
BigDecimal
convertToJavaData
(
CellData
cellData
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
BigDecimal
.
valueOf
(
cellData
.
getDoubleValue
()
);
return
cellData
.
getNumberValue
(
);
}
@Override
public
CellData
convertToExcelData
(
BigDecimal
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
value
.
doubleValue
()
);
return
new
CellData
(
value
);
}
}
src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java
浏览文件 @
33929c71
package
com.alibaba.excel.converters.booleanconverter
;
import
java.math.BigDecimal
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.CellData
;
...
...
@@ -12,10 +14,6 @@ import com.alibaba.excel.metadata.property.ExcelContentProperty;
* @author Jiaju Zhuang
*/
public
class
BooleanNumberConverter
implements
Converter
<
Boolean
>
{
private
static
final
Double
ONE
=
1.0
;
private
static
final
Double
ZERO
=
0.0
;
@Override
public
Class
supportJavaTypeKey
()
{
return
Boolean
.
class
;
...
...
@@ -29,7 +27,7 @@ public class BooleanNumberConverter implements Converter<Boolean> {
@Override
public
Boolean
convertToJavaData
(
CellData
cellData
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
if
(
ONE
.
equals
(
cellData
.
getDouble
Value
()))
{
if
(
BigDecimal
.
ONE
.
equals
(
cellData
.
getNumber
Value
()))
{
return
Boolean
.
TRUE
;
}
return
Boolean
.
FALSE
;
...
...
@@ -39,9 +37,9 @@ public class BooleanNumberConverter implements Converter<Boolean> {
public
CellData
convertToExcelData
(
Boolean
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
if
(
value
)
{
return
new
CellData
(
ONE
);
return
new
CellData
(
BigDecimal
.
ONE
);
}
return
new
CellData
(
ZERO
);
return
new
CellData
(
BigDecimal
.
ZERO
);
}
}
src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java
浏览文件 @
33929c71
package
com.alibaba.excel.converters.byteconverter
;
import
java.math.BigDecimal
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.CellData
;
...
...
@@ -26,13 +28,13 @@ public class ByteNumberConverter implements Converter<Byte> {
@Override
public
Byte
convertToJavaData
(
CellData
cellData
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
cellData
.
get
Double
Value
().
byteValue
();
return
cellData
.
get
Number
Value
().
byteValue
();
}
@Override
public
CellData
convertToExcelData
(
Byte
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
value
.
doubleValue
(
));
return
new
CellData
(
BigDecimal
.
valueOf
(
value
));
}
}
src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java
浏览文件 @
33929c71
package
com.alibaba.excel.converters.date
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
org.apache.poi.
hssf.usermodel.HSSF
DateUtil
;
import
org.apache.poi.
ss.usermodel.
DateUtil
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
...
...
@@ -31,9 +32,10 @@ public class DateNumberConverter implements Converter<Date> {
public
Date
convertToJavaData
(
CellData
cellData
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
if
(
contentProperty
==
null
||
contentProperty
.
getDateTimeFormatProperty
()
==
null
)
{
return
HSSFDateUtil
.
getJavaDate
(
cellData
.
getDoubleValue
(),
globalConfiguration
.
getUse1904windowing
(),
null
);
return
DateUtil
.
getJavaDate
(
cellData
.
getNumberValue
().
doubleValue
(),
globalConfiguration
.
getUse1904windowing
(),
null
);
}
else
{
return
HSSFDateUtil
.
getJavaDate
(
cellData
.
getD
oubleValue
(),
return
DateUtil
.
getJavaDate
(
cellData
.
getNumberValue
().
d
oubleValue
(),
contentProperty
.
getDateTimeFormatProperty
().
getUse1904windowing
(),
null
);
}
}
...
...
@@ -41,6 +43,12 @@ public class DateNumberConverter implements Converter<Date> {
@Override
public
CellData
convertToExcelData
(
Date
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
((
double
)(
value
.
getTime
()));
if
(
contentProperty
==
null
||
contentProperty
.
getDateTimeFormatProperty
()
==
null
)
{
return
new
CellData
(
BigDecimal
.
valueOf
(
DateUtil
.
getExcelDate
(
value
,
globalConfiguration
.
getUse1904windowing
())));
}
else
{
return
new
CellData
(
BigDecimal
.
valueOf
(
DateUtil
.
getExcelDate
(
value
,
contentProperty
.
getDateTimeFormatProperty
().
getUse1904windowing
())));
}
}
}
src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java
浏览文件 @
33929c71
package
com.alibaba.excel.converters.doubleconverter
;
import
java.math.BigDecimal
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.CellData
;
...
...
@@ -26,13 +28,13 @@ public class DoubleNumberConverter implements Converter<Double> {
@Override
public
Double
convertToJavaData
(
CellData
cellData
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
cellData
.
get
D
oubleValue
();
return
cellData
.
get
NumberValue
().
d
oubleValue
();
}
@Override
public
CellData
convertToExcelData
(
Double
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
value
);
return
new
CellData
(
BigDecimal
.
valueOf
(
value
)
);
}
}
src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java
浏览文件 @
33929c71
package
com.alibaba.excel.converters.floatconverter
;
import
java.math.BigDecimal
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.CellData
;
...
...
@@ -26,13 +28,13 @@ public class FloatNumberConverter implements Converter<Float> {
@Override
public
Float
convertToJavaData
(
CellData
cellData
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
cellData
.
get
Double
Value
().
floatValue
();
return
cellData
.
get
Number
Value
().
floatValue
();
}
@Override
public
CellData
convertToExcelData
(
Float
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
value
.
doubleValue
(
));
return
new
CellData
(
BigDecimal
.
valueOf
(
value
));
}
}
src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java
浏览文件 @
33929c71
package
com.alibaba.excel.converters.integer
;
import
java.math.BigDecimal
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.CellData
;
...
...
@@ -26,13 +28,13 @@ public class IntegerNumberConverter implements Converter<Integer> {
@Override
public
Integer
convertToJavaData
(
CellData
cellData
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
cellData
.
get
Double
Value
().
intValue
();
return
cellData
.
get
Number
Value
().
intValue
();
}
@Override
public
CellData
convertToExcelData
(
Integer
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
value
.
doubleValue
(
));
return
new
CellData
(
BigDecimal
.
valueOf
(
value
));
}
}
src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java
浏览文件 @
33929c71
package
com.alibaba.excel.converters.longconverter
;
import
java.math.BigDecimal
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.CellData
;
...
...
@@ -26,13 +28,13 @@ public class LongNumberConverter implements Converter<Long> {
@Override
public
Long
convertToJavaData
(
CellData
cellData
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
cellData
.
get
Double
Value
().
longValue
();
return
cellData
.
get
Number
Value
().
longValue
();
}
@Override
public
CellData
convertToExcelData
(
Long
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
value
.
doubleValue
(
));
return
new
CellData
(
BigDecimal
.
valueOf
(
value
));
}
}
src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java
浏览文件 @
33929c71
package
com.alibaba.excel.converters.shortconverter
;
import
java.math.BigDecimal
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.CellData
;
...
...
@@ -26,13 +28,13 @@ public class ShortNumberConverter implements Converter<Short> {
@Override
public
Short
convertToJavaData
(
CellData
cellData
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
cellData
.
get
Double
Value
().
shortValue
();
return
cellData
.
get
Number
Value
().
shortValue
();
}
@Override
public
CellData
convertToExcelData
(
Short
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
value
.
doubleValue
(
));
return
new
CellData
(
BigDecimal
.
valueOf
(
value
));
}
}
src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java
浏览文件 @
33929c71
package
com.alibaba.excel.converters.string
;
import
java.math.BigDecimal
;
import
org.apache.poi.hssf.usermodel.HSSFDateUtil
;
import
org.apache.poi.ss.usermodel.DateUtil
;
...
...
@@ -34,30 +36,30 @@ public class StringNumberConverter implements Converter<String> {
// If there are "DateTimeFormat", read as date
if
(
contentProperty
!=
null
&&
contentProperty
.
getDateTimeFormatProperty
()
!=
null
)
{
return
DateUtils
.
format
(
HSSFDateUtil
.
getJavaDate
(
cellData
.
getD
oubleValue
(),
DateUtil
.
getJavaDate
(
cellData
.
getNumberValue
().
d
oubleValue
(),
contentProperty
.
getDateTimeFormatProperty
().
getUse1904windowing
(),
null
),
contentProperty
.
getDateTimeFormatProperty
().
getFormat
());
}
// If there are "NumberFormat", read as number
if
(
contentProperty
!=
null
&&
contentProperty
.
getNumberFormatProperty
()
!=
null
)
{
return
NumberUtils
.
format
(
cellData
.
get
Double
Value
(),
contentProperty
);
return
NumberUtils
.
format
(
cellData
.
get
Number
Value
(),
contentProperty
);
}
// Excel defines formatting
if
(
cellData
.
getDataFormat
()
!=
null
)
{
if
(
DateUtil
.
isADateFormat
(
cellData
.
getDataFormat
(),
cellData
.
getDataFormatString
()))
{
return
DateUtils
.
format
(
HSSFDateUtil
.
getJavaDate
(
cellData
.
getD
oubleValue
(),
return
DateUtils
.
format
(
DateUtil
.
getJavaDate
(
cellData
.
getNumberValue
().
d
oubleValue
(),
globalConfiguration
.
getUse1904windowing
(),
null
));
}
else
{
return
NumberUtils
.
format
(
cellData
.
get
Double
Value
(),
contentProperty
);
return
NumberUtils
.
format
(
cellData
.
get
Number
Value
(),
contentProperty
);
}
}
// Default conversion number
return
NumberUtils
.
format
(
cellData
.
get
Double
Value
(),
contentProperty
);
return
NumberUtils
.
format
(
cellData
.
get
Number
Value
(),
contentProperty
);
}
@Override
public
CellData
convertToExcelData
(
String
value
,
ExcelContentProperty
contentProperty
,
GlobalConfiguration
globalConfiguration
)
{
return
new
CellData
(
Double
.
valueOf
(
value
));
return
new
CellData
(
new
BigDecimal
(
value
));
}
}
src/main/java/com/alibaba/excel/metadata/CellData.java
浏览文件 @
33929c71
package
com.alibaba.excel.metadata
;
import
java.math.BigDecimal
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.util.StringUtils
;
/**
* Excel internal cell data
* Excel internal cell data.
*
* <p>
*
* @author Jiaju Zhuang
*/
public
class
CellData
{
public
class
CellData
<
T
>
{
private
CellDataTypeEnum
type
;
/**
* {@link CellDataTypeEnum#NUMBER}
*/
private
Double
double
Value
;
private
BigDecimal
number
Value
;
/**
* {@link CellDataTypeEnum#STRING} and{@link CellDataTypeEnum#ERROR}
*/
...
...
@@ -33,10 +37,14 @@ public class CellData {
* The string of number formatting.Currently only supported when reading
*/
private
String
dataFormatString
;
/**
* The resulting converted data.
*/
private
T
data
;
public
CellData
(
CellData
other
)
{
public
CellData
(
CellData
<
T
>
other
)
{
this
.
type
=
other
.
type
;
this
.
doubleValue
=
other
.
double
Value
;
this
.
numberValue
=
other
.
number
Value
;
this
.
stringValue
=
other
.
stringValue
;
this
.
booleanValue
=
other
.
booleanValue
;
this
.
formula
=
other
.
formula
;
...
...
@@ -44,6 +52,19 @@ public class CellData {
this
.
imageValue
=
other
.
imageValue
;
this
.
dataFormat
=
other
.
dataFormat
;
this
.
dataFormatString
=
other
.
dataFormatString
;
this
.
data
=
other
.
data
;
}
public
CellData
()
{}
public
CellData
(
T
data
)
{
this
.
data
=
data
;
}
public
CellData
(
T
data
,
String
formulaValue
)
{
this
.
data
=
data
;
this
.
formula
=
Boolean
.
TRUE
;
this
.
formulaValue
=
formulaValue
;
}
public
CellData
(
String
stringValue
)
{
...
...
@@ -62,12 +83,12 @@ public class CellData {
this
.
formula
=
Boolean
.
FALSE
;
}
public
CellData
(
Double
double
Value
)
{
if
(
double
Value
==
null
)
{
public
CellData
(
BigDecimal
number
Value
)
{
if
(
number
Value
==
null
)
{
throw
new
IllegalArgumentException
(
"DoubleValue can not be null"
);
}
this
.
type
=
CellDataTypeEnum
.
NUMBER
;
this
.
doubleValue
=
double
Value
;
this
.
numberValue
=
number
Value
;
this
.
formula
=
Boolean
.
FALSE
;
}
...
...
@@ -105,12 +126,12 @@ public class CellData {
this
.
type
=
type
;
}
public
Double
getDouble
Value
()
{
return
double
Value
;
public
BigDecimal
getNumber
Value
()
{
return
number
Value
;
}
public
void
set
DoubleValue
(
Double
double
Value
)
{
this
.
doubleValue
=
double
Value
;
public
void
set
NumberValue
(
BigDecimal
number
Value
)
{
this
.
numberValue
=
number
Value
;
}
public
String
getStringValue
()
{
...
...
@@ -169,6 +190,14 @@ public class CellData {
this
.
dataFormatString
=
dataFormatString
;
}
public
T
getData
()
{
return
data
;
}
public
void
setData
(
T
data
)
{
this
.
data
=
data
;
}
/**
* Ensure that the object does not appear null
*/
...
...
@@ -181,7 +210,7 @@ public class CellData {
}
return
;
case
NUMBER:
if
(
double
Value
==
null
)
{
if
(
number
Value
==
null
)
{
type
=
CellDataTypeEnum
.
EMPTY
;
}
return
;
...
...
@@ -198,7 +227,7 @@ public class CellData {
public
String
toString
()
{
switch
(
type
)
{
case
NUMBER:
return
double
Value
.
toString
();
return
number
Value
.
toString
();
case
BOOLEAN:
return
booleanValue
.
toString
();
case
STRING:
...
...
src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java
浏览文件 @
33929c71
...
...
@@ -49,7 +49,7 @@ public class ModelBuildEventListener extends AbstractIgnoreExceptionReadListener
map
.
put
(
entry
.
getKey
(),
null
);
continue
;
}
map
.
put
(
entry
.
getKey
(),
(
String
)
ConverterUtils
.
convertToJavaObject
(
cellData
,
String
.
class
,
null
,
map
.
put
(
entry
.
getKey
(),
(
String
)
ConverterUtils
.
convertToJavaObject
(
cellData
,
null
,
null
,
currentReadHolder
.
converterMap
(),
currentReadHolder
.
globalConfiguration
()));
}
return
map
;
...
...
@@ -62,7 +62,7 @@ public class ModelBuildEventListener extends AbstractIgnoreExceptionReadListener
list
.
add
(
null
);
continue
;
}
list
.
add
((
String
)
ConverterUtils
.
convertToJavaObject
(
cellData
,
String
.
class
,
null
,
list
.
add
((
String
)
ConverterUtils
.
convertToJavaObject
(
cellData
,
null
,
null
,
currentReadHolder
.
converterMap
(),
currentReadHolder
.
globalConfiguration
()));
}
return
list
;
...
...
@@ -91,7 +91,7 @@ public class ModelBuildEventListener extends AbstractIgnoreExceptionReadListener
continue
;
}
ExcelContentProperty
excelContentProperty
=
contentPropertyMap
.
get
(
index
);
Object
value
=
ConverterUtils
.
convertToJavaObject
(
cellData
,
excelContentProperty
.
getField
()
.
getType
()
,
Object
value
=
ConverterUtils
.
convertToJavaObject
(
cellData
,
excelContentProperty
.
getField
(),
excelContentProperty
,
currentReadHolder
.
converterMap
(),
currentReadHolder
.
globalConfiguration
());
if
(
value
!=
null
)
{
map
.
put
(
excelContentProperty
.
getField
().
getName
(),
value
);
...
...
src/main/java/com/alibaba/excel/util/ConverterUtils.java
浏览文件 @
33929c71
package
com.alibaba.excel.util
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.ParameterizedType
;
import
java.lang.reflect.Type
;
import
java.util.HashMap
;
import
java.util.Map
;
...
...
@@ -56,17 +59,48 @@ public class ConverterUtils {
* Convert it into a Java object
*
* @param cellData
* @param
clazz
* @param
field
* @param contentProperty
* @param converterMap
* @param globalConfiguration
* @return
*/
public
static
Object
convertToJavaObject
(
CellData
cellData
,
Class
clazz
,
ExcelContentProperty
contentProperty
,
public
static
Object
convertToJavaObject
(
CellData
cellData
,
Field
field
,
ExcelContentProperty
contentProperty
,
Map
<
String
,
Converter
>
converterMap
,
GlobalConfiguration
globalConfiguration
)
{
Class
clazz
;
if
(
field
==
null
)
{
clazz
=
String
.
class
;
}
else
{
clazz
=
field
.
getType
();
}
if
(
clazz
==
CellData
.
class
)
{
return
new
CellData
(
cellData
);
Type
type
=
field
.
getGenericType
();
Class
classGeneric
;
if
(
type
instanceof
ParameterizedType
)
{
ParameterizedType
parameterizedType
=
(
ParameterizedType
)
type
;
classGeneric
=
(
Class
)((
ParameterizedType
)
parameterizedType
.
getActualTypeArguments
()[
0
]).
getRawType
();
}
else
{
classGeneric
=
String
.
class
;
}
CellData
cellDataReturn
=
new
CellData
(
cellData
);
cellDataReturn
.
setData
(
doConvertToJavaObject
(
cellData
,
classGeneric
,
contentProperty
,
converterMap
,
globalConfiguration
));
return
cellDataReturn
;
}
return
doConvertToJavaObject
(
cellData
,
clazz
,
contentProperty
,
converterMap
,
globalConfiguration
);
}
/**
*
* @param cellData
* @param clazz
* @param contentProperty
* @param converterMap
* @param globalConfiguration
* @return
*/
private
static
Object
doConvertToJavaObject
(
CellData
cellData
,
Class
clazz
,
ExcelContentProperty
contentProperty
,
Map
<
String
,
Converter
>
converterMap
,
GlobalConfiguration
globalConfiguration
)
{
Converter
converter
=
null
;
if
(
contentProperty
!=
null
)
{
converter
=
contentProperty
.
getConverter
();
...
...
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
浏览文件 @
33929c71
...
...
@@ -21,6 +21,7 @@ import com.alibaba.excel.context.WriteContext;
import
com.alibaba.excel.context.WriteContextImpl
;
import
com.alibaba.excel.converters.Converter
;
import
com.alibaba.excel.converters.ConverterKeyBuild
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.enums.HeadKindEnum
;
import
com.alibaba.excel.exception.ExcelDataConvertException
;
import
com.alibaba.excel.exception.ExcelGenerateException
;
...
...
@@ -291,16 +292,12 @@ public class ExcelBuilderImpl implements ExcelBuilder {
private
CellData
converterAndSet
(
WriteHolder
currentWriteHolder
,
Class
clazz
,
Cell
cell
,
Object
value
,
ExcelContentProperty
excelContentProperty
)
{
if
(
value
==
null
)
{
return
n
ull
;
return
n
ew
CellData
()
;
}
if
(
value
instanceof
String
&&
currentWriteHolder
.
globalConfiguration
().
getAutoTrim
())
{
value
=
((
String
)
value
).
trim
();
}
CellData
cellData
=
convert
(
currentWriteHolder
,
clazz
,
cell
,
value
,
excelContentProperty
);
if
(
cellData
==
null
||
cellData
.
getType
()
==
null
)
{
throw
new
ExcelDataConvertException
(
"Convert data:"
+
value
+
" return null,at row:"
+
cell
.
getRow
().
getRowNum
());
}
if
(
cellData
.
getFormula
()
!=
null
&&
cellData
.
getFormula
())
{
cell
.
setCellFormula
(
cellData
.
getFormulaValue
());
}
...
...
@@ -312,11 +309,13 @@ public class ExcelBuilderImpl implements ExcelBuilder {
cell
.
setCellValue
(
cellData
.
getBooleanValue
());
return
cellData
;
case
NUMBER:
cell
.
setCellValue
(
cellData
.
get
D
oubleValue
());
cell
.
setCellValue
(
cellData
.
get
NumberValue
().
d
oubleValue
());
return
cellData
;
case
IMAGE:
setImageValue
(
cellData
,
cell
);
return
cellData
;
case
EMPTY:
return
cellData
;
default
:
throw
new
ExcelDataConvertException
(
"Not supported data:"
+
value
+
" return type:"
+
cell
.
getCellType
()
+
"at row:"
+
cell
.
getRow
().
getRowNum
());
...
...
@@ -346,9 +345,31 @@ public class ExcelBuilderImpl implements ExcelBuilder {
private
CellData
convert
(
WriteHolder
currentWriteHolder
,
Class
clazz
,
Cell
cell
,
Object
value
,
ExcelContentProperty
excelContentProperty
)
{
// This means that the user has defined the data.
if
(
value
instanceof
CellData
)
{
return
(
CellData
)
value
;
CellData
cellDataValue
=
(
CellData
)
value
;
if
(
cellDataValue
.
getType
()
!=
null
)
{
return
cellDataValue
;
}
else
{
if
(
cellDataValue
.
getData
()
==
null
)
{
cellDataValue
.
setType
(
CellDataTypeEnum
.
EMPTY
);
return
cellDataValue
;
}
}
CellData
cellDataReturn
=
doConvert
(
currentWriteHolder
,
cellDataValue
.
getData
().
getClass
(),
cell
,
cellDataValue
.
getData
(),
excelContentProperty
);
// The formula information is subject to user input
if
(
cellDataValue
.
getFormula
()
!=
null
)
{
cellDataReturn
.
setFormula
(
cellDataValue
.
getFormula
());
cellDataReturn
.
setFormulaValue
(
cellDataValue
.
getFormulaValue
());
}
return
cellDataReturn
;
}
return
doConvert
(
currentWriteHolder
,
clazz
,
cell
,
value
,
excelContentProperty
);
}
private
CellData
doConvert
(
WriteHolder
currentWriteHolder
,
Class
clazz
,
Cell
cell
,
Object
value
,
ExcelContentProperty
excelContentProperty
)
{
Converter
converter
=
null
;
if
(
excelContentProperty
!=
null
)
{
converter
=
excelContentProperty
.
getConverter
();
...
...
@@ -368,6 +389,10 @@ public class ExcelBuilderImpl implements ExcelBuilder {
throw
new
ExcelDataConvertException
(
"Convert data:"
+
value
+
" error,at row:"
+
cell
.
getRow
().
getRowNum
(),
e
);
}
if
(
cellData
==
null
||
cellData
.
getType
()
==
null
)
{
throw
new
ExcelDataConvertException
(
"Convert data:"
+
value
+
" return null,at row:"
+
cell
.
getRow
().
getRowNum
());
}
return
cellData
;
}
}
src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java
浏览文件 @
33929c71
...
...
@@ -58,7 +58,7 @@ public class LongestMatchColumnWidthStyleStrategy extends AbstractColumnWidthSty
case
BOOLEAN:
return
cellData
.
getBooleanValue
().
toString
().
getBytes
().
length
;
case
NUMBER:
return
cellData
.
get
Double
Value
().
toString
().
getBytes
().
length
;
return
cellData
.
get
Number
Value
().
toString
().
getBytes
().
length
;
default
:
return
-
1
;
}
...
...
src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java
0 → 100644
浏览文件 @
33929c71
package
com.alibaba.easyexcel.test.temp.poi
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.ParameterizedType
;
import
java.lang.reflect.Type
;
import
org.apache.poi.ss.formula.functions.T
;
import
org.apache.poi.xssf.streaming.SXSSFCell
;
import
org.apache.poi.xssf.streaming.SXSSFRow
;
import
org.apache.poi.xssf.streaming.SXSSFSheet
;
import
org.apache.poi.xssf.streaming.SXSSFWorkbook
;
import
org.junit.Ignore
;
import
org.junit.Test
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.metadata.CellData
;
import
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl
;
/**
* 测试poi
*
* @author Jiaju Zhuang
**/
@Ignore
public
class
PoiWriteTest
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
PoiWriteTest
.
class
);
@Test
public
void
write
()
throws
IOException
{
FileOutputStream
fileOutputStream
=
new
FileOutputStream
(
"D://test//tt12.xlsx"
);
SXSSFWorkbook
sxxsFWorkbook
=
new
SXSSFWorkbook
();
SXSSFSheet
sheet
=
sxxsFWorkbook
.
createSheet
(
"t1"
);
SXSSFRow
row
=
sheet
.
createRow
(
0
);
SXSSFCell
cell1
=
row
.
createCell
(
0
);
cell1
.
setCellValue
(
1
);
SXSSFCell
cell2
=
row
.
createCell
(
1
);
cell2
.
setCellValue
(
1
);
SXSSFCell
cell3
=
row
.
createCell
(
2
);
cell3
.
setCellFormula
(
"=A1+B1"
);
sxxsFWorkbook
.
write
(
fileOutputStream
);
}
@Test
public
void
test
()
throws
Exception
{
Class
<
TestCell
>
clazz
=
TestCell
.
class
;
Field
field
=
clazz
.
getDeclaredField
(
"c2"
);
// 通过getDeclaredField可以获得成员变量,但是对于Map来说,仅仅可以知道它是个Map,无法知道键值对各自的数据类型
Type
gType
=
field
.
getGenericType
();
// 获得field的泛型类型
// 如果gType是ParameterizedType对象(参数化)
if
(
gType
instanceof
ParameterizedType
)
{
ParameterizedType
pType
=
(
ParameterizedType
)
gType
;
// 就把它转换成ParameterizedType对象
Type
[]
tArgs
=
pType
.
getActualTypeArguments
();
// 获得泛型类型的泛型参数(实际类型参数)
ParameterizedTypeImpl
c
=
(
ParameterizedTypeImpl
)
pType
.
getActualTypeArguments
()[
0
];
Class
ttt
=
c
.
getRawType
();
System
.
out
.
println
(
ttt
);
}
else
{
System
.
out
.
println
(
"出错!!!"
);
}
}
@Test
public
void
test2
()
throws
Exception
{
Class
<
TestCell
>
clazz
=
TestCell
.
class
;
Field
field
=
clazz
.
getDeclaredField
(
"c2"
);
// 通过getDeclaredField可以获得成员变量,但是对于Map来说,仅仅可以知道它是个Map,无法知道键值对各自的数据类型
Type
gType
=
field
.
getGenericType
();
// 获得field的泛型类型
// 如果gType是ParameterizedType对象(参数化)
if
(
gType
instanceof
ParameterizedType
)
{
ParameterizedType
pType
=
(
ParameterizedType
)
gType
;
// 就把它转换成ParameterizedType对象
Type
[]
tArgs
=
pType
.
getActualTypeArguments
();
// 获得泛型类型的泛型参数(实际类型参数)
ParameterizedTypeImpl
c
=
(
ParameterizedTypeImpl
)
pType
.
getActualTypeArguments
()[
0
];
Class
ttt
=
c
.
getRawType
();
System
.
out
.
println
(
ttt
);
}
else
{
System
.
out
.
println
(
"出错!!!"
);
}
}
}
src/test/java/com/alibaba/easyexcel/test/temp/poi/TestCell.java
0 → 100644
浏览文件 @
33929c71
package
com.alibaba.easyexcel.test.temp.poi
;
import
java.util.List
;
import
com.alibaba.excel.metadata.CellData
;
import
lombok.Data
;
/**
* TODO
*
* @author 罗成
**/
@Data
public
class
TestCell
{
private
CellData
c1
;
private
CellData
<
List
<
String
>>
c2
;
}
src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java
浏览文件 @
33929c71
...
...
@@ -24,7 +24,7 @@ public class HgTest {
@Test
public
void
hh
()
throws
IOException
{
List
<
Object
>
list
=
EasyExcel
.
read
(
new
FileInputStream
(
"D:\\test\\
商户不匹配工单信息收集表格
.xlsx"
)).
headRowNumber
(
0
).
sheet
().
doReadSync
();
EasyExcel
.
read
(
new
FileInputStream
(
"D:\\test\\
test
.xlsx"
)).
headRowNumber
(
0
).
sheet
().
doReadSync
();
for
(
Object
data
:
list
)
{
LOGGER
.
info
(
"返回数据:{}"
,
JSON
.
toJSONString
(
data
));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录