From 509cfa40691cf544519872a63335cff4a4d94006 Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Fri, 27 Nov 2015 22:57:55 +0100 Subject: Resolves: tdf#96072 export Chart format codes in Excel notation As for the change in chart2/qa/extras/chart2export.cxx Chart2ExportTest::testAxisNumberFormatXLSX() unit test: also Excel writes string parts of format codes quoted, including minus sign in negative subformat. Change-Id: I201bb012df818129cbc65de0eee8eca59e57d829 --- oox/source/export/chartexport.cxx | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'oox') diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index 14e49a86161d..e62ad953442f 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -90,6 +90,10 @@ #include #include #include "ColorPropertySet.hxx" + +#include +#include + #include #include @@ -3753,17 +3757,26 @@ bool ChartExport::isDeep3dChart() OUString ChartExport::getNumberFormatCode(sal_Int32 nKey) const { + /* XXX if this was called more than one or two times per export the two + * SvNumberFormatter instances and NfKeywordTable should be member + * variables and initialized only once. */ + + OUString aCode("General"); // init with fallback uno::Reference xNumberFormatsSupplier(mxChartModel, uno::UNO_QUERY_THROW); - uno::Reference xNumberFormats = xNumberFormatsSupplier->getNumberFormats(); - uno::Reference xNumberFormat = xNumberFormats->getByKey(nKey); + SvNumberFormatsSupplierObj* pSupplierObj = SvNumberFormatsSupplierObj::getImplementation( xNumberFormatsSupplier); + if (!pSupplierObj) + return aCode; + + SvNumberFormatter* pNumberFormatter = pSupplierObj->GetNumberFormatter(); + if (!pNumberFormatter) + return aCode; - if (!xNumberFormat.is()) - return OUString(); + SvNumberFormatter aTempFormatter( comphelper::getProcessComponentContext(), LANGUAGE_ENGLISH_US); + NfKeywordTable aKeywords; + aTempFormatter.FillKeywordTableForExcel( aKeywords); + aCode = pNumberFormatter->GetFormatStringForExcel( nKey, aKeywords, aTempFormatter); - uno::Any aAny = xNumberFormat->getPropertyValue("FormatString"); - OUString aValue; - aAny >>= aValue; - return aValue; + return aCode; } }// drawingml -- cgit v1.2.3