From 21a3d78cf080dc4d86edab2a7378055a2d848bfe Mon Sep 17 00:00:00 2001 From: Jan-Marek Glogowski Date: Fri, 17 Jun 2016 21:22:02 +0200 Subject: [PATCH] tdf#100458 Don't forcefully change cell type Just quoting the source comment from the breaking commit 61c39eae570d6d6040b65bfe93127b30e6080cc8. // If a matrix formula has a matrix reference cell that is intended to // have // a blank text result, the matrix reference cell is actually // saved(export) as a float cell with 0 as the value and empty . Ok // Import works around this by setting these cells as text cells so that // the blank text is used for display instead of the number 0. This seems to be wrong. Forcing the cell to a util::NumberFormat::TEXT actually kills the cell value, if the text is a result of the formular. I'm not sure if forcefully changing the cell format at this point is correct at any time, if a cell type was already determinated. I imagine that an undefined cell type should probably be fixed at the end of the row import, if Calc detected an error case, or even generally, This patch is just a minimalistic initial fix. If it's correct, it probably needs an additional code comment. Change-Id: If7d9d69467d56c7d8fd2444f9e8b3ae906285264 Reviewed-on: https://gerrit.libreoffice.org/26435 Reviewed-by: Eike Rathke Reviewed-by: Markus Mohrhard Tested-by: Markus Mohrhard --- .../unit/data/ods/tdf100458_lost_zero_value.ods | Bin 0 -> 6965 bytes sc/qa/unit/subsequent_filters-test.cxx | 14 ++++++++++++++ sc/source/filter/xml/xmlcelli.cxx | 1 - 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 sc/qa/unit/data/ods/tdf100458_lost_zero_value.ods diff --git a/sc/qa/unit/data/ods/tdf100458_lost_zero_value.ods b/sc/qa/unit/data/ods/tdf100458_lost_zero_value.ods new file mode 100644 index 0000000000000000000000000000000000000000..afc65e7c1a6135a77900eeadb6f751a098b36eec GIT binary patch literal 6965 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 literal 0 HcmV?d00001 diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx index 0c1428ec3c06..35f0cbe9d961 100644 --- a/sc/qa/unit/subsequent_filters-test.cxx +++ b/sc/qa/unit/subsequent_filters-test.cxx @@ -215,6 +215,8 @@ public: void testBnc762542(); + void testTdf100458(); + CPPUNIT_TEST_SUITE(ScFiltersTest); CPPUNIT_TEST(testBooleanFormatXLSX); CPPUNIT_TEST(testBasicCellContentODS); @@ -318,6 +320,8 @@ public: CPPUNIT_TEST(testHiddenSheetsXLSX); + CPPUNIT_TEST(testTdf100458); + CPPUNIT_TEST_SUITE_END(); private: @@ -3328,6 +3332,16 @@ void ScFiltersTest::testRelFormulaValidationXLS() xDocSh->DoClose(); } +void ScFiltersTest::testTdf100458() +{ + ScDocShellRef xDocSh = loadDoc("tdf100458_lost_zero_value.", FORMAT_ODS); + CPPUNIT_ASSERT_MESSAGE("Failed to open doc", xDocSh.Is()); + ScDocument& rDoc = xDocSh->GetDocument(); + CPPUNIT_ASSERT(rDoc.HasValueData(0, 0, 0)); + CPPUNIT_ASSERT_EQUAL(double(0.0), rDoc.GetValue(0,0,0)); + CPPUNIT_ASSERT(!rDoc.HasStringData(0, 0, 0)); +} + ScFiltersTest::ScFiltersTest() : ScBootstrapFixture( "sc/qa/unit/data" ) { diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index 149435ec3766..c8825fef003e 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -1511,7 +1511,6 @@ void ScXMLTableRowCellContext::EndElement() if( bFormulaTextResult && (mbPossibleErrorCell || mbCheckWithCompilerForError) ) { maStringValue.reset(GetFirstParagraph()); - nCellType = util::NumberFormat::TEXT; } ScAddress aCellPos = rXMLImport.GetTables().GetCurrentCellPos();