From a59eb39c6ec01ae2a9d8ddbb61a9c27f527c9caa Mon Sep 17 00:00:00 2001 From: Balazs Varga Date: Thu, 14 Nov 2019 15:02:35 +0100 Subject: tdf#123774 OOXML chart export: keep digits of percentages of data points MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit by exporting PercentageNumberFormat, checking the "Label" format directly and taking the respective number format based on that. Note: also fix the "LinkNumberFormatToSource" property. If we create a pie chart with data labels and set the "Show value as number" or "Show value as percentage" and check on/off "Source format", this move is not set the property in the XPropertySet. Because of this, it fixes also the export of correct value of "link-data-style-to-source" property into ODS files. But this patch doesn't fix the export of old ODS files to OOXML, because they contain wrong (always true) "link-data-style-to-source" value. Change-Id: I4098a245dec5bf35cde20c9ccb79aca726230118 Reviewed-on: https://gerrit.libreoffice.org/82703 Reviewed-by: László Németh Tested-by: László Németh --- chart2/qa/extras/chart2export.cxx | 14 ++++++++++++++ chart2/qa/extras/data/ods/tdf123774.ods | Bin 0 -> 16140 bytes .../itemsetwrapper/DataPointItemConverter.cxx | 1 + .../itemsetwrapper/TextLabelItemConverter.cxx | 1 + oox/source/export/chartexport.cxx | 14 ++++++++++++-- 5 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 chart2/qa/extras/data/ods/tdf123774.ods diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx index 694e814250bd..8d42c8ac93ac 100644 --- a/chart2/qa/extras/chart2export.cxx +++ b/chart2/qa/extras/chart2export.cxx @@ -99,6 +99,7 @@ public: void testMarkerColorXLSX(); void testRoundedCornersXLSX(); void testAxisNumberFormatXLSX(); + void testDataPointLabelNumberFormatXLSX(); void testDataLabelDefaultValuesXLSX(); void testTitleOverlayXLSX(); void testInvertIfNegativeXLSX(); @@ -210,6 +211,7 @@ public: CPPUNIT_TEST(testMarkerColorXLSX); CPPUNIT_TEST(testRoundedCornersXLSX); CPPUNIT_TEST(testAxisNumberFormatXLSX); + CPPUNIT_TEST(testDataPointLabelNumberFormatXLSX); CPPUNIT_TEST(testDataLabelDefaultValuesXLSX); CPPUNIT_TEST(testTitleOverlayXLSX); CPPUNIT_TEST(testInvertIfNegativeXLSX); @@ -1584,6 +1586,18 @@ void Chart2ExportTest::testAxisNumberFormatXLSX() assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[2]/c:numFmt", "sourceLinked", "1"); } +void Chart2ExportTest::testDataPointLabelNumberFormatXLSX() +{ + load("/chart2/qa/extras/data/ods/", "tdf123774.ods"); + xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML"); + CPPUNIT_ASSERT(pXmlDoc); + assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:numFmt", "formatCode", "[$-40E]0.00%"); + assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:numFmt", "sourceLinked", "0"); + + assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[1]/c:numFmt", "formatCode", "[$-40E]0.00%"); + assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[1]/c:numFmt", "sourceLinked", "0"); +} + void Chart2ExportTest::testDataLabelDefaultValuesXLSX() { load("/chart2/qa/extras/data/xlsx/", "data_label.xlsx"); diff --git a/chart2/qa/extras/data/ods/tdf123774.ods b/chart2/qa/extras/data/ods/tdf123774.ods new file mode 100644 index 000000000000..5c422b58c357 Binary files /dev/null and b/chart2/qa/extras/data/ods/tdf123774.ods differ diff --git a/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx b/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx index 39babb82a09c..0d592f4733a8 100644 --- a/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx @@ -153,6 +153,7 @@ bool lcl_UseSourceFormatFromItemToPropertySet( sal_uInt16 nWhichId, const SfxIte uno::Any aNewValue; bool bUseSourceFormat = static_cast< const SfxBoolItem & >( rItemSet.Get( nWhichId )).GetValue(); + xPropertySet->setPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT, uno::Any(bUseSourceFormat)); if( !bUseSourceFormat ) { SfxItemState aState = rItemSet.GetItemState( nFormatWhich ); diff --git a/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx b/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx index 86f5891bbad9..81c7c8fcd9a0 100644 --- a/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx @@ -150,6 +150,7 @@ bool useSourceFormatFromItemToPropertySet( uno::Any aNewValue; bool bUseSourceFormat = static_cast( rItemSet.Get(nWhichId)).GetValue(); + xPropertySet->setPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT, uno::Any(bUseSourceFormat)); if (!bUseSourceFormat) { SfxItemState aState = rItemSet.GetItemState(nFormatWhich); diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index aeb2c8012674..7f0f948a4d85 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -3264,7 +3264,12 @@ void ChartExport::exportDataLabels( if (GetProperty(xPropSet, "LinkNumberFormatToSource")) mAny >>= bLinkedNumFmt; - if (GetProperty(xPropSet, "NumberFormat") || GetProperty(xPropSet, "PercentageNumberFormat")) + chart2::DataPointLabel aLabel; + bool bLabelIsNumberFormat = true; + if( xPropSet->getPropertyValue("Label") >>= aLabel ) + bLabelIsNumberFormat = aLabel.ShowNumber; + + if (GetProperty(xPropSet, bLabelIsNumberFormat ? OUString("NumberFormat") : OUString("PercentageNumberFormat"))) { sal_Int32 nKey = 0; mAny >>= nKey; @@ -3337,7 +3342,12 @@ void ChartExport::exportDataLabels( pFS->startElement(FSNS(XML_c, XML_dLbl)); pFS->singleElement(FSNS(XML_c, XML_idx), XML_val, OString::number(nIdx)); - if (GetProperty(xLabelPropSet, "NumberFormat") || GetProperty(xLabelPropSet, "PercentageNumberFormat")) + if( xLabelPropSet->getPropertyValue("Label") >>= aLabel ) + bLabelIsNumberFormat = aLabel.ShowNumber; + else + bLabelIsNumberFormat = true; + + if (GetProperty(xLabelPropSet, bLabelIsNumberFormat ? OUString("NumberFormat") : OUString("PercentageNumberFormat"))) { sal_Int32 nKey = 0; mAny >>= nKey; -- cgit v1.2.3