Skip to content

Commit 3724202

Browse files
authored
Merge pull request #328 from liaochong/Hotfix/3.11.6
Hotfix/3.11.6
2 parents 93165c4 + 8d5a8c2 commit 3724202

6 files changed

Lines changed: 62 additions & 24 deletions

File tree

example/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
<dependency>
4444
<groupId>com.github.liaochong</groupId>
4545
<artifactId>myexcel</artifactId>
46-
<version>3.11.4</version>
46+
<version>3.11.6</version>
4747
</dependency>
4848
<dependency>
4949
<groupId>org.apache.poi</groupId>

pom.xml

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
<groupId>com.github.liaochong</groupId>
1313
<artifactId>myexcel</artifactId>
14-
<version>3.11.5</version>
14+
<version>3.11.6</version>
1515
<packaging>jar</packaging>
1616

1717
<name>myexcel</name>
@@ -22,10 +22,9 @@
2222
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2323
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
2424
<java.version>1.8</java.version>
25-
<poi.version>4.1.1</poi.version>
25+
<poi.version>4.1.2</poi.version>
2626
<jsoup.version>1.14.2</jsoup.version>
2727
<lombok.version>1.18.10</lombok.version>
28-
<slf4j-api.version>1.7.26</slf4j-api.version>
2928
<beetl.version>2.9.9</beetl.version>
3029
<velocity.version>1.7</velocity.version>
3130
<freemarker.version>2.3.23</freemarker.version>
@@ -51,11 +50,6 @@
5150
<artifactId>jsoup</artifactId>
5251
<version>${jsoup.version}</version>
5352
</dependency>
54-
<dependency>
55-
<groupId>org.slf4j</groupId>
56-
<artifactId>slf4j-api</artifactId>
57-
<version>${slf4j-api.version}</version>
58-
</dependency>
5953
<dependency>
6054
<groupId>com.ibeetl</groupId>
6155
<artifactId>beetl</artifactId>

