Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
金手指1668
easyexcel
提交
88de089c
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,发现更多精彩内容 >>
提交
88de089c
编写于
1月 02, 2020
作者:
庄家钜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
填充时候支持根据`sheetName`定位`sheet`
上级
46266abc
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
126 addition
and
40 deletion
+126
-40
pom.xml
pom.xml
+1
-1
src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
...ibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
+4
-2
src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java
...excel/analysis/v07/handlers/ProcessResultCellHandler.java
+3
-2
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
...main/java/com/alibaba/excel/context/WriteContextImpl.java
+44
-24
src/main/java/com/alibaba/excel/util/PositionUtils.java
src/main/java/com/alibaba/excel/util/PositionUtils.java
+25
-0
src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java
...alibaba/excel/write/metadata/holder/WriteSheetHolder.java
+1
-5
src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java
...baba/excel/write/metadata/holder/WriteWorkbookHolder.java
+19
-6
src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java
...va/com/alibaba/easyexcel/test/core/fill/FillDataTest.java
+25
-0
src/test/resources/fill/byName.xls
src/test/resources/fill/byName.xls
+0
-0
src/test/resources/fill/byName.xlsx
src/test/resources/fill/byName.xlsx
+0
-0
update.md
update.md
+4
-0
未找到文件。
pom.xml
浏览文件 @
88de089c
...
...
@@ -4,7 +4,7 @@
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.alibaba
</groupId>
<artifactId>
easyexcel
</artifactId>
<version>
2.1.
4
</version>
<version>
2.1.
5
</version>
<packaging>
jar
</packaging>
<name>
easyexcel
</name>
...
...
src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
浏览文件 @
88de089c
...
...
@@ -36,7 +36,7 @@ import com.alibaba.excel.util.PositionUtils;
public
class
DefaultCellHandler
implements
XlsxCellHandler
,
XlsxRowResultHolder
{
private
final
AnalysisContext
analysisContext
;
private
Deque
<
String
>
currentTagDeque
=
new
LinkedList
<
String
>();
private
int
curCol
;
private
int
curCol
=
-
1
;
private
Map
<
Integer
,
CellData
>
curRowContent
=
new
LinkedHashMap
<
Integer
,
CellData
>();
private
CellData
currentCellData
;
private
StringBuilder
dataStringBuilder
;
...
...
@@ -55,6 +55,7 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder
@Override
public
void
clearResult
()
{
curRowContent
=
new
LinkedHashMap
<
Integer
,
CellData
>();
curCol
=-
1
;
}
@Override
...
...
@@ -68,7 +69,8 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder
currentTagDeque
.
push
(
name
);
// start a cell
if
(
CELL_TAG
.
equals
(
name
))
{
curCol
=
PositionUtils
.
getCol
(
attributes
.
getValue
(
ExcelXmlConstants
.
POSITION
));
curCol
=
PositionUtils
.
getCol
(
attributes
.
getValue
(
ExcelXmlConstants
.
POSITION
),
curCol
);
// t="s" ,it's means String
// t="str" ,it's means String,but does not need to be read in the 'sharedStrings.xml'
...
...
src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java
浏览文件 @
88de089c
...
...
@@ -20,6 +20,7 @@ import com.alibaba.excel.util.PositionUtils;
public
class
ProcessResultCellHandler
implements
XlsxCellHandler
{
private
AnalysisContext
analysisContext
;
private
XlsxRowResultHolder
rowResultHandler
;
private
int
currentRow
=
-
1
;
public
ProcessResultCellHandler
(
AnalysisContext
analysisContext
,
XlsxRowResultHolder
rowResultHandler
)
{
this
.
analysisContext
=
analysisContext
;
...
...
@@ -33,9 +34,9 @@ public class ProcessResultCellHandler implements XlsxCellHandler {
@Override
public
void
startHandle
(
String
name
,
Attributes
attributes
)
{
currentRow
=
PositionUtils
.
getRowByRowTagt
(
attributes
.
getValue
(
ExcelXmlConstants
.
POSITION
),
currentRow
);
analysisContext
.
readRowHolder
(
new
ReadRowHolder
(
PositionUtils
.
getRowByRowTagt
(
attributes
.
getValue
(
ExcelXmlConstants
.
POSITION
)),
analysisContext
.
readSheetHolder
().
getGlobalConfiguration
()));
new
ReadRowHolder
(
currentRow
,
analysisContext
.
readSheetHolder
().
getGlobalConfiguration
()));
}
@Override
...
...
src/main/java/com/alibaba/excel/context/WriteContextImpl.java
浏览文件 @
88de089c
...
...
@@ -103,37 +103,44 @@ public class WriteContextImpl implements WriteContext {
*/
@Override
public
void
currentSheet
(
WriteSheet
writeSheet
,
WriteTypeEnum
writeType
)
{
if
(
writeSheet
==
null
)
{
throw
new
IllegalArgumentException
(
"Sheet argument cannot be null"
);
boolean
illegalArgument
=
writeSheet
==
null
||
(
writeSheet
.
getSheetNo
()
==
null
&&
StringUtils
.
isEmpty
(
writeSheet
.
getSheetName
()));
if
(
illegalArgument
)
{
throw
new
IllegalArgumentException
(
"Sheet name and Sheet number can not be empty."
);
}
if
(
writeSheet
.
getSheetNo
()
==
null
||
writeSheet
.
getSheetNo
()
<=
0
)
{
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Sheet number is null"
);
}
writeSheet
.
setSheetNo
(
0
);
}
if
(
writeWorkbookHolder
.
getHasBeenInitializedSheet
().
containsKey
(
writeSheet
.
getSheetNo
()))
{
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Sheet:{} is already existed"
,
writeSheet
.
getSheetNo
());
}
writeSheetHolder
=
writeWorkbookHolder
.
getHasBeenInitializedSheet
().
get
(
writeSheet
.
getSheetNo
());
writeSheetHolder
.
setNewInitialization
(
Boolean
.
FALSE
);
writeTableHolder
=
null
;
currentWriteHolder
=
writeSheetHolder
;
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"CurrentConfiguration is writeSheetHolder"
);
}
if
(
selectSheetFromCache
(
writeSheet
))
{
return
;
}
initCurrentSheetHolder
(
writeSheet
);
WriteHandlerUtils
.
beforeSheetCreate
(
this
);
// Initialization current sheet
initSheet
(
writeType
);
}
private
boolean
selectSheetFromCache
(
WriteSheet
writeSheet
)
{
writeSheetHolder
=
null
;
if
(
writeSheet
.
getSheetNo
()
!=
null
)
{
writeSheetHolder
=
writeWorkbookHolder
.
getHasBeenInitializedSheetIndexMap
().
get
(
writeSheet
.
getSheetNo
());
}
if
(
writeSheetHolder
==
null
&&
!
StringUtils
.
isEmpty
(
writeSheet
.
getSheetName
()))
{
writeSheetHolder
=
writeWorkbookHolder
.
getHasBeenInitializedSheetNameMap
().
get
(
writeSheet
.
getSheetName
());
}
if
(
writeSheetHolder
==
null
)
{
return
false
;
}
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Sheet:{} is already existed"
,
writeSheet
.
getSheetNo
());
}
writeSheetHolder
.
setNewInitialization
(
Boolean
.
FALSE
);
writeTableHolder
=
null
;
currentWriteHolder
=
writeSheetHolder
;
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"CurrentConfiguration is writeSheetHolder"
);
}
return
true
;
}
private
void
initCurrentSheetHolder
(
WriteSheet
writeSheet
)
{
writeSheetHolder
=
new
WriteSheetHolder
(
writeSheet
,
writeWorkbookHolder
);
writeWorkbookHolder
.
getHasBeenInitializedSheet
().
put
(
writeSheet
.
getSheetNo
(),
writeSheetHolder
);
writeTableHolder
=
null
;
currentWriteHolder
=
writeSheetHolder
;
if
(
LOGGER
.
isDebugEnabled
())
{
...
...
@@ -142,15 +149,26 @@ public class WriteContextImpl implements WriteContext {
}
private
void
initSheet
(
WriteTypeEnum
writeType
)
{
WriteHandlerUtils
.
beforeSheetCreate
(
this
);
Sheet
currentSheet
;
try
{
currentSheet
=
writeWorkbookHolder
.
getWorkbook
().
getSheetAt
(
writeSheetHolder
.
getSheetNo
());
writeSheetHolder
.
setCachedSheet
(
writeWorkbookHolder
.
getCachedWorkbook
().
getSheetAt
(
writeSheetHolder
.
getSheetNo
()));
if
(
writeSheetHolder
.
getSheetNo
()
!=
null
)
{
currentSheet
=
writeWorkbookHolder
.
getWorkbook
().
getSheetAt
(
writeSheetHolder
.
getSheetNo
());
writeSheetHolder
.
setCachedSheet
(
writeWorkbookHolder
.
getCachedWorkbook
().
getSheetAt
(
writeSheetHolder
.
getSheetNo
()));
}
else
{
// sheet name must not null
currentSheet
=
writeWorkbookHolder
.
getWorkbook
().
getSheet
(
writeSheetHolder
.
getSheetName
());
writeSheetHolder
.
setCachedSheet
(
writeWorkbookHolder
.
getCachedWorkbook
().
getSheet
(
writeSheetHolder
.
getSheetName
()));
}
}
catch
(
Exception
e
)
{
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Can not find sheet:{} ,now create it"
,
writeSheetHolder
.
getSheetNo
());
}
if
(
StringUtils
.
isEmpty
(
writeSheetHolder
.
getSheetName
()))
{
writeSheetHolder
.
setSheetName
(
writeSheetHolder
.
getSheetNo
().
toString
());
}
currentSheet
=
WorkBookUtil
.
createSheet
(
writeWorkbookHolder
.
getWorkbook
(),
writeSheetHolder
.
getSheetName
());
writeSheetHolder
.
setCachedSheet
(
currentSheet
);
}
...
...
@@ -160,6 +178,8 @@ public class WriteContextImpl implements WriteContext {
// Initialization head
initHead
(
writeSheetHolder
.
excelWriteHeadProperty
());
}
writeWorkbookHolder
.
getHasBeenInitializedSheetIndexMap
().
put
(
writeSheetHolder
.
getSheetNo
(),
writeSheetHolder
);
writeWorkbookHolder
.
getHasBeenInitializedSheetNameMap
().
put
(
writeSheetHolder
.
getSheetName
(),
writeSheetHolder
);
}
public
void
initHead
(
ExcelWriteHeadProperty
excelWriteHeadProperty
)
{
...
...
src/main/java/com/alibaba/excel/util/PositionUtils.java
浏览文件 @
88de089c
...
...
@@ -14,6 +14,16 @@ public class PositionUtils {
}
return
row
;
}
public
static
int
getRowByRowTagt
(
String
rowTagt
,
int
before
)
{
int
row
;
if
(
rowTagt
!=
null
)
{
row
=
Integer
.
parseInt
(
rowTagt
)
-
1
;
return
row
;
}
else
{
return
before
+
1
;
}
}
public
static
int
getRow
(
String
currentCellIndex
)
{
int
row
=
0
;
...
...
@@ -35,4 +45,19 @@ public class PositionUtils {
}
return
col
-
1
;
}
public
static
int
getCol
(
String
currentCellIndex
,
int
before
)
{
int
col
=
0
;
if
(
currentCellIndex
!=
null
)
{
char
[]
currentIndex
=
currentCellIndex
.
replaceAll
(
"[0-9]"
,
""
).
toCharArray
();
for
(
int
i
=
0
;
i
<
currentIndex
.
length
;
i
++)
{
col
+=
(
currentIndex
[
i
]
-
'@'
)
*
Math
.
pow
(
26
,
(
currentIndex
.
length
-
i
-
1
));
}
return
col
-
1
;
}
else
{
return
before
+
1
;
}
}
}
src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java
浏览文件 @
88de089c
...
...
@@ -68,11 +68,7 @@ public class WriteSheetHolder extends AbstractWriteHolder {
super
(
writeSheet
,
writeWorkbookHolder
,
writeWorkbookHolder
.
getWriteWorkbook
().
getConvertAllFiled
());
this
.
writeSheet
=
writeSheet
;
this
.
sheetNo
=
writeSheet
.
getSheetNo
();
if
(
writeSheet
.
getSheetName
()
==
null
)
{
this
.
sheetName
=
writeSheet
.
getSheetNo
().
toString
();
}
else
{
this
.
sheetName
=
writeSheet
.
getSheetName
();
}
this
.
sheetName
=
writeSheet
.
getSheetName
();
this
.
parentWriteWorkbookHolder
=
writeWorkbookHolder
;
this
.
hasBeenInitializedTable
=
new
HashMap
<
Integer
,
WriteTableHolder
>();
if
(
writeWorkbookHolder
.
getTempTemplateInputStream
()
!=
null
)
{
...
...
src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java
浏览文件 @
88de089c
...
...
@@ -92,7 +92,11 @@ public class WriteWorkbookHolder extends AbstractWriteHolder {
/**
* prevent duplicate creation of sheet objects
*/
private
Map
<
Integer
,
WriteSheetHolder
>
hasBeenInitializedSheet
;
private
Map
<
Integer
,
WriteSheetHolder
>
hasBeenInitializedSheetIndexMap
;
/**
* prevent duplicate creation of sheet objects
*/
private
Map
<
String
,
WriteSheetHolder
>
hasBeenInitializedSheetNameMap
;
/**
* Whether the encryption
*/
...
...
@@ -148,7 +152,8 @@ public class WriteWorkbookHolder extends AbstractWriteHolder {
}
else
{
this
.
mandatoryUseInputStream
=
writeWorkbook
.
getMandatoryUseInputStream
();
}
this
.
hasBeenInitializedSheet
=
new
HashMap
<
Integer
,
WriteSheetHolder
>();
this
.
hasBeenInitializedSheetIndexMap
=
new
HashMap
<
Integer
,
WriteSheetHolder
>();
this
.
hasBeenInitializedSheetNameMap
=
new
HashMap
<
String
,
WriteSheetHolder
>();
this
.
password
=
writeWorkbook
.
getPassword
();
if
(
writeWorkbook
.
getInMemory
()
==
null
)
{
this
.
inMemory
=
Boolean
.
FALSE
;
...
...
@@ -197,12 +202,20 @@ public class WriteWorkbookHolder extends AbstractWriteHolder {
this
.
cachedWorkbook
=
cachedWorkbook
;
}
public
Map
<
Integer
,
WriteSheetHolder
>
getHasBeenInitializedSheet
()
{
return
hasBeenInitializedSheet
;
public
Map
<
Integer
,
WriteSheetHolder
>
getHasBeenInitializedSheetIndexMap
()
{
return
hasBeenInitializedSheetIndexMap
;
}
public
void
setHasBeenInitializedSheetIndexMap
(
Map
<
Integer
,
WriteSheetHolder
>
hasBeenInitializedSheetIndexMap
)
{
this
.
hasBeenInitializedSheetIndexMap
=
hasBeenInitializedSheetIndexMap
;
}
public
Map
<
String
,
WriteSheetHolder
>
getHasBeenInitializedSheetNameMap
()
{
return
hasBeenInitializedSheetNameMap
;
}
public
void
setHasBeenInitializedSheet
(
Map
<
Integer
,
WriteSheetHolder
>
hasBeenInitializedSheet
)
{
this
.
hasBeenInitializedSheet
=
hasBeenInitializedSheet
;
public
void
setHasBeenInitializedSheet
NameMap
(
Map
<
String
,
WriteSheetHolder
>
hasBeenInitializedSheetNameMap
)
{
this
.
hasBeenInitializedSheet
NameMap
=
hasBeenInitializedSheetNameMap
;
}
public
WriteWorkbook
getWriteWorkbook
()
{
...
...
src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java
浏览文件 @
88de089c
...
...
@@ -39,6 +39,10 @@ public class FillDataTest {
private
static
File
horizontalFillTemplate07
;
private
static
File
fileHorizontal03
;
private
static
File
horizontalFillTemplate03
;
private
static
File
byName07
;
private
static
File
byName03
;
private
static
File
byNameTemplate07
;
private
static
File
byNameTemplate03
;
@BeforeClass
public
static
void
init
()
{
...
...
@@ -54,6 +58,10 @@ public class FillDataTest {
horizontalFillTemplate07
=
TestFileUtil
.
readFile
(
"fill"
+
File
.
separator
+
"horizontal.xlsx"
);
fileHorizontal03
=
TestFileUtil
.
createNewFile
(
"fillHorizontal03.xls"
);
horizontalFillTemplate03
=
TestFileUtil
.
readFile
(
"fill"
+
File
.
separator
+
"horizontal.xls"
);
byName07
=
TestFileUtil
.
createNewFile
(
"byName07.xlsx"
);
byNameTemplate07
=
TestFileUtil
.
readFile
(
"fill"
+
File
.
separator
+
"byName.xlsx"
);
byName03
=
TestFileUtil
.
createNewFile
(
"byName03.xls"
);
byNameTemplate03
=
TestFileUtil
.
readFile
(
"fill"
+
File
.
separator
+
"byName.xls"
);
}
@Test
...
...
@@ -86,6 +94,23 @@ public class FillDataTest {
horizontalFill
(
fileHorizontal03
,
horizontalFillTemplate03
);
}
@Test
public
void
t07ByNameFill07
()
{
byNameFill
(
byName07
,
byNameTemplate07
);
}
@Test
public
void
t08ByNameFill03
()
{
byNameFill
(
byName03
,
byNameTemplate03
);
}
private
void
byNameFill
(
File
file
,
File
template
)
{
FillData
fillData
=
new
FillData
();
fillData
.
setName
(
"张三"
);
fillData
.
setNumber
(
5.2
);
EasyExcel
.
write
(
file
,
FillData
.
class
).
withTemplate
(
template
).
sheet
(
"Sheet2"
).
doFill
(
fillData
);
}
private
void
horizontalFill
(
File
file
,
File
template
)
{
ExcelWriter
excelWriter
=
EasyExcel
.
write
(
file
).
withTemplate
(
template
).
build
();
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
().
build
();
...
...
src/test/resources/fill/byName.xls
0 → 100644
浏览文件 @
88de089c
文件已添加
src/test/resources/fill/byName.xlsx
0 → 100644
浏览文件 @
88de089c
文件已添加
update.md
浏览文件 @
88de089c
# 2.1.5
*
修复部分xlsx没有行号读取异常
*
填充时候支持根据
`sheetName`
定位
`sheet`
# 2.1.4
*
新增参数
`useDefaultListener`
可以排除默认对象转换
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录