From dedd35d146103a8b0ce642eef91ae2c2a144470f Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Wed, 4 Jan 2023 16:53:43 +0800 Subject: [PATCH 1/2] =?UTF-8?q?*=20=E6=8F=90=E9=AB=98xlsx=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E5=85=BC=E5=AE=B9=E6=80=A7=EF=BC=9A=E5=85=BC=E7=94=A8?= =?UTF-8?q?ns2=E5=BC=80=E5=A4=B4=E7=9A=84=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sax/SharedStringsTableHandler.java | 6 ++++++ .../v07/handlers/sax/XlsxRowHandler.java | 10 +++++++++- .../excel/constant/ExcelXmlConstants.java | 17 +++++++++++++++++ .../core/compatibility/CompatibilityTest.java | 16 ++++++++++++++-- .../src/test/resources/compatibility/t04.xlsx | Bin 0 -> 19182 bytes pom.xml | 2 +- update.md | 4 ++++ 7 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 easyexcel-test/src/test/resources/compatibility/t04.xlsx diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java index 83e92df3..203db6c7 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java @@ -44,15 +44,18 @@ public class SharedStringsTableHandler extends DefaultHandler { switch (name) { case ExcelXmlConstants.SHAREDSTRINGS_T_TAG: case ExcelXmlConstants.SHAREDSTRINGS_X_T_TAG: + case ExcelXmlConstants.SHAREDSTRINGS_NS2_T_TAG: currentElementData = null; isTagt = true; break; case ExcelXmlConstants.SHAREDSTRINGS_SI_TAG: case ExcelXmlConstants.SHAREDSTRINGS_X_SI_TAG: + case ExcelXmlConstants.SHAREDSTRINGS_NS2_SI_TAG: currentData = null; break; case ExcelXmlConstants.SHAREDSTRINGS_RPH_TAG: case ExcelXmlConstants.SHAREDSTRINGS_X_RPH_TAG: + case ExcelXmlConstants.SHAREDSTRINGS_NS2_RPH_TAG: ignoreTagt = true; break; default: @@ -68,6 +71,7 @@ public class SharedStringsTableHandler extends DefaultHandler { switch (name) { case ExcelXmlConstants.SHAREDSTRINGS_T_TAG: case ExcelXmlConstants.SHAREDSTRINGS_X_T_TAG: + case ExcelXmlConstants.SHAREDSTRINGS_NS2_T_TAG: if (currentElementData != null) { if (currentData == null) { currentData = new StringBuilder(); @@ -78,6 +82,7 @@ public class SharedStringsTableHandler extends DefaultHandler { break; case ExcelXmlConstants.SHAREDSTRINGS_SI_TAG: case ExcelXmlConstants.SHAREDSTRINGS_X_SI_TAG: + case ExcelXmlConstants.SHAREDSTRINGS_NS2_SI_TAG: if (currentData == null) { readCache.put(null); } else { @@ -86,6 +91,7 @@ public class SharedStringsTableHandler extends DefaultHandler { break; case ExcelXmlConstants.SHAREDSTRINGS_RPH_TAG: case ExcelXmlConstants.SHAREDSTRINGS_X_RPH_TAG: + case ExcelXmlConstants.SHAREDSTRINGS_NS2_RPH_TAG: ignoreTagt = false; break; default: 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 61805cd5..7b48c8a6 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 @@ -26,33 +26,41 @@ import org.xml.sax.helpers.DefaultHandler; @Slf4j public class XlsxRowHandler extends DefaultHandler { private final XlsxReadContext xlsxReadContext; - private static final Map XLSX_CELL_HANDLER_MAP = new HashMap(32); + private static final Map XLSX_CELL_HANDLER_MAP = new HashMap<>(64); static { CellFormulaTagHandler cellFormulaTagHandler = new CellFormulaTagHandler(); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_FORMULA_TAG, cellFormulaTagHandler); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_FORMULA_TAG, cellFormulaTagHandler); + XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_FORMULA_TAG, cellFormulaTagHandler); CellInlineStringValueTagHandler cellInlineStringValueTagHandler = new CellInlineStringValueTagHandler(); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_INLINE_STRING_VALUE_TAG, cellInlineStringValueTagHandler); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_INLINE_STRING_VALUE_TAG, cellInlineStringValueTagHandler); + XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_INLINE_STRING_VALUE_TAG, cellInlineStringValueTagHandler); CellTagHandler cellTagHandler = new CellTagHandler(); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_TAG, cellTagHandler); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_TAG, cellTagHandler); + XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_TAG, cellTagHandler); CellValueTagHandler cellValueTagHandler = new CellValueTagHandler(); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_VALUE_TAG, cellValueTagHandler); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_VALUE_TAG, cellValueTagHandler); + XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_VALUE_TAG, cellValueTagHandler); CountTagHandler countTagHandler = new CountTagHandler(); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.DIMENSION_TAG, countTagHandler); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_DIMENSION_TAG, countTagHandler); + XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_DIMENSION_TAG, countTagHandler); HyperlinkTagHandler hyperlinkTagHandler = new HyperlinkTagHandler(); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.HYPERLINK_TAG, hyperlinkTagHandler); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_HYPERLINK_TAG, hyperlinkTagHandler); + XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_HYPERLINK_TAG, hyperlinkTagHandler); MergeCellTagHandler mergeCellTagHandler = new MergeCellTagHandler(); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.MERGE_CELL_TAG, mergeCellTagHandler); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_MERGE_CELL_TAG, mergeCellTagHandler); + XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_MERGE_CELL_TAG, mergeCellTagHandler); RowTagHandler rowTagHandler = new RowTagHandler(); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.ROW_TAG, rowTagHandler); XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_ROW_TAG, rowTagHandler); + XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_ROW_TAG, rowTagHandler); } public XlsxRowHandler(XlsxReadContext xlsxReadContext) { diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/constant/ExcelXmlConstants.java b/easyexcel-core/src/main/java/com/alibaba/excel/constant/ExcelXmlConstants.java index 8d50c18d..c1d33592 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/constant/ExcelXmlConstants.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/constant/ExcelXmlConstants.java @@ -17,16 +17,28 @@ public class ExcelXmlConstants { public static final String HYPERLINK_TAG = "hyperlink"; public static final String X_DIMENSION_TAG = "x:dimension"; + public static final String NS2_DIMENSION_TAG = "ns2:dimension"; + public static final String X_ROW_TAG = "x:row"; + public static final String NS2_ROW_TAG = "ns2:row"; + public static final String X_CELL_FORMULA_TAG = "x:f"; + public static final String NS2_CELL_FORMULA_TAG = "ns2:f"; public static final String X_CELL_VALUE_TAG = "x:v"; + public static final String NS2_CELL_VALUE_TAG = "ns2:v"; + /** * When the data is "inlineStr" his tag is "t" */ public static final String X_CELL_INLINE_STRING_VALUE_TAG = "x:t"; + public static final String NS2_CELL_INLINE_STRING_VALUE_TAG = "ns2:t"; + public static final String X_CELL_TAG = "x:c"; + public static final String NS2_CELL_TAG = "ns2:c"; public static final String X_MERGE_CELL_TAG = "x:mergeCell"; + public static final String NS2_MERGE_CELL_TAG = "ns2:mergeCell"; public static final String X_HYPERLINK_TAG = "x:hyperlink"; + public static final String NS2_HYPERLINK_TAG = "ns2:hyperlink"; /** * s attribute @@ -66,17 +78,22 @@ public class ExcelXmlConstants { */ public static final String SHAREDSTRINGS_T_TAG = "t"; public static final String SHAREDSTRINGS_X_T_TAG = "x:t"; + public static final String SHAREDSTRINGS_NS2_T_TAG = "ns2:t"; + /** * SharedStringItem */ public static final String SHAREDSTRINGS_SI_TAG = "si"; public static final String SHAREDSTRINGS_X_SI_TAG = "x:si"; + public static final String SHAREDSTRINGS_NS2_SI_TAG = "ns2:si"; + /** * Mac 2016 2017 will have this extra field to ignore */ public static final String SHAREDSTRINGS_RPH_TAG = "rPh"; public static final String SHAREDSTRINGS_X_RPH_TAG = "x:rPh"; + public static final String SHAREDSTRINGS_NS2_RPH_TAG = "ns2:rPh"; } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java index 3b0b525a..eadfd0a8 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java @@ -45,11 +45,23 @@ public class CompatibilityTest { @Test public void t03() { - // Exist in `sharedStrings.xml` `x:t` start tag, need to be compatible - List> list = EasyExcel.read(TestFileUtil.getPath() + "compatibility/t03.xlsx").sheet().doReadSync(); + // In the presence of the first line of a lot of null columns, ignore null columns + List> list = EasyExcel.read(TestFileUtil.getPath() + "compatibility/t03.xlsx").sheet() + .doReadSync(); log.info("data:{}", JSON.toJSONString(list)); Assert.assertEquals(1, list.size()); Map row0 = list.get(0); Assert.assertEquals(12, row0.size()); } + + @Test + public void t04() { + // Exist in `sheet1.xml` `ns2:t` start tag, need to be compatible + List> list = EasyExcel.read(TestFileUtil.getPath() + "compatibility/t04.xlsx").sheet() + .doReadSync(); + log.info("data:{}", JSON.toJSONString(list)); + Assert.assertEquals(56, list.size()); + Map row0 = list.get(0); + Assert.assertEquals("QQSJK28F152A012242S0081", row0.get(5)); + } } diff --git a/easyexcel-test/src/test/resources/compatibility/t04.xlsx b/easyexcel-test/src/test/resources/compatibility/t04.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7c95d425ced10ab0b8644db40d68ac599f440608 GIT binary patch literal 19182 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index eca83ca2..de5d0681 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 3.1.4 + 3.1.5 UTF-8 1.8 true diff --git a/update.md b/update.md index 2c698a0b..782e7a80 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,7 @@ +# 3.1.5 + +* 提高xlsx读取兼容性:兼用ns2开头的标签 + # 3.1.4 * 提高xlsx读取兼容性:在存在第一行很多空列的情况下,忽略空列 From 5301198cd2120a5b32a38805a6c7db4ce5bfdbe0 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Wed, 4 Jan 2023 17:07:49 +0800 Subject: [PATCH 2/2] =?UTF-8?q?*=20=E6=8F=90=E9=AB=98xlsx=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E5=85=BC=E5=AE=B9=E6=80=A7=EF=BC=9A=E5=85=BC=E7=94=A8?= =?UTF-8?q?ns2=E5=BC=80=E5=A4=B4=E7=9A=84=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4671022..ba2e8c34 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都 com.alibaba easyexcel - 3.1.4 + 3.1.5 ```