From eb8bd7f21103ed2349b44c954db977709de2e4ec Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Fri, 17 Nov 2017 00:16:17 +0100 Subject: Resolves: tdf#113889 no date particle reordering when exporting to Excel Change-Id: I45667a67c6c69106d86755ed41438f23e019dfea --- svl/source/numbers/zforlist.cxx | 7 ++++--- svl/source/numbers/zforscan.cxx | 6 +++++- svl/source/numbers/zforscan.hxx | 4 +++- 3 files changed, 12 insertions(+), 5 deletions(-) (limited to 'svl') diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx index 97f846ecc98b..dcca285d9f4b 100644 --- a/svl/source/numbers/zforlist.cxx +++ b/svl/source/numbers/zforlist.cxx @@ -623,14 +623,15 @@ bool SvNumberFormatter::PutandConvertEntry(OUString& rString, short& nType, sal_uInt32& nKey, LanguageType eLnge, - LanguageType eNewLnge) + LanguageType eNewLnge, + bool bForExcelExport ) { bool bRes; if (eNewLnge == LANGUAGE_DONTKNOW) { eNewLnge = IniLnge; } - pFormatScanner->SetConvertMode(eLnge, eNewLnge); + pFormatScanner->SetConvertMode(eLnge, eNewLnge, false, bForExcelExport); bRes = PutEntry(rString, nCheckPos, nType, nKey, eLnge); pFormatScanner->SetConvertMode(false); return bRes; @@ -808,7 +809,7 @@ OUString SvNumberFormatter::GetFormatStringForExcel( sal_uInt32 nKey, const NfKe short nType = css::util::NumberFormat::DEFINED; sal_uInt32 nTempKey; OUString aTemp( pEntry->GetFormatstring()); - rTempFormatter.PutandConvertEntry( aTemp, nCheckPos, nType, nTempKey, nLang, LANGUAGE_ENGLISH_US); + rTempFormatter.PutandConvertEntry( aTemp, nCheckPos, nType, nTempKey, nLang, LANGUAGE_ENGLISH_US, true); SAL_WARN_IF( nCheckPos != 0, "svl.numbers", "SvNumberFormatter::GetFormatStringForExcel - format code not convertible"); if (nTempKey != NUMBERFORMAT_ENTRY_NOT_FOUND) diff --git a/svl/source/numbers/zforscan.cxx b/svl/source/numbers/zforscan.cxx index f845b5f2ed5d..a48063f7df24 100644 --- a/svl/source/numbers/zforscan.cxx +++ b/svl/source/numbers/zforscan.cxx @@ -115,6 +115,7 @@ ImpSvNumberformatScan::ImpSvNumberformatScan( SvNumberFormatter* pFormatterP ) pFormatter = pFormatterP; xNFC = css::i18n::NumberFormatMapper::create( pFormatter->GetComponentContext() ); bConvertMode = false; + mbConvertForExcelExport = false; bConvertSystemToSystem = false; sKeyword[NF_KEY_E] = sEnglishKeyword[NF_KEY_E]; // Exponent @@ -1725,7 +1726,10 @@ sal_Int32 ImpSvNumberformatScan::FinalScan( OUString& rString ) pLoc = pFormatter->GetLocaleData(); //! init new keywords InitKeywords(); - bNewDateOrder = (eOldDateOrder != pLoc->getDateOrder()); + // Adapt date order to target locale, but Excel does not handle date + // particle re-ordering for the target locale when loading documents, + // though it does exchange separators, tdf#113889 + bNewDateOrder = (!mbConvertForExcelExport && eOldDateOrder != pLoc->getDateOrder()); } const CharClass* pChrCls = pFormatter->GetCharClass(); diff --git a/svl/source/numbers/zforscan.hxx b/svl/source/numbers/zforscan.hxx index fe08984e5c77..54c59323836f 100644 --- a/svl/source/numbers/zforscan.hxx +++ b/svl/source/numbers/zforscan.hxx @@ -136,12 +136,13 @@ public: } void SetConvertMode(LanguageType eTmpLge, LanguageType eNewLge, - bool bSystemToSystem = false ) + bool bSystemToSystem = false, bool bForExcelExport = false) { bConvertMode = true; eNewLnge = eNewLge; eTmpLnge = eTmpLge; bConvertSystemToSystem = bSystemToSystem; + mbConvertForExcelExport = bForExcelExport; } // Only changes the bool variable, in order to temporarily pause the convert mode void SetConvertMode(bool bMode) { bConvertMode = bMode; } @@ -197,6 +198,7 @@ private: // Private section static const OUString sErrStr; // String for error output bool bConvertMode; // Set in the convert mode + bool mbConvertForExcelExport; // Set in the convert mode whether to convert for Excel export LanguageType eNewLnge; // Language/country which the scanned string is converted to (for Excel filter) LanguageType eTmpLnge; // Language/country which the scanned string is converted from (for Excel filter) -- cgit