[Libreoffice-commits] core.git: sc/qa sc/source
Tamás Zolnai
tamas.zolnai at collabora.com
Thu Oct 19 12:40:15 UTC 2017
sc/qa/unit/data/xlsx/pivottable_tabular_mode.xlsx |binary
sc/qa/unit/subsequent_export-test.cxx | 20 +++++++
sc/source/filter/excel/xepivotxml.cxx | 57 ++++++++++++++++------
3 files changed, 64 insertions(+), 13 deletions(-)
New commits:
commit 8cf0b4b4cd748094889a6a9ac6883dd457113b74
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
Date: Thu Oct 19 10:43:31 2017 +0200
tdf#113159: Pivot table: tabular mode is converted to oultine mode
... after RT XLSX in Calc
Change-Id: I9725ca55aed973133db1d5fe47463575148e00b8
Reviewed-on: https://gerrit.libreoffice.org/43537
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Tamás Zolnai <tamas.zolnai at collabora.com>
diff --git a/sc/qa/unit/data/xlsx/pivottable_tabular_mode.xlsx b/sc/qa/unit/data/xlsx/pivottable_tabular_mode.xlsx
new file mode 100755
index 000000000000..0bcfe1742d95
Binary files /dev/null and b/sc/qa/unit/data/xlsx/pivottable_tabular_mode.xlsx differ
diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx
index 72fe254d850c..ee8e33433bab 100644
--- a/sc/qa/unit/subsequent_export-test.cxx
+++ b/sc/qa/unit/subsequent_export-test.cxx
@@ -228,6 +228,7 @@ public:
void testPivotTableErrorItemFilterXLSX();
void testPivotTableOutlineModeXLSX();
void testPivotTableDuplicatedMemberFilterXLSX();
+ void testPivotTableTabularModeXLSX();
CPPUNIT_TEST_SUITE(ScExportTest);
CPPUNIT_TEST(test);
@@ -350,6 +351,7 @@ public:
CPPUNIT_TEST(testPivotTableErrorItemFilterXLSX);
CPPUNIT_TEST(testPivotTableOutlineModeXLSX);
CPPUNIT_TEST(testPivotTableDuplicatedMemberFilterXLSX);
+ CPPUNIT_TEST(testPivotTableTabularModeXLSX);
CPPUNIT_TEST_SUITE_END();
@@ -5286,6 +5288,24 @@ void ScExportTest::testPivotTableDuplicatedMemberFilterXLSX()
assertXPath(pTable, "/x:pivotTableDefinition/x:pivotFields/x:pivotField[5]/x:items", "count", "21");
}
+void ScExportTest::testPivotTableTabularModeXLSX()
+{
+ ScDocShellRef xShell = loadDoc("pivottable_tabular_mode.", FORMAT_XLSX);
+ CPPUNIT_ASSERT(xShell.is());
+
+ std::shared_ptr<utl::TempFile> pXPathFile = ScBootstrapFixture::exportTo(&(*xShell), FORMAT_XLSX);
+ xmlDocPtr pTable = XPathHelper::parseExport(pXPathFile, m_xSFactory, "xl/pivotTables/pivotTable1.xml");
+ CPPUNIT_ASSERT(pTable);
+
+ // In tabular mode both outline and compact flag should be false
+ assertXPath(pTable, "/x:pivotTableDefinition", "outline", "0");
+ assertXPath(pTable, "/x:pivotTableDefinition", "outlineData", "0");
+ assertXPath(pTable, "/x:pivotTableDefinition", "compact", "0");
+ assertXPath(pTable, "/x:pivotTableDefinition", "compactData", "0");
+ assertXPath(pTable, "/x:pivotTableDefinition/x:pivotFields/x:pivotField[1]", "compact", "0");
+ assertXPath(pTable, "/x:pivotTableDefinition/x:pivotFields/x:pivotField[1]", "outline", "0");
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(ScExportTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sc/source/filter/excel/xepivotxml.cxx b/sc/source/filter/excel/xepivotxml.cxx
index 99510d85835a..b5eacfad9bf3 100644
--- a/sc/source/filter/excel/xepivotxml.cxx
+++ b/sc/source/filter/excel/xepivotxml.cxx
@@ -20,6 +20,7 @@
#include <sax/tools/converter.hxx>
#include <com/sun/star/sheet/DataPilotFieldOrientation.hpp>
+#include <com/sun/star/sheet/DataPilotFieldLayoutMode.hpp>
#include <com/sun/star/sheet/DataPilotOutputRangeType.hpp>
#include <com/sun/star/sheet/GeneralFunction.hpp>
@@ -613,7 +614,7 @@ void XclExpXmlPivotTables::SavePivotTableXml( XclExpXmlStream& rStrm, const ScDP
// Dimension order here is significant as they specify the order of
// appearance in each axis.
const ScDPSaveData::DimsType& rDims = rSaveData.GetDimensions();
-
+ bool bTabularMode = false;
for (const auto & i : rDims)
{
const ScDPSaveDimension& rDim = *i;
@@ -655,6 +656,8 @@ void XclExpXmlPivotTables::SavePivotTableXml( XclExpXmlStream& rStrm, const ScDP
default:
;
}
+ if(rDim.GetLayoutInfo())
+ bTabularMode |= (rDim.GetLayoutInfo()->LayoutMode == sheet::DataPilotFieldLayoutMode::TABULAR_LAYOUT);
}
sax_fastparser::FSHelperPtr& pPivotStrm = rStrm.GetCurrentStream();
@@ -672,8 +675,8 @@ void XclExpXmlPivotTables::SavePivotTableXml( XclExpXmlStream& rStrm, const ScDP
XML_useAutoFormatting, ToPsz10(false),
XML_itemPrintTitles, ToPsz10(true),
XML_indent, ToPsz10(false),
- XML_outline, ToPsz10(true),
- XML_outlineData, ToPsz10(true),
+ XML_outline, ToPsz10(!bTabularMode),
+ XML_outlineData, ToPsz10(!bTabularMode),
XML_compact, ToPsz10(false),
XML_compactData, ToPsz10(false),
FSEND);
@@ -730,25 +733,51 @@ void XclExpXmlPivotTables::SavePivotTableXml( XclExpXmlStream& rStrm, const ScDP
continue;
}
+ bool bDimInTabularMode = false;
+ if(pDim->GetLayoutInfo())
+ bDimInTabularMode |= (pDim->GetLayoutInfo()->LayoutMode == sheet::DataPilotFieldLayoutMode::TABULAR_LAYOUT);
+
sheet::DataPilotFieldOrientation eOrient = pDim->GetOrientation();
if (eOrient == sheet::DataPilotFieldOrientation_HIDDEN)
{
- pPivotStrm->singleElement(XML_pivotField,
- XML_showAll, ToPsz10(false),
- XML_compact, ToPsz10(false),
- FSEND);
+ if(bDimInTabularMode)
+ {
+ pPivotStrm->singleElement(XML_pivotField,
+ XML_showAll, ToPsz10(false),
+ XML_compact, ToPsz10(false),
+ XML_outline, ToPsz10(false),
+ FSEND);
+ }
+ else
+ {
+ pPivotStrm->singleElement(XML_pivotField,
+ XML_showAll, ToPsz10(false),
+ XML_compact, ToPsz10(false),
+ FSEND);
+ }
continue;
}
if (eOrient == sheet::DataPilotFieldOrientation_DATA)
{
- pPivotStrm->singleElement(XML_pivotField,
- XML_dataField, ToPsz10(true),
- XML_showAll, ToPsz10(false),
- XML_compact, ToPsz10(false),
- FSEND);
-
+ if(bDimInTabularMode)
+ {
+ pPivotStrm->singleElement(XML_pivotField,
+ XML_dataField, ToPsz10(true),
+ XML_showAll, ToPsz10(false),
+ XML_compact, ToPsz10(false),
+ XML_outline, ToPsz10(false),
+ FSEND);
+ }
+ else
+ {
+ pPivotStrm->singleElement(XML_pivotField,
+ XML_dataField, ToPsz10(true),
+ XML_showAll, ToPsz10(false),
+ XML_compact, ToPsz10(false),
+ FSEND);
+ }
continue;
}
@@ -817,6 +846,8 @@ void XclExpXmlPivotTables::SavePivotTableXml( XclExpXmlStream& rStrm, const ScDP
pAttList->add(XML_defaultSubtotal, ToPsz10(false));
pAttList->add( XML_compact, ToPsz10(false));
+ if(bDimInTabularMode)
+ pAttList->add( XML_outline, ToPsz10(false));
sax_fastparser::XFastAttributeListRef xAttributeList(pAttList);
pPivotStrm->startElement(XML_pivotField, xAttributeList);
More information about the Libreoffice-commits
mailing list