Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Laubin729
easyexcel
提交
9b782f25
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,发现更多精彩内容 >>
提交
9b782f25
编写于
10月 23, 2019
作者:
K
kaiux
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
添加对Excel批注的读取
上级
53447b7e
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
237 addition
and
1 deletion
+237
-1
src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
...n/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
+38
-0
src/main/java/com/alibaba/excel/analysis/v07/XlsxCellHandler.java
.../java/com/alibaba/excel/analysis/v07/XlsxCellHandler.java
+8
-0
src/main/java/com/alibaba/excel/analysis/v07/XlsxRowHandler.java
...n/java/com/alibaba/excel/analysis/v07/XlsxRowHandler.java
+26
-0
src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
.../java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
+16
-1
src/main/java/com/alibaba/excel/analysis/v07/handlers/CountRowCellHandler.java
...baba/excel/analysis/v07/handlers/CountRowCellHandler.java
+5
-0
src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
...ibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
+5
-0
src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java
...excel/analysis/v07/handlers/ProcessResultCellHandler.java
+5
-0
src/main/java/com/alibaba/excel/read/metadata/holder/ReadRowHolder.java
...com/alibaba/excel/read/metadata/holder/ReadRowHolder.java
+32
-0
src/test/java/com/alibaba/easyexcel/test/demo/read/DemoCellCommentsListener.java
...ba/easyexcel/test/demo/read/DemoCellCommentsListener.java
+85
-0
src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java
...t/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java
+17
-0
src/test/resources/demo/demo.xlsx
src/test/resources/demo/demo.xlsx
+0
-0
未找到文件。
src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java
浏览文件 @
9b782f25
...
@@ -3,10 +3,12 @@ package com.alibaba.excel.analysis.v03;
...
@@ -3,10 +3,12 @@ package com.alibaba.excel.analysis.v03;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.TreeMap
;
import
java.util.TreeMap
;
import
com.alibaba.excel.util.StringUtils
;
import
org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder
;
import
org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder
;
import
org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener
;
import
org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener
;
import
org.apache.poi.hssf.eventusermodel.HSSFEventFactory
;
import
org.apache.poi.hssf.eventusermodel.HSSFEventFactory
;
...
@@ -19,6 +21,11 @@ import org.apache.poi.hssf.record.BoundSheetRecord;
...
@@ -19,6 +21,11 @@ import org.apache.poi.hssf.record.BoundSheetRecord;
import
org.apache.poi.hssf.record.Record
;
import
org.apache.poi.hssf.record.Record
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.poifs.filesystem.POIFSFileSystem
;
import
org.apache.poi.poifs.filesystem.POIFSFileSystem
;
import
org.apache.poi.ss.usermodel.Comment
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.ss.usermodel.WorkbookFactory
;
import
org.apache.poi.ss.util.CellAddress
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
...
@@ -74,11 +81,18 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
...
@@ -74,11 +81,18 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
private
HSSFWorkbook
stubWorkbook
;
private
HSSFWorkbook
stubWorkbook
;
private
List
<
XlsRecordHandler
>
recordHandlers
=
new
ArrayList
<
XlsRecordHandler
>();
private
List
<
XlsRecordHandler
>
recordHandlers
=
new
ArrayList
<
XlsRecordHandler
>();
private
AnalysisContext
analysisContext
;
private
AnalysisContext
analysisContext
;
private
Workbook
poiWorkbook
;
private
Map
<
Integer
,
String
>
rowComments
;
public
XlsSaxAnalyser
(
AnalysisContext
context
,
POIFSFileSystem
poifsFileSystem
)
{
public
XlsSaxAnalyser
(
AnalysisContext
context
,
POIFSFileSystem
poifsFileSystem
)
{
this
.
analysisContext
=
context
;
this
.
analysisContext
=
context
;
this
.
records
=
new
TreeMap
<
Integer
,
CellData
>();
this
.
records
=
new
TreeMap
<
Integer
,
CellData
>();
this
.
poifsFileSystem
=
poifsFileSystem
;
this
.
poifsFileSystem
=
poifsFileSystem
;
try
{
this
.
poiWorkbook
=
WorkbookFactory
.
create
(
poifsFileSystem
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
analysisContext
.
readWorkbookHolder
().
setPoifsFileSystem
(
poifsFileSystem
);
analysisContext
.
readWorkbookHolder
().
setPoifsFileSystem
(
poifsFileSystem
);
}
}
...
@@ -139,6 +153,7 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
...
@@ -139,6 +153,7 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
thisRow
=
handler
.
getRow
();
thisRow
=
handler
.
getRow
();
thisColumn
=
handler
.
getColumn
();
thisColumn
=
handler
.
getColumn
();
cellData
=
handler
.
getCellData
();
cellData
=
handler
.
getCellData
();
handleComments
(
thisRow
,
thisColumn
);
if
(
cellData
!=
null
)
{
if
(
cellData
!=
null
)
{
cellData
.
checkEmpty
();
cellData
.
checkEmpty
();
if
(
CellDataTypeEnum
.
EMPTY
!=
cellData
.
getType
())
{
if
(
CellDataTypeEnum
.
EMPTY
!=
cellData
.
getType
())
{
...
@@ -170,6 +185,26 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
...
@@ -170,6 +185,26 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
processLastCellOfRow
(
record
);
processLastCellOfRow
(
record
);
}
}
public
void
handleComments
(
int
row
,
int
col
)
{
if
(
null
==
this
.
poiWorkbook
||
null
==
analysisContext
.
readSheetHolder
()
||
row
<
0
||
col
<
0
)
{
return
;
}
Sheet
currentSheet
=
poiWorkbook
.
getSheetAt
(
analysisContext
.
readSheetHolder
().
getSheetNo
());
Map
<
CellAddress
,
?
extends
Comment
>
cellComments
=
currentSheet
.
getCellComments
();
if
(
CollectionUtils
.
isEmpty
(
cellComments
))
{
return
;
}
Comment
comment
=
cellComments
.
get
(
new
CellAddress
(
row
,
col
));
if
(
null
==
comment
)
{
return
;
}
String
commentsStr
=
comment
.
getString
().
toString
();
if
(!
StringUtils
.
isEmpty
(
commentsStr
))
{
rowComments
=
rowComments
==
null
?
new
HashMap
<
Integer
,
String
>(
8
)
:
rowComments
;
rowComments
.
put
(
col
,
commentsStr
);
}
}
private
boolean
ignoreRecord
(
Record
record
)
{
private
boolean
ignoreRecord
(
Record
record
)
{
return
analysisContext
.
readWorkbookHolder
().
getIgnoreRecord03
()
&&
record
.
getSid
()
!=
BoundSheetRecord
.
sid
return
analysisContext
.
readWorkbookHolder
().
getIgnoreRecord03
()
&&
record
.
getSid
()
!=
BoundSheetRecord
.
sid
&&
record
.
getSid
()
!=
BOFRecord
.
sid
;
&&
record
.
getSid
()
!=
BOFRecord
.
sid
;
...
@@ -188,6 +223,9 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
...
@@ -188,6 +223,9 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
}
}
analysisContext
.
readRowHolder
(
analysisContext
.
readRowHolder
(
new
ReadRowHolder
(
lastRowNumber
,
analysisContext
.
readSheetHolder
().
getGlobalConfiguration
()));
new
ReadRowHolder
(
lastRowNumber
,
analysisContext
.
readSheetHolder
().
getGlobalConfiguration
()));
if
(!
CollectionUtils
.
isEmpty
(
rowComments
))
{
analysisContext
.
readRowHolder
().
setRowComments
(
rowComments
);
}
analysisContext
.
readSheetHolder
().
notifyEndOneRow
(
new
EachRowAnalysisFinishEvent
(
records
),
analysisContext
);
analysisContext
.
readSheetHolder
().
notifyEndOneRow
(
new
EachRowAnalysisFinishEvent
(
records
),
analysisContext
);
records
.
clear
();
records
.
clear
();
lastColumnNumber
=
-
1
;
lastColumnNumber
=
-
1
;
...
...
src/main/java/com/alibaba/excel/analysis/v07/XlsxCellHandler.java
浏览文件 @
9b782f25
...
@@ -34,4 +34,12 @@ public interface XlsxCellHandler {
...
@@ -34,4 +34,12 @@ public interface XlsxCellHandler {
* Tag name
* Tag name
*/
*/
void
endHandle
(
String
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/XlsxRowHandler.java
浏览文件 @
9b782f25
...
@@ -2,7 +2,12 @@ package com.alibaba.excel.analysis.v07;
...
@@ -2,7 +2,12 @@ package com.alibaba.excel.analysis.v07;
import
java.util.List
;
import
java.util.List
;
import
com.alibaba.excel.constant.ExcelXmlConstants
;
import
com.alibaba.excel.util.StringUtils
;
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.model.StylesTable
;
import
org.apache.poi.xssf.usermodel.XSSFComment
;
import
org.xml.sax.Attributes
;
import
org.xml.sax.Attributes
;
import
org.xml.sax.SAXException
;
import
org.xml.sax.SAXException
;
import
org.xml.sax.helpers.DefaultHandler
;
import
org.xml.sax.helpers.DefaultHandler
;
...
@@ -17,6 +22,12 @@ public class XlsxRowHandler extends DefaultHandler {
...
@@ -17,6 +22,12 @@ public class XlsxRowHandler extends DefaultHandler {
private
List
<
XlsxCellHandler
>
cellHandlers
;
private
List
<
XlsxCellHandler
>
cellHandlers
;
private
XlsxRowResultHolder
rowResultHolder
;
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
)
{
public
XlsxRowHandler
(
AnalysisContext
analysisContext
,
StylesTable
stylesTable
)
{
this
.
cellHandlers
=
XlsxHandlerFactory
.
buildCellHandlers
(
analysisContext
,
stylesTable
);
this
.
cellHandlers
=
XlsxHandlerFactory
.
buildCellHandlers
(
analysisContext
,
stylesTable
);
...
@@ -33,6 +44,7 @@ public class XlsxRowHandler extends DefaultHandler {
...
@@ -33,6 +44,7 @@ public class XlsxRowHandler extends DefaultHandler {
for
(
XlsxCellHandler
cellHandler
:
cellHandlers
)
{
for
(
XlsxCellHandler
cellHandler
:
cellHandlers
)
{
if
(
cellHandler
.
support
(
name
))
{
if
(
cellHandler
.
support
(
name
))
{
cellHandler
.
startHandle
(
name
,
attributes
);
cellHandler
.
startHandle
(
name
,
attributes
);
handleComment
(
cellHandler
,
attributes
.
getValue
(
ExcelXmlConstants
.
POSITION
));
}
}
}
}
}
}
...
@@ -52,4 +64,18 @@ public class XlsxRowHandler extends DefaultHandler {
...
@@ -52,4 +64,18 @@ public class XlsxRowHandler extends DefaultHandler {
rowResultHolder
.
appendCurrentCellValue
(
ch
,
start
,
length
);
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
浏览文件 @
9b782f25
...
@@ -17,6 +17,7 @@ import org.apache.poi.openxml4j.opc.PackageAccess;
...
@@ -17,6 +17,7 @@ import org.apache.poi.openxml4j.opc.PackageAccess;
import
org.apache.poi.openxml4j.opc.PackagePart
;
import
org.apache.poi.openxml4j.opc.PackagePart
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.xssf.eventusermodel.XSSFReader
;
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.model.StylesTable
;
import
org.apache.poi.xssf.usermodel.XSSFRelation
;
import
org.apache.poi.xssf.usermodel.XSSFRelation
;
import
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook
;
import
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook
;
...
@@ -46,6 +47,14 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
...
@@ -46,6 +47,14 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
private
AnalysisContext
analysisContext
;
private
AnalysisContext
analysisContext
;
private
List
<
ReadSheet
>
sheetList
;
private
List
<
ReadSheet
>
sheetList
;
private
Map
<
Integer
,
InputStream
>
sheetMap
;
private
Map
<
Integer
,
InputStream
>
sheetMap
;
/**
* excel comments
* key: sheetNo
* value: CommentsTanle
*/
private
Map
<
Integer
,
CommentsTable
>
commentsTableMap
;
/**
/**
* Current style information
* Current style information
*/
*/
...
@@ -77,6 +86,7 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
...
@@ -77,6 +86,7 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
stylesTable
=
xssfReader
.
getStylesTable
();
stylesTable
=
xssfReader
.
getStylesTable
();
sheetList
=
new
ArrayList
<
ReadSheet
>();
sheetList
=
new
ArrayList
<
ReadSheet
>();
sheetMap
=
new
HashMap
<
Integer
,
InputStream
>();
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
;
int
index
=
0
;
if
(!
ite
.
hasNext
())
{
if
(!
ite
.
hasNext
())
{
...
@@ -86,6 +96,10 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
...
@@ -86,6 +96,10 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
InputStream
inputStream
=
ite
.
next
();
InputStream
inputStream
=
ite
.
next
();
sheetList
.
add
(
new
ReadSheet
(
index
,
ite
.
getSheetName
()));
sheetList
.
add
(
new
ReadSheet
(
index
,
ite
.
getSheetName
()));
sheetMap
.
put
(
index
,
inputStream
);
sheetMap
.
put
(
index
,
inputStream
);
CommentsTable
commentsTable
=
ite
.
getSheetComments
();
if
(
null
!=
commentsTable
)
{
commentsTableMap
.
put
(
index
,
commentsTable
);
}
index
++;
index
++;
}
}
}
}
...
@@ -181,7 +195,8 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
...
@@ -181,7 +195,8 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
analysisContext
.
readWorkbookHolder
().
getGlobalConfiguration
());
analysisContext
.
readWorkbookHolder
().
getGlobalConfiguration
());
if
(
readSheet
!=
null
)
{
if
(
readSheet
!=
null
)
{
analysisContext
.
currentSheet
(
readSheet
);
analysisContext
.
currentSheet
(
readSheet
);
parseXmlSource
(
sheetMap
.
get
(
readSheet
.
getSheetNo
()),
new
XlsxRowHandler
(
analysisContext
,
stylesTable
));
Integer
sheetNo
=
readSheet
.
getSheetNo
();
parseXmlSource
(
sheetMap
.
get
(
sheetNo
),
new
XlsxRowHandler
(
analysisContext
,
stylesTable
,
commentsTableMap
.
get
(
sheetNo
)));
// The last sheet is read
// The last sheet is read
analysisContext
.
readSheetHolder
().
notifyAfterAllAnalysed
(
analysisContext
);
analysisContext
.
readSheetHolder
().
notifyAfterAllAnalysed
(
analysisContext
);
}
}
...
...
src/main/java/com/alibaba/excel/analysis/v07/handlers/CountRowCellHandler.java
浏览文件 @
9b782f25
...
@@ -39,4 +39,9 @@ public class CountRowCellHandler implements XlsxCellHandler {
...
@@ -39,4 +39,9 @@ public class CountRowCellHandler implements XlsxCellHandler {
}
}
@Override
public
void
handleComments
(
String
comment
)
{
}
}
}
src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java
浏览文件 @
9b782f25
...
@@ -160,6 +160,11 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder
...
@@ -160,6 +160,11 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder
}
}
}
}
@Override
public
void
handleComments
(
String
comment
)
{
analysisContext
.
readRowHolder
().
addComments
(
curCol
,
comment
);
}
@Override
@Override
public
void
appendCurrentCellValue
(
char
[]
ch
,
int
start
,
int
length
)
{
public
void
appendCurrentCellValue
(
char
[]
ch
,
int
start
,
int
length
)
{
String
currentTag
=
currentTagDeque
.
peek
();
String
currentTag
=
currentTagDeque
.
peek
();
...
...
src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java
浏览文件 @
9b782f25
...
@@ -45,4 +45,9 @@ public class ProcessResultCellHandler implements XlsxCellHandler {
...
@@ -45,4 +45,9 @@ public class ProcessResultCellHandler implements XlsxCellHandler {
rowResultHandler
.
clearResult
();
rowResultHandler
.
clearResult
();
}
}
@Override
public
void
handleComments
(
String
comment
)
{
}
}
}
src/main/java/com/alibaba/excel/read/metadata/holder/ReadRowHolder.java
浏览文件 @
9b782f25
...
@@ -3,6 +3,10 @@ package com.alibaba.excel.read.metadata.holder;
...
@@ -3,6 +3,10 @@ package com.alibaba.excel.read.metadata.holder;
import
com.alibaba.excel.enums.HolderEnum
;
import
com.alibaba.excel.enums.HolderEnum
;
import
com.alibaba.excel.metadata.GlobalConfiguration
;
import
com.alibaba.excel.metadata.GlobalConfiguration
;
import
com.alibaba.excel.metadata.Holder
;
import
com.alibaba.excel.metadata.Holder
;
import
com.alibaba.excel.util.CollectionUtils
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
/**
* sheet holder
* sheet holder
...
@@ -24,6 +28,34 @@ public class ReadRowHolder implements Holder {
...
@@ -24,6 +28,34 @@ public class ReadRowHolder implements Holder {
*/
*/
private
GlobalConfiguration
globalConfiguration
;
private
GlobalConfiguration
globalConfiguration
;
/**
* Return row comments
* key: col index
* value: comments
*/
private
Map
<
Integer
,
String
>
rowComments
;
public
Map
<
Integer
,
String
>
getRowComments
()
{
return
rowComments
;
}
public
void
setRowComments
(
Map
<
Integer
,
String
>
rowComments
)
{
this
.
rowComments
=
rowComments
;
}
public
void
addComments
(
Integer
index
,
String
comments
)
{
this
.
rowComments
=
this
.
rowComments
==
null
?
new
HashMap
<
Integer
,
String
>(
8
)
:
this
.
rowComments
;
this
.
rowComments
.
put
(
index
,
comments
);
}
public
String
getComments
(
Integer
index
)
{
if
(
CollectionUtils
.
isEmpty
(
rowComments
))
{
return
null
;
}
else
{
return
rowComments
.
get
(
index
);
}
}
public
ReadRowHolder
(
Integer
rowIndex
,
GlobalConfiguration
globalConfiguration
)
{
public
ReadRowHolder
(
Integer
rowIndex
,
GlobalConfiguration
globalConfiguration
)
{
this
.
rowIndex
=
rowIndex
;
this
.
rowIndex
=
rowIndex
;
this
.
globalConfiguration
=
globalConfiguration
;
this
.
globalConfiguration
=
globalConfiguration
;
...
...
src/test/java/com/alibaba/easyexcel/test/demo/read/DemoCellCommentsListener.java
0 → 100644
浏览文件 @
9b782f25
package
com.alibaba.easyexcel.test.demo.read
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.exception.ExcelDataConvertException
;
import
com.alibaba.excel.util.CollectionUtils
;
import
com.alibaba.fastjson.JSON
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
/**
* 读取单元格的批注
*
* @author: kaiux
* @date: 2019-10-23 14:10
**/
public
class
DemoCellCommentsListener
extends
AnalysisEventListener
<
DemoData
>
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
DemoCellCommentsListener
.
class
);
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private
static
final
int
BATCH_COUNT
=
5
;
List
<
DemoData
>
list
=
new
ArrayList
<
DemoData
>();
/**
* 在转换异常 获取其他异常下会调用本接口。抛出异常则停止读取。如果这里不抛出异常则 继续读取下一行。
*
* @param exception
* @param context
* @throws Exception
*/
@Override
public
void
onException
(
Exception
exception
,
AnalysisContext
context
)
{
LOGGER
.
error
(
"解析失败,但是继续解析下一行:{}"
,
exception
.
getMessage
());
if
(
exception
instanceof
ExcelDataConvertException
)
{
ExcelDataConvertException
excelDataConvertException
=
(
ExcelDataConvertException
)
exception
;
LOGGER
.
error
(
"第{}行,第{}列解析异常"
,
excelDataConvertException
.
getRowIndex
(),
excelDataConvertException
.
getColumnIndex
());
}
}
/**
* 这里会一行行的返回头
*
* @param headMap
* @param context
*/
@Override
public
void
invokeHeadMap
(
Map
<
Integer
,
String
>
headMap
,
AnalysisContext
context
)
{
Map
<
Integer
,
String
>
rowComments
=
context
.
readRowHolder
().
getRowComments
();
LOGGER
.
info
(
"解析到一条头数据:{}"
,
JSON
.
toJSONString
(
headMap
));
if
(!
CollectionUtils
.
isEmpty
(
rowComments
))
{
for
(
Integer
i
:
rowComments
.
keySet
())
{
LOGGER
.
info
(
"解析到头数据低{}列包含批注:{}"
,
i
,
rowComments
.
get
(
i
));
}
}
}
@Override
public
void
invoke
(
DemoData
data
,
AnalysisContext
context
)
{
LOGGER
.
info
(
"解析到一条数据:{}"
,
JSON
.
toJSONString
(
data
));
if
(
list
.
size
()
>=
BATCH_COUNT
)
{
saveData
();
list
.
clear
();
}
}
@Override
public
void
doAfterAllAnalysed
(
AnalysisContext
context
)
{
saveData
();
LOGGER
.
info
(
"所有数据解析完成!"
);
}
/**
* 加上存储数据库
*/
private
void
saveData
()
{
LOGGER
.
info
(
"{}条数据,开始存储数据库!"
,
list
.
size
());
LOGGER
.
info
(
"存储数据库成功!"
);
}
}
src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java
浏览文件 @
9b782f25
...
@@ -161,6 +161,23 @@ public class ReadTest {
...
@@ -161,6 +161,23 @@ public class ReadTest {
EasyExcel
.
read
(
fileName
,
DemoData
.
class
,
new
DemoHeadDataListener
()).
sheet
().
doRead
();
EasyExcel
.
read
(
fileName
,
DemoData
.
class
,
new
DemoHeadDataListener
()).
sheet
().
doRead
();
}
}
/**
* 读取单元格批注
*
* <p>
* 1. 创建excel对应的实体对象 参照{@link DemoData}
* <p>
* 2. 由于默认异步读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoHeadDataListener}
* <p>
* 3. 直接读即可
*/
@Test
public
void
commentsRead
()
{
String
fileName
=
TestFileUtil
.
getPath
()
+
"demo"
+
File
.
separator
+
"demo.xlsx"
;
// 这里 需要指定读用哪个class去读,然后读取第一个sheet
EasyExcel
.
read
(
fileName
,
DemoData
.
class
,
new
DemoCellCommentsListener
()).
sheet
().
doRead
();
}
/**
/**
* 读取公式和单元格类型
* 读取公式和单元格类型
*
*
...
...
src/test/resources/demo/demo.xlsx
浏览文件 @
9b782f25
无法预览此类型文件
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录