From f73d8eb0b36e9e7928c9d6a9e92d48aff388fb96 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 18 Dec 2024 13:30:17 +0000 Subject: [PATCH] Fix issue with inline stings. --- .../xssfreader/XSSFReaderSheetXMLHandler.java | 1 + test/Table_Tests/data/Sales_Sample_Data.xlsx | Bin 0 -> 40959 bytes test/Table_Tests/src/IO/Excel_Spec.enso | 23 ++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 test/Table_Tests/data/Sales_Sample_Data.xlsx diff --git a/std-bits/table/src/main/java/org/enso/table/excel/xssfreader/XSSFReaderSheetXMLHandler.java b/std-bits/table/src/main/java/org/enso/table/excel/xssfreader/XSSFReaderSheetXMLHandler.java index f3ea10bcbba3..9b6dba021e57 100644 --- a/std-bits/table/src/main/java/org/enso/table/excel/xssfreader/XSSFReaderSheetXMLHandler.java +++ b/std-bits/table/src/main/java/org/enso/table/excel/xssfreader/XSSFReaderSheetXMLHandler.java @@ -131,6 +131,7 @@ public void startElement(String uri, String localName, String qName, Attributes break; case "is": // Inline String isIsOpen = true; + value.setLength(0); break; } } diff --git a/test/Table_Tests/data/Sales_Sample_Data.xlsx b/test/Table_Tests/data/Sales_Sample_Data.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c0ad6987020cb2dafa0f6e702a9c06995e843a85 GIT binary patch literal 40959 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 literal 0 HcmV?d00001 diff --git a/test/Table_Tests/src/IO/Excel_Spec.enso b/test/Table_Tests/src/IO/Excel_Spec.enso index 0a14e2c546da..eb87b1bb5968 100644 --- a/test/Table_Tests/src/IO/Excel_Spec.enso +++ b/test/Table_Tests/src/IO/Excel_Spec.enso @@ -1218,6 +1218,29 @@ add_specs suite_builder = workbook.close . should_equal Nothing workbook.read "Sheet1" . should_fail_with Illegal_State + group_builder.specify "should be able to read a XLSX with inline strings" <| + workbook = (enso_project.data / "Sales_Sample_Data.xlsx") . read + workbook.sheet_count . should_equal 29 + workbook.sheet_names . should_equal ['202201', '202202', '202203', '202204', '202205', '202206', '202207', '202208', '202209', '202210', '202211', '202212', '202301', '202302', '202303', '202304', '202305', '202306', '202307', '202308', '202309', '202310', '202311', '202312', '202401', '202402', '202403', '202404', '202405'] + + column_names = ['TERRITORY', 'DEALSIZE', 'PRODUCTLINE', 'OrderCount', 'SALES'] + + first_sheet = workbook.read '202201' + first_sheet.column_names . should_equal column_names + first_sheet.at 'TERRITORY' . to_vector . should_equal ['EMEA', 'NA', 'EMEA', 'EMEA', 'EMEA', 'EMEA', 'NA', 'EMEA', 'EMEA', 'EMEA'] + first_sheet.at 'DEALSIZE' . to_vector . should_equal ['Medium', 'Medium', 'Small', 'Small', 'Small', 'Medium', 'Small', 'Medium', 'Small', 'Medium'] + first_sheet.at 'PRODUCTLINE' . to_vector . should_equal ['Classic Cars', 'Vintage Cars', 'Classic Cars', 'Vintage Cars', 'Trucks and Buses', 'Trains', 'Vintage Cars', 'Vintage Cars', 'Trains', 'Trucks and Buses'] + first_sheet.at 'OrderCount' . to_vector . should_equal [7, 3, 3, 7, 2, 1, 3, 3, 1, 9] + first_sheet.at 'SALES' . to_vector . should_equal [34585.61, 13349.31, 6606.17, 15482.34, 2856.68, 3227.63, 5647.99, 12347.2, 1705.92, 33944.75] + + last_sheet = workbook.read '202405' + last_sheet.column_names . should_equal column_names + last_sheet.at 'TERRITORY' . to_vector . should_equal ['NA', 'EMEA', 'EMEA', 'NA', 'EMEA', 'EMEA', 'NA', 'EMEA', 'EMEA', 'EMEA', 'NA', 'NA', 'EMEA', 'EMEA', 'EMEA', 'NA', 'EMEA', 'NA'] + last_sheet.at 'DEALSIZE' . to_vector . should_equal ['Large', 'Medium', 'Small', 'Medium', 'Medium', 'Small', 'Small', 'Medium', 'Medium', 'Small', 'Medium', 'Small', 'Small', 'Small', 'Large', 'Medium', 'Large', 'Small'] + last_sheet.at 'PRODUCTLINE' . to_vector . should_equal ['Classic Cars', 'Planes', 'Trucks and Buses', 'Classic Cars', 'Trucks and Buses', 'Vintage Cars', 'Vintage Cars', 'Classic Cars', 'Motorcycles', 'Classic Cars', 'Trucks and Buses', 'Trains', 'Planes', 'Motorcycles', 'Classic Cars', 'Trains', 'Trucks and Buses', 'Trucks and Buses'] + last_sheet.at 'OrderCount' . to_vector . should_equal [2, 4, 2, 5, 3, 2, 1, 10, 1, 6, 3, 1, 6, 1, 3, 1, 1, 2] + last_sheet.at 'SALES' . to_vector . should_equal [16914.55, 17742.36, 3838.83, 22429.29, 14910.28, 3513.13, 2095.45, 46915.8, 4764.6, 8776.53, 14680.72, 1193.04, 12686.65, 2803.2, 28823.4, 3256.35, 8498.0, 4772.04] + group_builder.specify "should be able to read a mixed Date and DateTime column" <| table = (enso_project.data / "MixedExcel.xlsx") . read ..Sheet table.row_count . should_equal 5