Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
不停的脚步
easyexcel
提交
13ca08e1
E
easyexcel
项目概览
不停的脚步
/
easyexcel
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
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,发现更多精彩内容 >>
提交
13ca08e1
编写于
3月 14, 2020
作者:
庄家钜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
添加支持批注
上级
6ed61461
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
186 addition
and
283 deletion
+186
-283
src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
...in/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
+12
-9
src/main/java/com/alibaba/excel/analysis/v07/XlsxCellHandler.java
.../java/com/alibaba/excel/analysis/v07/XlsxCellHandler.java
+0
-45
src/main/java/com/alibaba/excel/analysis/v07/XlsxHandlerFactory.java
...va/com/alibaba/excel/analysis/v07/XlsxHandlerFactory.java
+1
-0
src/main/java/com/alibaba/excel/analysis/v07/XlsxRowHandler.java
...n/java/com/alibaba/excel/analysis/v07/XlsxRowHandler.java
+0
-81
src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
.../java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
+39
-59
src/main/java/com/alibaba/excel/analysis/v07/handlers/CountRowCellHandler.java
...baba/excel/analysis/v07/handlers/CountRowCellHandler.java
+4
-22
src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
...ibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
+0
-17
src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java
...excel/analysis/v07/handlers/ProcessResultCellHandler.java
+8
-31
src/main/java/com/alibaba/excel/analysis/v07/handlers/XlsxCellHandler.java
.../alibaba/excel/analysis/v07/handlers/XlsxCellHandler.java
+29
-0
src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java
.../analysis/v07/handlers/sax/SharedStringsTableHandler.java
+1
-1
src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java
...ibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java
+58
-0
src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java
...n/java/com/alibaba/excel/context/AnalysisContextImpl.java
+2
-2
src/main/java/com/alibaba/excel/context/xlsx/XlsxReadContext.java
.../java/com/alibaba/excel/context/xlsx/XlsxReadContext.java
+0
-2
src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadSheetHolder.java
.../excel/read/metadata/holder/xlsx/XlsxReadSheetHolder.java
+3
-0
src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadWorkbookHolder.java
...cel/read/metadata/holder/xlsx/XlsxReadWorkbookHolder.java
+13
-0
src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java
...a/excel/read/processor/DefaultAnalysisEventProcessor.java
+7
-5
src/main/java/com/alibaba/excel/util/SheetUtils.java
src/main/java/com/alibaba/excel/util/SheetUtils.java
+9
-9
未找到文件。
src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
浏览文件 @
13ca08e1
...
...
@@ -14,9 +14,10 @@ import org.slf4j.LoggerFactory;
import
com.alibaba.excel.analysis.v03.XlsSaxAnalyser
;
import
com.alibaba.excel.analysis.v07.XlsxSaxAnalyser
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.context.AnalysisContextImpl
;
import
com.alibaba.excel.context.xls.DefaultXlsReadContext
;
import
com.alibaba.excel.context.xls.XlsReadContext
;
import
com.alibaba.excel.context.xlsx.DefaultXlsxReadContext
;
import
com.alibaba.excel.context.xlsx.XlsxReadContext
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.exception.ExcelAnalysisStopException
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
...
...
@@ -74,8 +75,9 @@ public class ExcelAnalyserImpl implements ExcelAnalyser {
try
{
decryptedStream
=
DocumentFactoryHelper
.
getDecryptedStream
(
poifsFileSystem
.
getRoot
().
getFileSystem
(),
readWorkbook
.
getPassword
());
analysisContext
=
new
AnalysisContextImpl
(
readWorkbook
,
ExcelTypeEnum
.
XLSX
);
excelReadExecutor
=
new
XlsxSaxAnalyser
(
analysisContext
,
decryptedStream
);
XlsxReadContext
xlsxReadContext
=
new
DefaultXlsxReadContext
(
readWorkbook
,
ExcelTypeEnum
.
XLSX
);
analysisContext
=
xlsxReadContext
;
excelReadExecutor
=
new
XlsxSaxAnalyser
(
xlsxReadContext
,
decryptedStream
);
return
;
}
finally
{
IOUtils
.
closeQuietly
(
decryptedStream
);
...
...
@@ -93,8 +95,9 @@ public class ExcelAnalyserImpl implements ExcelAnalyser {
excelReadExecutor
=
new
XlsSaxAnalyser
(
xlsReadContext
);
break
;
case
XLSX:
analysisContext
=
new
AnalysisContextImpl
(
readWorkbook
,
ExcelTypeEnum
.
XLSX
);
excelReadExecutor
=
new
XlsxSaxAnalyser
(
analysisContext
,
null
);
XlsxReadContext
xlsxReadContext
=
new
DefaultXlsxReadContext
(
readWorkbook
,
ExcelTypeEnum
.
XLSX
);
analysisContext
=
xlsxReadContext
;
excelReadExecutor
=
new
XlsxSaxAnalyser
(
xlsxReadContext
,
null
);
break
;
default
:
break
;
...
...
@@ -147,16 +150,16 @@ public class ExcelAnalyserImpl implements ExcelAnalyser {
}
try
{
if
((
readWorkbookHolder
instanceof
XlsxReadWorkbookHolder
)
&&
((
XlsxReadWorkbookHolder
)
readWorkbookHolder
).
getOpcPackage
()
!=
null
)
{
((
XlsxReadWorkbookHolder
)
readWorkbookHolder
).
getOpcPackage
().
revert
();
&&
((
XlsxReadWorkbookHolder
)
readWorkbookHolder
).
getOpcPackage
()
!=
null
)
{
((
XlsxReadWorkbookHolder
)
readWorkbookHolder
).
getOpcPackage
().
revert
();
}
}
catch
(
Throwable
t
)
{
throwable
=
t
;
}
try
{
if
((
readWorkbookHolder
instanceof
XlsReadWorkbookHolder
)
&&
((
XlsReadWorkbookHolder
)
readWorkbookHolder
).
getPoifsFileSystem
()
!=
null
)
{
((
XlsReadWorkbookHolder
)
readWorkbookHolder
).
getPoifsFileSystem
().
close
();
&&
((
XlsReadWorkbookHolder
)
readWorkbookHolder
).
getPoifsFileSystem
()
!=
null
)
{
((
XlsReadWorkbookHolder
)
readWorkbookHolder
).
getPoifsFileSystem
().
close
();
}
}
catch
(
Throwable
t
)
{
throwable
=
t
;
...
...
src/main/java/com/alibaba/excel/analysis/v07/XlsxCellHandler.java
已删除
100644 → 0
浏览文件 @
6ed61461
package
com.alibaba.excel.analysis.v07
;
import
org.xml.sax.Attributes
;
/**
* Cell handler
*
* @author Dan Zheng
*/
public
interface
XlsxCellHandler
{
/**
* Which tags are supported
*
* @param name
* Tag name
* @return Support parsing or not
*/
boolean
support
(
String
name
);
/**
* Start handle
*
* @param name
* Tag name
* @param attributes
* Tag attributes
*/
void
startHandle
(
String
name
,
Attributes
attributes
);
/**
* End handle
*
* @param name
* Tag name
*/
void
endHandle
(
String
name
);
/**
* Set the comment of the cell
*
* @param comment
* cell comment
*/
void
handleComments
(
String
comment
);
}
src/main/java/com/alibaba/excel/analysis/v07/XlsxHandlerFactory.java
浏览文件 @
13ca08e1
...
...
@@ -8,6 +8,7 @@ import org.apache.poi.xssf.model.StylesTable;
import
com.alibaba.excel.analysis.v07.handlers.CountRowCellHandler
;
import
com.alibaba.excel.analysis.v07.handlers.DefaultCellHandler
;
import
com.alibaba.excel.analysis.v07.handlers.ProcessResultCellHandler
;
import
com.alibaba.excel.analysis.v07.handlers.XlsxCellHandler
;
import
com.alibaba.excel.context.AnalysisContext
;
/**
...
...
src/main/java/com/alibaba/excel/analysis/v07/XlsxRowHandler.java
已删除
100644 → 0
浏览文件 @
6ed61461
package
com.alibaba.excel.analysis.v07
;
import
java.util.List
;
import
org.apache.poi.ss.util.CellAddress
;
import
org.apache.poi.xssf.model.CommentsTable
;
import
org.apache.poi.xssf.model.StylesTable
;
import
org.apache.poi.xssf.usermodel.XSSFComment
;
import
org.xml.sax.Attributes
;
import
org.xml.sax.SAXException
;
import
org.xml.sax.helpers.DefaultHandler
;
import
com.alibaba.excel.constant.ExcelXmlConstants
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.util.StringUtils
;
/**
*
* @author jipengfei
*/
public
class
XlsxRowHandler
extends
DefaultHandler
{
private
List
<
XlsxCellHandler
>
cellHandlers
;
private
XlsxRowResultHolder
rowResultHolder
;
private
CommentsTable
commentsTable
;
public
XlsxRowHandler
(
AnalysisContext
analysisContext
,
StylesTable
stylesTable
,
CommentsTable
commentsTable
)
{
this
(
analysisContext
,
stylesTable
);
this
.
commentsTable
=
commentsTable
;
}
public
XlsxRowHandler
(
AnalysisContext
analysisContext
,
StylesTable
stylesTable
)
{
this
.
cellHandlers
=
XlsxHandlerFactory
.
buildCellHandlers
(
analysisContext
,
stylesTable
);
for
(
XlsxCellHandler
cellHandler
:
cellHandlers
)
{
if
(
cellHandler
instanceof
XlsxRowResultHolder
)
{
this
.
rowResultHolder
=
(
XlsxRowResultHolder
)
cellHandler
;
break
;
}
}
}
@Override
public
void
startElement
(
String
uri
,
String
localName
,
String
name
,
Attributes
attributes
)
throws
SAXException
{
for
(
XlsxCellHandler
cellHandler
:
cellHandlers
)
{
if
(
cellHandler
.
support
(
name
))
{
cellHandler
.
startHandle
(
name
,
attributes
);
handleComment
(
cellHandler
,
attributes
.
getValue
(
ExcelXmlConstants
.
POSITION
));
}
}
}
@Override
public
void
endElement
(
String
uri
,
String
localName
,
String
name
)
throws
SAXException
{
for
(
XlsxCellHandler
cellHandler
:
cellHandlers
)
{
if
(
cellHandler
.
support
(
name
))
{
cellHandler
.
endHandle
(
name
);
}
}
}
@Override
public
void
characters
(
char
[]
ch
,
int
start
,
int
length
)
throws
SAXException
{
if
(
rowResultHolder
!=
null
)
{
rowResultHolder
.
appendCurrentCellValue
(
ch
,
start
,
length
);
}
}
private
void
handleComment
(
XlsxCellHandler
cellHandler
,
String
address
)
{
if
(
StringUtils
.
isEmpty
(
address
)
||
null
==
commentsTable
)
{
return
;
}
XSSFComment
xssfComment
=
commentsTable
.
getCellComments
().
get
(
new
CellAddress
(
address
));
if
(
null
==
xssfComment
)
{
return
;
}
String
comments
=
xssfComment
.
getString
().
toString
();
if
(!
StringUtils
.
isEmpty
(
comments
))
{
cellHandler
.
handleComments
(
comments
);
}
}
}
src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
浏览文件 @
13ca08e1
...
...
@@ -16,8 +16,6 @@ import org.apache.poi.openxml4j.opc.OPCPackage;
import
org.apache.poi.openxml4j.opc.PackageAccess
;
import
org.apache.poi.openxml4j.opc.PackagePart
;
import
org.apache.poi.xssf.eventusermodel.XSSFReader
;
import
org.apache.poi.xssf.model.CommentsTable
;
import
org.apache.poi.xssf.model.StylesTable
;
import
org.apache.poi.xssf.usermodel.XSSFRelation
;
import
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook
;
import
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbookPr
;
...
...
@@ -27,45 +25,34 @@ import org.xml.sax.InputSource;
import
org.xml.sax.XMLReader
;
import
com.alibaba.excel.analysis.ExcelReadExecutor
;
import
com.alibaba.excel.analysis.v07.handlers.sax.SharedStringsTableHandler
;
import
com.alibaba.excel.analysis.v07.handlers.sax.XlsxRowHandler
;
import
com.alibaba.excel.cache.ReadCache
;
import
com.alibaba.excel.context.
Analysis
Context
;
import
com.alibaba.excel.context.
xlsx.XlsxRead
Context
;
import
com.alibaba.excel.exception.ExcelAnalysisException
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
import
com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder
;
import
com.alibaba.excel.read.metadata.holder.
xlsx.Xlsx
ReadWorkbookHolder
;
import
com.alibaba.excel.util.CollectionUtils
;
import
com.alibaba.excel.util.FileUtils
;
import
com.alibaba.excel.util.SheetUtils
;
import
com.alibaba.excel.util.StringUtils
;
/**
*
* @author jipengfei
*/
public
class
XlsxSaxAnalyser
implements
ExcelReadExecutor
{
private
AnalysisContext
analysis
Context
;
private
XlsxReadContext
xlsxRead
Context
;
private
List
<
ReadSheet
>
sheetList
;
private
Map
<
Integer
,
InputStream
>
sheetMap
;
/**
* excel comments
* key: sheetNo
* value: CommentsTanle
*/
private
Map
<
Integer
,
CommentsTable
>
commentsTableMap
;
/**
* Current style information
*/
private
StylesTable
stylesTable
;
public
XlsxSaxAnalyser
(
AnalysisContext
analysisContext
,
InputStream
decryptedStream
)
throws
Exception
{
this
.
analysisContext
=
analysisContext
;
public
XlsxSaxAnalyser
(
XlsxReadContext
xlsxReadContext
,
InputStream
decryptedStream
)
throws
Exception
{
this
.
xlsxReadContext
=
xlsxReadContext
;
// Initialize cache
ReadWorkbookHolder
readWorkbookHolder
=
analysisContext
.
r
eadWorkbookHolder
();
XlsxReadWorkbookHolder
xlsxReadWorkbookHolder
=
xlsxReadContext
.
xlsxR
eadWorkbookHolder
();
OPCPackage
pkg
=
readOpcPackage
(
r
eadWorkbookHolder
,
decryptedStream
);
r
eadWorkbookHolder
.
setOpcPackage
(
pkg
);
OPCPackage
pkg
=
readOpcPackage
(
xlsxR
eadWorkbookHolder
,
decryptedStream
);
xlsxR
eadWorkbookHolder
.
setOpcPackage
(
pkg
);
ArrayList
<
PackagePart
>
packageParts
=
pkg
.
getPartsByContentType
(
XSSFRelation
.
SHARED_STRINGS
.
getContentType
());
...
...
@@ -73,20 +60,19 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
PackagePart
sharedStringsTablePackagePart
=
packageParts
.
get
(
0
);
// Specify default cache
defaultReadCache
(
r
eadWorkbookHolder
,
sharedStringsTablePackagePart
);
defaultReadCache
(
xlsxR
eadWorkbookHolder
,
sharedStringsTablePackagePart
);
// Analysis sharedStringsTable.xml
analysisSharedStringsTable
(
sharedStringsTablePackagePart
.
getInputStream
(),
r
eadWorkbookHolder
);
analysisSharedStringsTable
(
sharedStringsTablePackagePart
.
getInputStream
(),
xlsxR
eadWorkbookHolder
);
}
XSSFReader
xssfReader
=
new
XSSFReader
(
pkg
);
analysisUse1904WindowDate
(
xssfReader
,
r
eadWorkbookHolder
);
analysisUse1904WindowDate
(
xssfReader
,
xlsxR
eadWorkbookHolder
);
stylesTable
=
xssfReader
.
getStylesTable
(
);
xlsxReadWorkbookHolder
.
setStylesTable
(
xssfReader
.
getStylesTable
()
);
sheetList
=
new
ArrayList
<
ReadSheet
>();
sheetMap
=
new
HashMap
<
Integer
,
InputStream
>();
commentsTableMap
=
new
HashMap
<
Integer
,
CommentsTable
>();
XSSFReader
.
SheetIterator
ite
=
(
XSSFReader
.
SheetIterator
)
xssfReader
.
getSheetsData
();
XSSFReader
.
SheetIterator
ite
=
(
XSSFReader
.
SheetIterator
)
xssfReader
.
getSheetsData
();
int
index
=
0
;
if
(!
ite
.
hasNext
())
{
throw
new
ExcelAnalysisException
(
"Can not find any sheet!"
);
...
...
@@ -95,23 +81,19 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
InputStream
inputStream
=
ite
.
next
();
sheetList
.
add
(
new
ReadSheet
(
index
,
ite
.
getSheetName
()));
sheetMap
.
put
(
index
,
inputStream
);
CommentsTable
commentsTable
=
ite
.
getSheetComments
();
if
(
null
!=
commentsTable
)
{
commentsTableMap
.
put
(
index
,
commentsTable
);
}
index
++;
}
}
private
void
defaultReadCache
(
ReadWorkbookHolder
r
eadWorkbookHolder
,
PackagePart
sharedStringsTablePackagePart
)
{
ReadCache
readCache
=
r
eadWorkbookHolder
.
getReadCacheSelector
().
readCache
(
sharedStringsTablePackagePart
);
r
eadWorkbookHolder
.
setReadCache
(
readCache
);
readCache
.
init
(
analysis
Context
);
private
void
defaultReadCache
(
XlsxReadWorkbookHolder
xlsxR
eadWorkbookHolder
,
PackagePart
sharedStringsTablePackagePart
)
{
ReadCache
readCache
=
xlsxR
eadWorkbookHolder
.
getReadCacheSelector
().
readCache
(
sharedStringsTablePackagePart
);
xlsxR
eadWorkbookHolder
.
setReadCache
(
readCache
);
readCache
.
init
(
xlsxRead
Context
);
}
private
void
analysisUse1904WindowDate
(
XSSFReader
xssfReader
,
ReadWorkbookHolder
r
eadWorkbookHolder
)
private
void
analysisUse1904WindowDate
(
XSSFReader
xssfReader
,
XlsxReadWorkbookHolder
xlsxR
eadWorkbookHolder
)
throws
Exception
{
if
(
r
eadWorkbookHolder
.
globalConfiguration
().
getUse1904windowing
()
!=
null
)
{
if
(
xlsxR
eadWorkbookHolder
.
globalConfiguration
().
getUse1904windowing
()
!=
null
)
{
return
;
}
InputStream
workbookXml
=
xssfReader
.
getWorkbookData
();
...
...
@@ -119,38 +101,38 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
CTWorkbook
wb
=
ctWorkbook
.
getWorkbook
();
CTWorkbookPr
prefix
=
wb
.
getWorkbookPr
();
if
(
prefix
!=
null
&&
prefix
.
getDate1904
())
{
r
eadWorkbookHolder
.
getGlobalConfiguration
().
setUse1904windowing
(
Boolean
.
TRUE
);
xlsxR
eadWorkbookHolder
.
getGlobalConfiguration
().
setUse1904windowing
(
Boolean
.
TRUE
);
}
else
{
r
eadWorkbookHolder
.
getGlobalConfiguration
().
setUse1904windowing
(
Boolean
.
FALSE
);
xlsxR
eadWorkbookHolder
.
getGlobalConfiguration
().
setUse1904windowing
(
Boolean
.
FALSE
);
}
}
private
void
analysisSharedStringsTable
(
InputStream
sharedStringsTableInputStream
,
ReadWorkbookHolder
r
eadWorkbookHolder
)
throws
Exception
{
ContentHandler
handler
=
new
SharedStringsTableHandler
(
r
eadWorkbookHolder
.
getReadCache
());
XlsxReadWorkbookHolder
xlsxR
eadWorkbookHolder
)
throws
Exception
{
ContentHandler
handler
=
new
SharedStringsTableHandler
(
xlsxR
eadWorkbookHolder
.
getReadCache
());
parseXmlSource
(
sharedStringsTableInputStream
,
handler
);
r
eadWorkbookHolder
.
getReadCache
().
putFinished
();
xlsxR
eadWorkbookHolder
.
getReadCache
().
putFinished
();
}
private
OPCPackage
readOpcPackage
(
ReadWorkbookHolder
r
eadWorkbookHolder
,
InputStream
decryptedStream
)
private
OPCPackage
readOpcPackage
(
XlsxReadWorkbookHolder
xlsxR
eadWorkbookHolder
,
InputStream
decryptedStream
)
throws
Exception
{
if
(
decryptedStream
==
null
&&
r
eadWorkbookHolder
.
getFile
()
!=
null
)
{
return
OPCPackage
.
open
(
r
eadWorkbookHolder
.
getFile
());
if
(
decryptedStream
==
null
&&
xlsxR
eadWorkbookHolder
.
getFile
()
!=
null
)
{
return
OPCPackage
.
open
(
xlsxR
eadWorkbookHolder
.
getFile
());
}
if
(
r
eadWorkbookHolder
.
getMandatoryUseInputStream
())
{
if
(
xlsxR
eadWorkbookHolder
.
getMandatoryUseInputStream
())
{
if
(
decryptedStream
!=
null
)
{
return
OPCPackage
.
open
(
decryptedStream
);
}
else
{
return
OPCPackage
.
open
(
r
eadWorkbookHolder
.
getInputStream
());
return
OPCPackage
.
open
(
xlsxR
eadWorkbookHolder
.
getInputStream
());
}
}
File
readTempFile
=
FileUtils
.
createCacheTmpFile
();
r
eadWorkbookHolder
.
setTempFile
(
readTempFile
);
xlsxR
eadWorkbookHolder
.
setTempFile
(
readTempFile
);
File
tempFile
=
new
File
(
readTempFile
.
getPath
(),
UUID
.
randomUUID
().
toString
()
+
".xlsx"
);
if
(
decryptedStream
!=
null
)
{
FileUtils
.
writeToFile
(
tempFile
,
decryptedStream
);
}
else
{
FileUtils
.
writeToFile
(
tempFile
,
r
eadWorkbookHolder
.
getInputStream
());
FileUtils
.
writeToFile
(
tempFile
,
xlsxR
eadWorkbookHolder
.
getInputStream
());
}
return
OPCPackage
.
open
(
tempFile
,
PackageAccess
.
READ
);
}
...
...
@@ -164,7 +146,7 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
InputSource
inputSource
=
new
InputSource
(
inputStream
);
try
{
SAXParserFactory
saxFactory
;
String
xlsxSAXParserFactoryName
=
analysisContext
.
readWorkbookHolder
().
getXlsxSAX
ParserFactoryName
();
String
xlsxSAXParserFactoryName
=
xlsxReadContext
.
xlsxReadWorkbookHolder
().
getSax
ParserFactoryName
();
if
(
StringUtils
.
isEmpty
(
xlsxSAXParserFactoryName
))
{
saxFactory
=
SAXParserFactory
.
newInstance
();
}
else
{
...
...
@@ -194,16 +176,14 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
}
@Override
public
void
execute
(
List
<
ReadSheet
>
readSheetList
,
Boolean
readAll
)
{
public
void
execute
()
{
for
(
ReadSheet
readSheet
:
sheetList
)
{
readSheet
=
SheetUtils
.
match
(
readSheet
,
readSheetList
,
readAll
,
analysisContext
.
readWorkbookHolder
().
getGlobalConfiguration
());
readSheet
=
SheetUtils
.
match
(
readSheet
,
xlsxReadContext
);
if
(
readSheet
!=
null
)
{
analysisContext
.
currentSheet
(
readSheet
);
Integer
sheetNo
=
readSheet
.
getSheetNo
();
parseXmlSource
(
sheetMap
.
get
(
sheetNo
),
new
XlsxRowHandler
(
analysisContext
,
stylesTable
,
commentsTableMap
.
get
(
sheetNo
)));
xlsxReadContext
.
currentSheet
(
readSheet
);
parseXmlSource
(
sheetMap
.
get
(
readSheet
.
getSheetNo
()),
new
XlsxRowHandler
(
xlsxReadContext
));
// The last sheet is read
analysisContext
.
readSheetHolder
().
notifyAfterAllAnalysed
(
analysis
Context
);
xlsxReadContext
.
analysisEventProcessor
().
endSheet
(
xlsxRead
Context
);
}
}
}
...
...
src/main/java/com/alibaba/excel/analysis/v07/handlers/CountRowCellHandler.java
浏览文件 @
13ca08e1
package
com.alibaba.excel.analysis.v07.handlers
;
import
static
com
.
alibaba
.
excel
.
constant
.
ExcelXmlConstants
.
DIMENSION
;
import
static
com
.
alibaba
.
excel
.
constant
.
ExcelXmlConstants
.
DIMENSION_REF
;
import
org.xml.sax.Attributes
;
import
com.alibaba.excel.analysis.v07.XlsxCellHandler
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.context.xlsx.XlsxReadContext
;
/**
* Cell Handler
...
...
@@ -15,33 +13,17 @@ import com.alibaba.excel.context.AnalysisContext;
*/
public
class
CountRowCellHandler
implements
XlsxCellHandler
{
private
final
AnalysisContext
analysisContext
;
public
CountRowCellHandler
(
AnalysisContext
analysisContext
)
{
this
.
analysisContext
=
analysisContext
;
}
@Override
public
boolean
support
(
String
name
)
{
return
DIMENSION
.
equals
(
name
);
}
@Override
public
void
startHandle
(
String
name
,
Attributes
attributes
)
{
public
void
startHandle
(
XlsxReadContext
xlsxReadContext
,
String
name
,
Attributes
attributes
)
{
String
d
=
attributes
.
getValue
(
DIMENSION_REF
);
String
totalStr
=
d
.
substring
(
d
.
indexOf
(
":"
)
+
1
,
d
.
length
());
String
c
=
totalStr
.
toUpperCase
().
replaceAll
(
"[A-Z]"
,
""
);
analysis
Context
.
readSheetHolder
().
setApproximateTotalRowNumber
(
Integer
.
parseInt
(
c
));
xlsxRead
Context
.
readSheetHolder
().
setApproximateTotalRowNumber
(
Integer
.
parseInt
(
c
));
}
@Override
public
void
endHandle
(
String
name
)
{
}
@Override
public
void
handleComments
(
String
comment
)
{
public
void
endHandle
(
XlsxReadContext
xlsxReadContext
,
String
name
)
{
}
}
src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
浏览文件 @
13ca08e1
...
...
@@ -13,12 +13,10 @@ import java.util.LinkedHashMap;
import
java.util.LinkedList
;
import
java.util.Map
;
import
org.apache.poi.xssf.model.StylesTable
;
import
org.apache.poi.xssf.usermodel.XSSFCellStyle
;
import
org.apache.poi.xssf.usermodel.XSSFRichTextString
;
import
org.xml.sax.Attributes
;
import
com.alibaba.excel.analysis.v07.XlsxCellHandler
;
import
com.alibaba.excel.analysis.v07.XlsxRowResultHolder
;
import
com.alibaba.excel.constant.BuiltinFormats
;
import
com.alibaba.excel.constant.ExcelXmlConstants
;
...
...
@@ -42,16 +40,6 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder
private
StringBuilder
dataStringBuilder
;
private
StringBuilder
formulaStringBuilder
;
/**
* Current style information
*/
private
StylesTable
stylesTable
;
public
DefaultCellHandler
(
AnalysisContext
analysisContext
,
StylesTable
stylesTable
)
{
this
.
analysisContext
=
analysisContext
;
this
.
stylesTable
=
stylesTable
;
}
@Override
public
void
clearResult
()
{
curRowContent
=
new
LinkedHashMap
<
Integer
,
CellData
>();
...
...
@@ -157,11 +145,6 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder
}
}
@Override
public
void
handleComments
(
String
comment
)
{
// analysisContext.readRowHolder().addComments(curCol, comment);
}
@Override
public
void
appendCurrentCellValue
(
char
[]
ch
,
int
start
,
int
length
)
{
String
currentTag
=
currentTagDeque
.
peek
();
...
...
src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java
浏览文件 @
13ca08e1
package
com.alibaba.excel.analysis.v07.handlers
;
import
static
com
.
alibaba
.
excel
.
constant
.
ExcelXmlConstants
.
ROW_TAG
;
import
org.xml.sax.Attributes
;
import
com.alibaba.excel.analysis.v07.XlsxCellHandler
;
import
com.alibaba.excel.analysis.v07.XlsxRowResultHolder
;
import
com.alibaba.excel.constant.ExcelXmlConstants
;
import
com.alibaba.excel.context.
Analysis
Context
;
import
com.alibaba.excel.
read.listener.event.EachRowAnalysisFinishEvent
;
import
com.alibaba.excel.context.
xlsx.XlsxRead
Context
;
import
com.alibaba.excel.
enums.RowTypeEnum
;
import
com.alibaba.excel.read.metadata.holder.ReadRowHolder
;
import
com.alibaba.excel.util.PositionUtils
;
...
...
@@ -18,36 +14,17 @@ import com.alibaba.excel.util.PositionUtils;
* @author jipengfei
*/
public
class
ProcessResultCellHandler
implements
XlsxCellHandler
{
private
AnalysisContext
analysisContext
;
private
XlsxRowResultHolder
rowResultHandler
;
public
ProcessResultCellHandler
(
AnalysisContext
analysisContext
,
XlsxRowResultHolder
rowResultHandler
)
{
this
.
analysisContext
=
analysisContext
;
this
.
rowResultHandler
=
rowResultHandler
;
}
@Override
public
boolean
support
(
String
name
)
{
return
ROW_TAG
.
equals
(
name
);
}
@Override
public
void
startHandle
(
String
name
,
Attributes
attributes
)
{
analysis
Context
.
readRowHolder
(
new
ReadRowHolder
(
PositionUtils
.
getRowByRowTagt
(
attributes
.
getValue
(
ExcelXmlConstants
.
POSITION
)),
analysis
Context
.
readSheetHolder
().
getGlobalConfiguration
()));
public
void
startHandle
(
XlsxReadContext
xlsxReadContext
,
String
name
,
Attributes
attributes
)
{
xlsxRead
Context
.
readRowHolder
(
new
ReadRowHolder
(
PositionUtils
.
getRowByRowTagt
(
attributes
.
getValue
(
ExcelXmlConstants
.
POSITION
)),
RowTypeEnum
.
DATA
,
xlsxRead
Context
.
readSheetHolder
().
getGlobalConfiguration
()));
}
@Override
public
void
endHandle
(
String
name
)
{
analysisContext
.
readSheetHolder
()
.
notifyEndOneRow
(
new
EachRowAnalysisFinishEvent
(
rowResultHandler
.
getCurRowContent
()),
analysisContext
);
rowResultHandler
.
clearResult
();
}
@Override
public
void
handleComments
(
String
comment
)
{
public
void
endHandle
(
XlsxReadContext
xlsxReadContext
,
String
name
)
{
xlsxReadContext
.
analysisEventProcessor
().
endRow
(
xlsxReadContext
);
}
}
src/main/java/com/alibaba/excel/analysis/v07/handlers/XlsxCellHandler.java
0 → 100644
浏览文件 @
13ca08e1
package
com.alibaba.excel.analysis.v07.handlers
;
import
org.xml.sax.Attributes
;
import
com.alibaba.excel.context.xlsx.XlsxReadContext
;
/**
* Cell handler
*
* @author Dan Zheng
*/
public
interface
XlsxCellHandler
{
/**
* Start handle
*
* @param xlsxReadContext xlsxReadContext
* @param name Tag name
* @param attributes Tag attributes
*/
void
startHandle
(
XlsxReadContext
xlsxReadContext
,
String
name
,
Attributes
attributes
);
/**
* End handle
*
* @param xlsxReadContext xlsxReadContext
* @param name Tag name
*/
void
endHandle
(
XlsxReadContext
xlsxReadContext
,
String
name
);
}
src/main/java/com/alibaba/excel/analysis/v07/SharedStringsTableHandler.java
→
src/main/java/com/alibaba/excel/analysis/v07/
handlers/sax/
SharedStringsTableHandler.java
浏览文件 @
13ca08e1
package
com.alibaba.excel.analysis.v07
;
package
com.alibaba.excel.analysis.v07
.handlers.sax
;
import
org.xml.sax.Attributes
;
import
org.xml.sax.helpers.DefaultHandler
;
...
...
src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java
0 → 100644
浏览文件 @
13ca08e1
package
com.alibaba.excel.analysis.v07.handlers.sax
;
import
java.util.HashMap
;
import
java.util.Map
;
import
org.xml.sax.Attributes
;
import
org.xml.sax.SAXException
;
import
org.xml.sax.helpers.DefaultHandler
;
import
com.alibaba.excel.analysis.v07.handlers.CountRowCellHandler
;
import
com.alibaba.excel.analysis.v07.handlers.ProcessResultCellHandler
;
import
com.alibaba.excel.analysis.v07.handlers.XlsxCellHandler
;
import
com.alibaba.excel.constant.ExcelXmlConstants
;
import
com.alibaba.excel.context.xlsx.XlsxReadContext
;
/**
* @author jipengfei
*/
public
class
XlsxRowHandler
extends
DefaultHandler
{
private
XlsxReadContext
xlsxReadContext
;
private
static
final
Map
<
String
,
XlsxCellHandler
>
XLSX_CELL_HANDLER_MAP
=
new
HashMap
<
String
,
XlsxCellHandler
>(
16
);
static
{
XLSX_CELL_HANDLER_MAP
.
put
(
ExcelXmlConstants
.
DIMENSION
,
new
CountRowCellHandler
());
XLSX_CELL_HANDLER_MAP
.
put
(
ExcelXmlConstants
.
ROW_TAG
,
new
ProcessResultCellHandler
());
}
public
XlsxRowHandler
(
XlsxReadContext
xlsxReadContext
)
{
this
.
xlsxReadContext
=
xlsxReadContext
;
}
@Override
public
void
startElement
(
String
uri
,
String
localName
,
String
name
,
Attributes
attributes
)
throws
SAXException
{
XlsxCellHandler
handler
=
XLSX_CELL_HANDLER_MAP
.
get
(
name
);
if
(
handler
==
null
)
{
return
;
}
handler
.
startHandle
(
xlsxReadContext
,
name
,
attributes
);
}
@Override
public
void
characters
(
char
[]
ch
,
int
start
,
int
length
)
throws
SAXException
{
if
(
rowResultHolder
!=
null
)
{
rowResultHolder
.
appendCurrentCellValue
(
ch
,
start
,
length
);
}
}
@Override
public
void
endElement
(
String
uri
,
String
localName
,
String
name
)
throws
SAXException
{
XlsxCellHandler
handler
=
XLSX_CELL_HANDLER_MAP
.
get
(
name
);
if
(
handler
==
null
)
{
return
;
}
handler
.
endHandle
(
xlsxReadContext
,
name
);
}
}
src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java
浏览文件 @
13ca08e1
...
...
@@ -19,7 +19,7 @@ import com.alibaba.excel.read.metadata.holder.xls.XlsReadWorkbookHolder;
import
com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder
;
import
com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder
;
import
com.alibaba.excel.read.processor.AnalysisEventProcessor
;
import
com.alibaba.excel.read.processor.Defa
lu
tAnalysisEventProcessor
;
import
com.alibaba.excel.read.processor.Defa
ul
tAnalysisEventProcessor
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
/**
...
...
@@ -64,7 +64,7 @@ public class AnalysisContextImpl implements AnalysisContext {
break
;
}
currentReadHolder
=
readWorkbookHolder
;
analysisEventProcessor
=
new
Defa
lu
tAnalysisEventProcessor
();
analysisEventProcessor
=
new
Defa
ul
tAnalysisEventProcessor
();
if
(
LOGGER
.
isDebugEnabled
())
{
LOGGER
.
debug
(
"Initialization 'AnalysisContextImpl' complete"
);
}
...
...
src/main/java/com/alibaba/excel/context/xlsx/XlsxReadContext.java
浏览文件 @
13ca08e1
package
com.alibaba.excel.context.xlsx
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.read.metadata.holder.xls.XlsReadSheetHolder
;
import
com.alibaba.excel.read.metadata.holder.xls.XlsReadWorkbookHolder
;
import
com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder
;
import
com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder
;
...
...
src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadSheetHolder.java
浏览文件 @
13ca08e1
...
...
@@ -10,6 +10,9 @@ import com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder;
* @author Jiaju Zhuang
*/
public
class
XlsxReadSheetHolder
extends
ReadSheetHolder
{
public
XlsxReadSheetHolder
(
ReadSheet
readSheet
,
ReadWorkbookHolder
readWorkbookHolder
)
{
super
(
readSheet
,
readWorkbookHolder
);
}
...
...
src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadWorkbookHolder.java
浏览文件 @
13ca08e1
...
...
@@ -3,6 +3,7 @@ package com.alibaba.excel.read.metadata.holder.xlsx;
import
javax.xml.parsers.SAXParserFactory
;
import
org.apache.poi.openxml4j.opc.OPCPackage
;
import
org.apache.poi.xssf.model.StylesTable
;
import
com.alibaba.excel.read.metadata.ReadWorkbook
;
import
com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder
;
...
...
@@ -28,6 +29,10 @@ public class XlsxReadWorkbookHolder extends ReadWorkbookHolder {
* @see SAXParserFactory#newInstance(String, ClassLoader)
*/
private
String
saxParserFactoryName
;
/**
* Current style information
*/
private
StylesTable
stylesTable
;
public
XlsxReadWorkbookHolder
(
ReadWorkbook
readWorkbook
)
{
super
(
readWorkbook
);
...
...
@@ -49,4 +54,12 @@ public class XlsxReadWorkbookHolder extends ReadWorkbookHolder {
public
void
setSaxParserFactoryName
(
String
saxParserFactoryName
)
{
this
.
saxParserFactoryName
=
saxParserFactoryName
;
}
public
StylesTable
getStylesTable
()
{
return
stylesTable
;
}
public
void
setStylesTable
(
StylesTable
stylesTable
)
{
this
.
stylesTable
=
stylesTable
;
}
}
src/main/java/com/alibaba/excel/read/processor/Defa
lu
tAnalysisEventProcessor.java
→
src/main/java/com/alibaba/excel/read/processor/Defa
ul
tAnalysisEventProcessor.java
浏览文件 @
13ca08e1
...
...
@@ -25,12 +25,11 @@ import com.alibaba.excel.util.StringUtils;
*
* @author jipengfei
*/
public
class
Defa
lu
tAnalysisEventProcessor
implements
AnalysisEventProcessor
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
Defa
lu
tAnalysisEventProcessor
.
class
);
public
class
Defa
ul
tAnalysisEventProcessor
implements
AnalysisEventProcessor
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
Defa
ul
tAnalysisEventProcessor
.
class
);
@Override
public
void
endRow
(
AnalysisContext
analysisContext
)
{
switch
(
analysisContext
.
readRowHolder
().
getRowType
())
{
case
EMPTY:
if
(
LOGGER
.
isDebugEnabled
())
{
...
...
@@ -61,11 +60,14 @@ public class DefalutAnalysisEventProcessor implements AnalysisEventProcessor {
}
}
private
void
dealExtra
(
AnalysisContext
analysisContext
)
{}
private
void
dealExtra
(
AnalysisContext
analysisContext
)
{
}
private
void
dealData
(
AnalysisContext
analysisContext
)
{
ReadRowHolder
readRowHolder
=
analysisContext
.
readRowHolder
();
Map
<
Integer
,
CellData
>
cellDataMap
=
(
Map
)
readRowHolder
.
getCellMap
();
Map
<
Integer
,
CellData
>
cellDataMap
=
(
Map
)
readRowHolder
.
getCellMap
();
readRowHolder
.
setCurrentRowAnalysisResult
(
cellDataMap
);
int
rowIndex
=
readRowHolder
.
getRowIndex
();
int
currentHeadRowNumber
=
analysisContext
.
readSheetHolder
().
getHeadRowNumber
();
...
...
src/main/java/com/alibaba/excel/util/SheetUtils.java
浏览文件 @
13ca08e1
...
...
@@ -3,7 +3,7 @@ package com.alibaba.excel.util;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.alibaba.excel.context.
xls.XlsRead
Context
;
import
com.alibaba.excel.context.
Analysis
Context
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
/**
...
...
@@ -14,21 +14,21 @@ import com.alibaba.excel.read.metadata.ReadSheet;
public
class
SheetUtils
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
SheetUtils
.
class
);
private
SheetUtils
()
{}
private
SheetUtils
()
{
}
/**
* Match the parameters to the actual sheet
*
* @param readSheet
* actual sheet
* @param xlsReadContext
* @param readSheet actual sheet
* @param analysisContext
* @return
*/
public
static
ReadSheet
match
(
ReadSheet
readSheet
,
XlsReadContext
xlsRead
Context
)
{
if
(
xlsRead
Context
.
readAll
())
{
public
static
ReadSheet
match
(
ReadSheet
readSheet
,
AnalysisContext
analysis
Context
)
{
if
(
analysis
Context
.
readAll
())
{
return
readSheet
;
}
for
(
ReadSheet
parameterReadSheet
:
xlsRead
Context
.
readSheetList
())
{
for
(
ReadSheet
parameterReadSheet
:
analysis
Context
.
readSheetList
())
{
if
(
parameterReadSheet
==
null
)
{
continue
;
}
...
...
@@ -45,7 +45,7 @@ public class SheetUtils {
if
(!
StringUtils
.
isEmpty
(
parameterSheetName
))
{
boolean
autoTrim
=
(
parameterReadSheet
.
getAutoTrim
()
!=
null
&&
parameterReadSheet
.
getAutoTrim
())
||
(
parameterReadSheet
.
getAutoTrim
()
==
null
&&
xlsRead
Context
.
readWorkbookHolder
().
getGlobalConfiguration
().
getAutoTrim
());
&&
analysis
Context
.
readWorkbookHolder
().
getGlobalConfiguration
().
getAutoTrim
());
if
(
autoTrim
)
{
parameterSheetName
=
parameterSheetName
.
trim
();
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录