diff --git a/pom.xml b/pom.xml
index fcfcc3fe..ec91e9b8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.alibaba
easyexcel
- 1.0.2
+ 1.0.2-bugfix
jar
easyexcel
easyexcel is a excel handle tools written in Java
diff --git a/src/main/java/com/alibaba/excel/read/SaxAnalyserV07.java b/src/main/java/com/alibaba/excel/read/SaxAnalyserV07.java
index a60771ec..8b6c8b75 100644
--- a/src/main/java/com/alibaba/excel/read/SaxAnalyserV07.java
+++ b/src/main/java/com/alibaba/excel/read/SaxAnalyserV07.java
@@ -177,6 +177,7 @@ public class SaxAnalyserV07 extends BaseSaxAnalyser {
XmlParserFactory.parse(workbookXml, new DefaultHandler() {
private int id = 0;
+
@Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
if (qName.toLowerCase(Locale.US).equals("sheet")) {
@@ -223,28 +224,54 @@ public class SaxAnalyserV07 extends BaseSaxAnalyser {
//this.sharedStringsTable.readFrom(inputStream);
XmlParserFactory.parse(inputStream, new DefaultHandler() {
- int lastElementPosition = -1;
+ //int lastElementPosition = -1;
+ //
+ //int lastHandledElementPosition = -1;
+
+ String beforeQName = "";
- int lastHandledElementPosition = -1;
+ String currentQName = "";
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) {
- if (hasSkippedEmptySharedString()) {
- sharedStringList.add("");
+ //if (hasSkippedEmptySharedString()) {
+ // sharedStringList.add("");
+ //}
+ //if ("t".equals(qName)) {
+ // lastElementPosition++;
+ //}
+ if ("si".equals(qName) || "t".equals(qName)) {
+ beforeQName = currentQName;
+ currentQName = qName;
}
- if ("t".equals(qName)) {
- lastElementPosition++;
- }
- }
-
- private boolean hasSkippedEmptySharedString() {
- return lastElementPosition > lastHandledElementPosition;
}
+ //@Override
+ //public void endElement (String uri, String localName, String qName)
+ // throws SAXException
+ //{
+ // if ("si".equals(qName) || "t".equals(qName)) {
+ // beforeQName = qName;
+ // currentQName = "";
+ // }
+ //}
+
+ //private boolean hasSkippedEmptySharedString() {
+ // return lastElementPosition > lastHandledElementPosition;
+ //}
@Override
public void characters(char[] ch, int start, int length) {
- sharedStringList.add(new String(ch, start, length));
- lastHandledElementPosition++;
+ if ("t".equals(currentQName) && ("t".equals(beforeQName))) {
+ String pre = sharedStringList.get(sharedStringList.size() - 1);
+ String str = pre + new String(ch, start, length);
+ sharedStringList.remove(sharedStringList.size() - 1);
+ sharedStringList.add(str);
+ }else if ("t".equals(currentQName) && ("si".equals(beforeQName))){
+ sharedStringList.add(new String(ch, start, length));
+ }
+ // lastHandledElementPosition++;
+
+
}
});
diff --git a/src/main/java/com/alibaba/excel/read/v07/RowHandler.java b/src/main/java/com/alibaba/excel/read/v07/RowHandler.java
index d068df26..7aaf6c9d 100644
--- a/src/main/java/com/alibaba/excel/read/v07/RowHandler.java
+++ b/src/main/java/com/alibaba/excel/read/v07/RowHandler.java
@@ -23,7 +23,6 @@ import static com.alibaba.excel.util.ExcelXmlConstants.ROW_TAG;
/**
* @author jipengfei
- *
*/
public class RowHandler extends DefaultHandler {
@@ -108,7 +107,11 @@ public class RowHandler extends DefaultHandler {
switch (currentCellType) {
case STRING:
int idx = Integer.parseInt(currentCellValue);
- currentCellValue = sharedStringList.get(idx);
+ if (idx < sharedStringList.size()) {
+ currentCellValue = sharedStringList.get(idx);
+ } else {
+ currentCellValue = "";
+ }
currentCellType = FieldType.EMPTY;
break;
//case DATE:
diff --git a/src/test/java/read/v07/Read2007Xlsx.java b/src/test/java/read/v07/Read2007Xlsx.java
index b9cb2568..fa1958e9 100644
--- a/src/test/java/read/v07/Read2007Xlsx.java
+++ b/src/test/java/read/v07/Read2007Xlsx.java
@@ -24,7 +24,7 @@ public class Read2007Xlsx {
//创建没有自定义模型,没有sheet的解析器,默认解析所有sheet解析结果以List的方式通知监听者
@Test
public void noModel() {
- InputStream inputStream = getInputStream("2007NoModelBigFile.xlsx");
+ InputStream inputStream = getInputStream("1.xlsx");
try {
ExcelReader reader = new ExcelReader(inputStream, ExcelTypeEnum.XLSX, null,
new AnalysisEventListener>() {
diff --git a/src/test/resources/1.xlsx b/src/test/resources/1.xlsx
new file mode 100644
index 00000000..609646ce
Binary files /dev/null and b/src/test/resources/1.xlsx differ