Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
金手指1668
easyexcel
提交
0530b09c
E
easyexcel
项目概览
金手指1668
/
easyexcel
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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 搜索 >>
未验证
提交
0530b09c
编写于
9月 17, 2019
作者:
庄家钜
提交者:
GitHub
9月 17, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #592 from alibaba/2.0.0-beta6
2.0.0 beta6
上级
ceba4388
ec569824
变更
23
隐藏空白更改
内联
并排
Showing
23 changed file
with
122 addition
and
72 deletion
+122
-72
pom.xml
pom.xml
+1
-1
quickstart.md
quickstart.md
+23
-11
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
+10
-7
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
-7
src/main/java/com/alibaba/excel/metadata/CellData.java
src/main/java/com/alibaba/excel/metadata/CellData.java
+13
-11
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
+1
-1
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/core/converter/ReadAllConverterDataListener.java
...cel/test/core/converter/ReadAllConverterDataListener.java
+2
-1
src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java
...est/java/com/alibaba/easyexcel/test/demo/web/WebTest.java
+1
-0
src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
...java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
+7
-4
src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java
...t/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java
+1
-1
update.md
update.md
+5
-0
未找到文件。
pom.xml
浏览文件 @
0530b09c
...
...
@@ -4,7 +4,7 @@
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.alibaba
</groupId>
<artifactId>
easyexcel
</artifactId>
<version>
2.0.0
-beta6
</version>
<version>
2.0.0
</version>
<packaging>
jar
</packaging>
<name>
easyexcel
</name>
...
...
quickstart.md
浏览文件 @
0530b09c
...
...
@@ -7,6 +7,8 @@
*
单个文件的并发写入、读取
*
读取图片
*
宏
#### 关于版本兼容
目前poi用的 4.0.1 建议检查是否该版本。如果看到
`NoClassDefFoundError`
或者
`ClassNotFoundException`
,请查看poi相关版本是否都为4.0.1。
#### 详细参数介绍
有些参数不知道怎么用,或者有些功能不知道用什么参数,参照:
[
详细参数介绍
](
/docs/API.md
)
#### 开源项目不容易,如果觉得本项目对您的工作还是有帮助的话,请在右上角帮忙点个★Star。
...
...
@@ -573,20 +575,26 @@ public class ComplexHeadData {
```
java
/**
* 重复多次写入
* <p>1. 创建excel对应的实体对象 参照{@link ComplexHeadData}
* <p>2. 使用{@link ExcelProperty}注解指定复杂的头
* <p>3. 直接调用二次写入即可
* <p>
* 1. 创建excel对应的实体对象 参照{@link ComplexHeadData}
* <p>
* 2. 使用{@link ExcelProperty}注解指定复杂的头
* <p>
* 3. 直接调用二次写入即可
*/
@Test
public
void
repeatedWrite
()
{
String
fileName
=
TestFileUtil
.
getPath
()
+
"repeatedWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里 需要指定写用哪个class去读
ExcelWriter
excelWriter
=
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
build
();
// 这里注意 如果同一个sheet只要创建一次
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
"模板"
).
build
();
// 第一次写入会创建头
excelWriter
.
write
(
data
(),
writeSheet
);
// 第二次写入会在上一次写入的最后一行后面写入
excelWriter
.
write
(
data
(),
writeSheet
);
// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来
for
(
int
i
=
0
;
i
<
5
;
i
++)
{
// 分页去数据库查询数据 这里可以去数据库查询每一页的数据
List
<
DemoData
>
data
=
data
();
excelWriter
.
write
(
data
,
writeSheet
);
}
/// 千万别忘记finish 会帮忙关闭流
excelWriter
.
finish
();
}
...
...
@@ -1038,14 +1046,18 @@ DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/ja
参照:
[
对象
](
#simpleWriteObject
)
就是名称变了下
##### 代码
```
java
/**
/**
* 文件下载
* <p>1. 创建excel对应的实体对象 参照{@link DownloadData}
* <p>2. 设置返回的 参数
* <p>3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大
* <p>
* 1. 创建excel对应的实体对象 参照{@link DownloadData}
* <p>
* 2. 设置返回的 参数
* <p>
* 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大
*/
@GetMapping
(
"download"
)
public
void
download
(
HttpServletResponse
response
)
throws
IOException
{
// 这里注意 有同学反应下载的文件名不对。这个时候 请别使用swagger 他会影像
response
.
setContentType
(
"application/vnd.ms-excel"
);
response
.
setCharacterEncoding
(
"utf-8"
);
response
.
setHeader
(
"Content-disposition"
,
"attachment;filename=demo.xlsx"
);
...
...
src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java
浏览文件 @
0530b09c
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
浏览文件 @
0530b09c
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
浏览文件 @
0530b09c
...
...
@@ -7,6 +7,9 @@ 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.Deque
;
import
java.util.LinkedList
;
import
java.util.Map
;
import
java.util.TreeMap
;
...
...
@@ -33,8 +36,7 @@ import com.alibaba.excel.util.StringUtils;
*/
public
class
DefaultCellHandler
implements
XlsxCellHandler
,
XlsxRowResultHolder
{
private
final
AnalysisContext
analysisContext
;
private
String
currentTag
;
private
String
currentCellIndex
;
private
Deque
<
String
>
currentTagDeque
=
new
LinkedList
<
String
>();
private
int
curCol
;
private
Map
<
Integer
,
CellData
>
curRowContent
=
new
TreeMap
<
Integer
,
CellData
>();
private
CellData
currentCellData
;
...
...
@@ -61,11 +63,10 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder
@Override
public
void
startHandle
(
String
name
,
Attributes
attributes
)
{
currentTag
=
name
;
currentTag
Deque
.
push
(
name
)
;
// start a cell
if
(
CELL_TAG
.
equals
(
name
))
{
currentCellIndex
=
attributes
.
getValue
(
ExcelXmlConstants
.
POSITION
);
curCol
=
PositionUtils
.
getCol
(
currentCellIndex
);
curCol
=
PositionUtils
.
getCol
(
attributes
.
getValue
(
ExcelXmlConstants
.
POSITION
));
// t="s" ,it's means String
// t="str" ,it's means String,but does not need to be read in the 'sharedStrings.xml'
...
...
@@ -100,6 +101,7 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder
@Override
public
void
endHandle
(
String
name
)
{
currentTagDeque
.
pop
();
if
(
CELL_VALUE_TAG
.
equals
(
name
))
{
// Have to go "sharedStrings.xml" and get it
if
(
currentCellData
.
getType
()
==
CellDataTypeEnum
.
STRING
)
{
...
...
@@ -133,6 +135,7 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder
if
(
StringUtils
.
isEmpty
(
currentCellValue
))
{
return
;
}
String
currentTag
=
currentTagDeque
.
peek
();
if
(
currentTag
==
null
)
{
return
;
}
...
...
@@ -162,8 +165,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
浏览文件 @
0530b09c
...
...
@@ -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
浏览文件 @
0530b09c
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
.
getDoubleValue
())
)
{
if
(
BigDecimal
.
ONE
.
compareTo
(
cellData
.
getNumberValue
())
==
0
)
{
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
浏览文件 @
0530b09c
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
浏览文件 @
0530b09c
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
浏览文件 @
0530b09c
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
浏览文件 @
0530b09c
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
浏览文件 @
0530b09c
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
浏览文件 @
0530b09c
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
浏览文件 @
0530b09c
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
浏览文件 @
0530b09c
package
com.alibaba.excel.converters.string
;
import
org.apache.poi.hssf.usermodel.HSSFDateUtil
;
import
java.math.BigDecimal
;
import
org.apache.poi.ss.usermodel.DateUtil
;
import
com.alibaba.excel.converters.Converter
;
...
...
@@ -34,30 +35,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
浏览文件 @
0530b09c
package
com.alibaba.excel.metadata
;
import
java.math.BigDecimal
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.util.StringUtils
;
...
...
@@ -13,7 +15,7 @@ public class CellData {
/**
* {@link CellDataTypeEnum#NUMBER}
*/
private
Double
double
Value
;
private
BigDecimal
number
Value
;
/**
* {@link CellDataTypeEnum#STRING} and{@link CellDataTypeEnum#ERROR}
*/
...
...
@@ -36,7 +38,7 @@ public class CellData {
public
CellData
(
CellData
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
;
...
...
@@ -62,12 +64,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 +107,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
()
{
...
...
@@ -181,7 +183,7 @@ public class CellData {
}
return
;
case
NUMBER:
if
(
double
Value
==
null
)
{
if
(
number
Value
==
null
)
{
type
=
CellDataTypeEnum
.
EMPTY
;
}
return
;
...
...
@@ -198,7 +200,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/write/ExcelBuilderImpl.java
浏览文件 @
0530b09c
...
...
@@ -312,7 +312,7 @@ 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
);
...
...
src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java
浏览文件 @
0530b09c
...
...
@@ -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/core/converter/ReadAllConverterDataListener.java
浏览文件 @
0530b09c
...
...
@@ -65,7 +65,8 @@ public class ReadAllConverterDataListener extends AnalysisEventListener<ReadAllC
Assert
.
assertEquals
(
data
.
getStringString
(),
"测试"
);
Assert
.
assertEquals
(
data
.
getStringError
(),
"#VALUE!"
);
Assert
.
assertEquals
(
data
.
getStringNumberDate
(),
"2020-01-01 01:01:01"
);
Assert
.
assertEquals
(
data
.
getStringFormulaNumber
(),
"2.0"
);
double
doubleStringFormulaNumber
=
new
BigDecimal
(
data
.
getStringFormulaNumber
()).
doubleValue
();
Assert
.
assertEquals
(
doubleStringFormulaNumber
,
2.0
,
0.0
);
Assert
.
assertEquals
(
data
.
getStringFormulaString
(),
"1测试"
);
LOGGER
.
debug
(
"First row:{}"
,
JSON
.
toJSONString
(
list
.
get
(
0
)));
}
...
...
src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java
浏览文件 @
0530b09c
...
...
@@ -33,6 +33,7 @@ public class WebTest {
*/
@GetMapping
(
"download"
)
public
void
download
(
HttpServletResponse
response
)
throws
IOException
{
// 这里注意 有同学反应下载的文件名不对。这个时候 请别使用swagger 他会影像
response
.
setContentType
(
"application/vnd.ms-excel"
);
response
.
setCharacterEncoding
(
"utf-8"
);
response
.
setHeader
(
"Content-disposition"
,
"attachment;filename=demo.xlsx"
);
...
...
src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
浏览文件 @
0530b09c
...
...
@@ -108,11 +108,14 @@ public class WriteTest {
String
fileName
=
TestFileUtil
.
getPath
()
+
"repeatedWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里 需要指定写用哪个class去读
ExcelWriter
excelWriter
=
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
build
();
// 这里注意 如果同一个sheet只要创建一次
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
"模板"
).
build
();
// 第一次写入会创建头
excelWriter
.
write
(
data
(),
writeSheet
);
// 第二次写入会在上一次写入的最后一行后面写入
excelWriter
.
write
(
data
(),
writeSheet
);
// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来
for
(
int
i
=
0
;
i
<
5
;
i
++)
{
// 分页去数据库查询数据 这里可以去数据库查询每一页的数据
List
<
DemoData
>
data
=
data
();
excelWriter
.
write
(
data
,
writeSheet
);
}
/// 千万别忘记finish 会帮忙关闭流
excelWriter
.
finish
();
}
...
...
src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java
浏览文件 @
0530b09c
...
...
@@ -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\\
number
.xlsx"
)).
headRowNumber
(
0
).
sheet
().
doReadSync
();
for
(
Object
data
:
list
)
{
LOGGER
.
info
(
"返回数据:{}"
,
JSON
.
toJSONString
(
data
));
}
...
...
update.md
浏览文件 @
0530b09c
# 2.0.0
*
修复当cell为空可能会抛出空指针的bug
*
修复电话等长数字可能出现科学计数法的问题
[
Issue #583
](
https://github.com/alibaba/easyexcel/issues/583
)
*
升级为正式版
# 2.0.0-beta6
*
修复空行读取空指针异常
*
修复写入指定头为List
<List
<
String
>
>,但是数据用List
<Class>
导致的空指针
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录