From a2f2a40e37aadc0a32435a33402a21a678464ba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Zolnai?= Date: Wed, 30 Aug 2017 16:32:10 +0200 Subject: [PATCH] tdf#112106: Corrupted pivot table after XLSX -> XLS conversion in Calc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Always write out a data layout name. Change-Id: Ic0b43d9c0365eca5e417fe9f2fe4b77b538f3278 Reviewed-on: https://gerrit.libreoffice.org/41739 Tested-by: Jenkins Reviewed-by: Tamás Zolnai --- sc/qa/unit/data/xlsx/tdf112106.xlsx | Bin 0 -> 13492 bytes sc/qa/unit/subsequent_export-test.cxx | 33 ++++++++++++++++++++++++++ sc/source/filter/excel/xepivot.cxx | 4 +--- 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100755 sc/qa/unit/data/xlsx/tdf112106.xlsx diff --git a/sc/qa/unit/data/xlsx/tdf112106.xlsx b/sc/qa/unit/data/xlsx/tdf112106.xlsx new file mode 100755 index 0000000000000000000000000000000000000000..37203d1dbd5bd24f808dc6842baeb2384979a6c2 GIT binary patch literal 13492 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 bPr?Z~DJW3<@w35?3f2q-2DV1~^X&fspO)Rg literal 0 HcmV?d00001 diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx index 60e870412c5b..79221e9c85f4 100644 --- a/sc/qa/unit/subsequent_export-test.cxx +++ b/sc/qa/unit/subsequent_export-test.cxx @@ -46,6 +46,8 @@ #include #include "validat.hxx" #include +#include "globstr.hrc" +#include "global.hxx" #include #include @@ -207,6 +209,7 @@ public: void testHiddenRepeatedRowsODS(); void testHyperlinkTargetFrameODS(); + void testTdf112106(); CPPUNIT_TEST_SUITE(ScExportTest); CPPUNIT_TEST(test); @@ -310,6 +313,7 @@ public: CPPUNIT_TEST(testHiddenRepeatedRowsODS); CPPUNIT_TEST(testHyperlinkTargetFrameODS); + CPPUNIT_TEST(testTdf112106); CPPUNIT_TEST_SUITE_END(); private: @@ -4258,6 +4262,35 @@ void ScExportTest::testPivotTableRowHeaderXLS() xDocSh->DoClose(); } +void ScExportTest::testTdf112106() +{ + ScDocShellRef xDocSh = loadDoc("tdf112106.", FORMAT_XLSX); + CPPUNIT_ASSERT_MESSAGE("Failed to load file", xDocSh.is()); + ScDocument& rDoc = xDocSh->GetDocument(); + ScDPCollection* pDPs = rDoc.GetDPCollection(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), pDPs->GetCount()); + + // Reload and check data layout dim + xDocSh = saveAndReload( &(*xDocSh), FORMAT_XLS); + CPPUNIT_ASSERT_MESSAGE("Failed to load file", xDocSh.is()); + ScDocument& rLoadedDoc = xDocSh->GetDocument(); + pDPs = rLoadedDoc.GetDPCollection(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), pDPs->GetCount()); + const ScDPObject* pDPObj = &(*pDPs)[0]; + CPPUNIT_ASSERT(pDPObj); + const ScDPSaveData* pSaveData = pDPObj->GetSaveData(); + CPPUNIT_ASSERT(pSaveData); + + // Check that we have an existing data layout dimension + const ScDPSaveDimension* pDim = pSaveData->GetExistingDataLayoutDimension(); + CPPUNIT_ASSERT(pDim); + const OUString* pLayoutName = pDim->GetLayoutName(); + CPPUNIT_ASSERT(pLayoutName); + CPPUNIT_ASSERT_EQUAL(ScGlobal::GetRscString(STR_PIVOT_DATA), (*pLayoutName)); + + xDocSh->DoClose(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(ScExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sc/source/filter/excel/xepivot.cxx b/sc/source/filter/excel/xepivot.cxx index 171837c8cac5..d28348aabf0b 100644 --- a/sc/source/filter/excel/xepivot.cxx +++ b/sc/source/filter/excel/xepivot.cxx @@ -1304,10 +1304,8 @@ void XclExpPivotTable::SetPropertiesFromDP( const ScDPSaveData& rSaveData ) ::set_flag( maPTExtInfo.mnFlags, EXC_SXEX_DRILLDOWN, rSaveData.GetDrillDown() ); mbFilterBtn = rSaveData.GetFilterButton(); const ScDPSaveDimension* pDim = rSaveData.GetExistingDataLayoutDimension(); - if (!pDim) - return; - const OUString* pLayoutName = pDim->GetLayoutName(); + const OUString* pLayoutName = pDim ? pDim->GetLayoutName() : nullptr; if (pLayoutName) maPTInfo.maDataName = *pLayoutName; else