src/main/java/com/github/liaochong/myexcel/core/AbstractReadHandler.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ abstract class AbstractReadHandler<T> {
8282
*/
8383
private int titleRowNum = -1;
8484

85+
/**
86+
* is blank row
87+
*/
88+
protected boolean isBlankRow;
89+
8590
public AbstractReadHandler(boolean readCsv,
8691
List<T> result,
8792
SaxExcelReader.ReadConfig<T> readConfig) {
@@ -188,6 +193,7 @@ protected void newRow(int rowNum) {
188193
currentRow.setRowNum(rowNum);
189194
obj = newInstance.get();
190195
prevColNum = -1;
196+
isBlankRow = true;
191197
}
192198

193199
protected void setRecordAsNull() {
@@ -198,6 +204,7 @@ protected void handleField(Integer colNum, String content) {
198204
if (obj == null || colNum < 0) {
199205
return;
200206
}
207+
isBlankRow = false;
201208
content = readConfig.getTrim().apply(content);
202209
if (readConfig.getRowFilter().test(currentRow)) {
203210
fieldHandler.accept(colNum, content);
@@ -216,6 +223,15 @@ protected void handleField(Integer colNum, String content) {
216223
}
217224

218225
protected void handleResult() {
226+
if (isBlankRow) {
227+
if (readConfig.isStopReadingOnBlankRow()) {
228+
throw new StopReadException();
229+
}
230+
// 忽略空白行
231+
if (readConfig.isIgnoreBlankRow()) {
232+
return;
233+
}
234+
}
219235
this.initFieldMap();
220236
if (!readConfig.getRowFilter().test(currentRow)) {
221237
return;

src/main/java/com/github/liaochong/myexcel/core/SaxExcelReader.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,16 @@ public SaxExcelReader<T> readAllSheet() {
124124
return this;
125125
}
126126

127+
public SaxExcelReader<T> ignoreBlankRow() {
128+
this.readConfig.ignoreBlankRow = true;
129+
return this;
130+
}
131+
132+
public SaxExcelReader<T> stopReadingOnBlankRow() {
133+
this.readConfig.stopReadingOnBlankRow = true;
134+
return this;
135+
}
136+
127137
public SaxExcelReader<T> startSheet(BiConsumer<String, Integer> startSheetConsumer) {
128138
this.readConfig.startSheetConsumer = startSheetConsumer;
129139
return this;
@@ -350,6 +360,14 @@ public static final class ReadConfig<T> {
350360
};
351361

352362
private boolean readAllSheet;
363+
/**
364+
* 是否忽略空白行,默认为否
365+
*/
366+
private boolean ignoreBlankRow = false;
367+
/**
368+
* 是否在遇到空白行时停止读取
369+
*/
370+
private boolean stopReadingOnBlankRow = false;
353371

354372
private BiConsumer<String, Integer> startSheetConsumer = (sheetName, sheetIndex) -> {
355373
log.info("Start read excel, sheet:{},index:{}", sheetName, sheetIndex);
@@ -470,5 +488,21 @@ public BiConsumer<String, Integer> getStartSheetConsumer() {
470488
public void setStartSheetConsumer(BiConsumer<String, Integer> startSheetConsumer) {
471489
this.startSheetConsumer = startSheetConsumer;
472490
}
491+
492+
public boolean isIgnoreBlankRow() {
493+
return ignoreBlankRow;
494+
}
495+
496+
public void setIgnoreBlankRow(boolean ignoreBlankRow) {
497+
this.ignoreBlankRow = ignoreBlankRow;
498+
}
499+
500+
public boolean isStopReadingOnBlankRow() {
501+
return stopReadingOnBlankRow;
502+
}
503+
504+
public void setStopReadingOnBlankRow(boolean stopReadingOnBlankRow) {
505+
this.stopReadingOnBlankRow = stopReadingOnBlankRow;
506+
}
473507
}
474508
}

src/main/java/com/github/liaochong/myexcel/core/XSSFSaxReadHandler.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,6 @@ class XSSFSaxReadHandler<T> extends AbstractReadHandler<T> implements XSSFSheetX
3030

3131
private static final Logger log = org.slf4j.LoggerFactory.getLogger(XSSFSaxReadHandler.class);
3232
private int count;
33-
/**
34-
* blank row count
35-
*/
36-
private int blankCount;
37-
/**
38-
* is blank row
39-
*/
40-
private boolean isBlank;
4133

4234
public XSSFSaxReadHandler(
4335
List<T> result,
@@ -48,23 +40,17 @@ public XSSFSaxReadHandler(
4840
@Override
4941
public void startRow(int rowNum) {
5042
newRow(rowNum);
51-
isBlank = true;
5243
}
5344

5445
@Override
5546
public void endRow(int rowNum) {
56-
if (isBlank) {
57-
blankCount++;
58-
return;
59-
}
6047
handleResult();
6148
count++;
6249
}
6350

6451
@Override
6552
public void cell(String cellReference, String formattedValue,
6653
XSSFComment comment) {
67-
isBlank = false;
6854
if (cellReference == null) {
6955
return;
7056
}
@@ -74,6 +60,6 @@ public void cell(String cellReference, String formattedValue,
7460

7561
@Override
7662
public void endSheet() {
77-
log.info("Import completed, total number of rows {},{} blank rows filtered.", count, blankCount);
63+
log.info("Import completed, total number of rows {}.", count);
7864
}
7965
}

src/main/java/com/github/liaochong/myexcel/core/XSSFSheetXMLHandler.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ enum xssfDataType {
9797
private String formatString;
9898
private final DataFormatter formatter;
9999
private int rowNum;
100+
private int preRowNum = -1;
100101
private int nextRowNum; // some sheets do not have rowNums, Excel can read them so we should try to handle them correctly as well
101102
private String cellRef;
102103
private boolean formulasNotResults;
@@ -224,7 +225,14 @@ public void startElement(String uri, String localName, String qName,
224225
} else {
225226
rowNum = nextRowNum;
226227
}
228+
if (rowNum - 1 != preRowNum) {
229+
for (int blankRowNum = preRowNum + 1; blankRowNum < rowNum; blankRowNum++) {
230+
output.startRow(blankRowNum);
231+
output.endRow(blankRowNum);
232+
}
233+
}
227234
output.startRow(rowNum);
235+
this.preRowNum = rowNum;
228236
}
229237
// c => cell
230238
else if ("c".equals(localName)) {

0 commit comments

Comments
 (0)