diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java index 7b48c8a6..25fcd0e8 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java @@ -1,8 +1,5 @@ package com.alibaba.excel.analysis.v07.handlers.sax; -import java.util.HashMap; -import java.util.Map; - import com.alibaba.excel.analysis.v07.handlers.CellFormulaTagHandler; import com.alibaba.excel.analysis.v07.handlers.CellInlineStringValueTagHandler; import com.alibaba.excel.analysis.v07.handlers.CellTagHandler; @@ -14,12 +11,15 @@ import com.alibaba.excel.analysis.v07.handlers.RowTagHandler; import com.alibaba.excel.analysis.v07.handlers.XlsxTagHandler; import com.alibaba.excel.constant.ExcelXmlConstants; import com.alibaba.excel.context.xlsx.XlsxReadContext; - +import com.alibaba.excel.enums.CellDataTypeEnum; import lombok.extern.slf4j.Slf4j; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; +import java.util.HashMap; +import java.util.Map; + /** * @author jipengfei */ @@ -87,6 +87,12 @@ public class XlsxRowHandler extends DefaultHandler { if (handler == null || !handler.support(xlsxReadContext)) { return; } + //If the cell type is 'inLineStr', then the label must be ignored + if (xlsxReadContext.xlsxReadSheetHolder().getTempCellData() != null + && CellDataTypeEnum.DIRECT_STRING.equals(xlsxReadContext.xlsxReadSheetHolder().getTempCellData().getType()) + && ExcelXmlConstants.CELL_VALUE_TAG.equals(currentTag)) { + return; + } handler.characters(xlsxReadContext, ch, start, length); } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/enums/CellDataTypeEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/CellDataTypeEnum.java index 0f1a46cf..b88f9200 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/enums/CellDataTypeEnum.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/enums/CellDataTypeEnum.java @@ -50,7 +50,7 @@ public enum CellDataTypeEnum { static { TYPE_ROUTING_MAP.put("s", STRING); - TYPE_ROUTING_MAP.put("str", DIRECT_STRING); + TYPE_ROUTING_MAP.put("str", ERROR); TYPE_ROUTING_MAP.put("inlineStr", DIRECT_STRING); TYPE_ROUTING_MAP.put("e", ERROR); TYPE_ROUTING_MAP.put("b", BOOLEAN); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue3823/Issue3823Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue3823/Issue3823Test.java new file mode 100644 index 00000000..60f84531 --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue3823/Issue3823Test.java @@ -0,0 +1,47 @@ +package com.alibaba.easyexcel.test.temp.issue3823; + +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.read.listener.ReadListener; +import com.alibaba.fastjson2.JSON; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.junit.jupiter.api.Test; + +import java.io.File; + +public class Issue3823Test { + //Issue link: https://github.com/alibaba/easyexcel/issues/3823 + @Test + public void IssueTest() throws Exception { + + String fileName = TestFileUtil.getPath() + "temp" + File.separator + "issue3823" + File.separator + "bug.xlsx"; + + EasyExcel.read(fileName, new ReadListener() { + @Override + public void invoke(Object data, AnalysisContext context) { + System.out.println(JSON.toJSONString(data)); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + + } + }).sheet().doRead(); + + + XSSFWorkbook workbook = new XSSFWorkbook(fileName); + XSSFSheet sheet = workbook.getSheetAt(0); + for (Row row : sheet) { + StringBuilder sb = new StringBuilder(); + for (Cell cell : row) { + sb.append(cell.getStringCellValue()).append(" "); + } + System.out.println(sb); + } + } + +} diff --git a/easyexcel-test/src/test/resources/temp/issue3823/bug.xlsx b/easyexcel-test/src/test/resources/temp/issue3823/bug.xlsx new file mode 100644 index 00000000..d9948a6b Binary files /dev/null and b/easyexcel-test/src/test/resources/temp/issue3823/bug.xlsx differ