tdf#142905 XLSX import: don't trim leading spaces in formula cell

When importing an XLSX file, there was a discrepancy between the
read and recalculated cell values if it contains leading/ending
spaces. With this fix, trimming in worksheet files is only applied
to elements that contain a parameter and do not have a
space="preserved" parameter.

Change-Id: I91e09eaa3cb79537ddbed36e1124e4afd124d8f0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154674
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
(cherry picked from commit 864e5cdb0cc91b9bf2ea0428590094a8901b33ed)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154914
Tested-by: Jenkins
diff --git a/sc/qa/unit/data/xlsx/tdf142905.xlsx b/sc/qa/unit/data/xlsx/tdf142905.xlsx
new file mode 100644
index 0000000..b6e8296
--- /dev/null
+++ b/sc/qa/unit/data/xlsx/tdf142905.xlsx
Binary files differ
diff --git a/sc/qa/unit/subsequent_filters_test4.cxx b/sc/qa/unit/subsequent_filters_test4.cxx
index 646b1e6..27d9d6f 100644
--- a/sc/qa/unit/subsequent_filters_test4.cxx
+++ b/sc/qa/unit/subsequent_filters_test4.cxx
@@ -1918,6 +1918,18 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest4, testTdf155402)
    CPPUNIT_ASSERT_EQUAL(OUString("/[tdf155402.xlsx]Sheet1"), aFilename);
}

CPPUNIT_TEST_FIXTURE(ScFiltersTest4, testTdf142905)
{
    createScDoc("xlsx/tdf142905.xlsx");
    ScDocument* pDoc = getScDoc();

    // Without the fix, trims the spaces in cell C1 after reading the XLSX file.
    // After recalculation it is fixed.
    // - Expected: "     3M   "
    // - Actual  : "3M"
    CPPUNIT_ASSERT_EQUAL(OUString("     3M   "), pDoc->GetString(2, 0, 0));
}

ScFiltersTest4::ScFiltersTest4()
    : ScModelTestBase("sc/qa/unit/data")
{
diff --git a/sc/source/filter/oox/excelhandlers.cxx b/sc/source/filter/oox/excelhandlers.cxx
index ab39116..77b5dda 100644
--- a/sc/source/filter/oox/excelhandlers.cxx
+++ b/sc/source/filter/oox/excelhandlers.cxx
@@ -30,9 +30,11 @@ WorkbookFragmentBase::WorkbookFragmentBase(
{
}

// tdf142905: Change mbEnableTrimSpace default value is false,
// because it will not trim members that do not have an attribute.
WorksheetFragmentBase::WorksheetFragmentBase(
        const WorksheetHelper& rHelper, const OUString& rFragmentPath ) :
    FragmentHandler2( rHelper.getOoxFilter(), rFragmentPath ),
    FragmentHandler2( rHelper.getOoxFilter(), rFragmentPath, false ),
    WorksheetHelper( rHelper )
{
}