tdf#79398 Add LCID with DBNum during export to XL
Change-Id: I64a01ef5eb7ada9bc5edbeb873e09fd348d8f6d4
Reviewed-on: https://gerrit.libreoffice.org/28256
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
diff --git a/include/svl/zformat.hxx b/include/svl/zformat.hxx
index ea98b08..b5da86a 100644
--- a/include/svl/zformat.hxx
+++ b/include/svl/zformat.hxx
@@ -184,7 +184,8 @@ public:
// Build a format string of application defined keywords
OUString GetMappedFormatstring( const NfKeywordTable& rKeywords,
const LocaleDataWrapper& rLoc ) const;
const LocaleDataWrapper& rLoc,
LanguageType nOriginalLang = LANGUAGE_DONTKNOW ) const;
void SetStarFormatSupport( bool b ) { bStarFlag = b; }
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 0eaab97..37ac0a3 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -837,7 +837,7 @@ OUString SvNumberFormatter::GetFormatStringForExcel( sal_uInt32 nKey, const NfKe
// before (which doesn't do anything if it was the same locale
// already).
rTempFormatter.ChangeIntl( LANGUAGE_ENGLISH_US);
aFormatStr = pEntry->GetMappedFormatstring( rKeywords, *rTempFormatter.GetLocaleData());
aFormatStr = pEntry->GetMappedFormatstring( rKeywords, *rTempFormatter.GetLocaleData(), nLang );
}
}
}
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index b4c58cc..95e0c09 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -4634,8 +4634,29 @@ static void lcl_SvNumberformat_AddLimitStringImpl( OUString& rStr,
}
}
void lcl_insertLCID( OUStringBuffer& aFormatStr, const OUString& rLCIDString )
{
OUStringBuffer aLCIDString;
if ( !rLCIDString.isEmpty() )
{
aLCIDString = "[$-" + rLCIDString + "]";
}
sal_Int32 nPosDBNum = aFormatStr.lastIndexOf("[DBNum");
if ( nPosDBNum >= 0 )
{
if ( rLCIDString.getLength() > 4 ) // remove DBNumX code if long LCID
aFormatStr.remove( nPosDBNum, 8 );
else
nPosDBNum += 8; // other insert LCID after DBNum
}
else
nPosDBNum = 0;
aFormatStr.insert( nPosDBNum, aLCIDString.toString() );
}
OUString SvNumberformat::GetMappedFormatstring( const NfKeywordTable& rKeywords,
const LocaleDataWrapper& rLocWrp ) const
const LocaleDataWrapper& rLocWrp,
LanguageType nOriginalLang /* =LANGUAGE_DONTKNOW */ ) const
{
OUStringBuffer aStr;
bool bDefault[4];
@@ -4724,12 +4745,17 @@ OUString SvNumberformat::GetMappedFormatstring( const NfKeywordTable& rKeywords,
}
}
const SvNumberNatNum& rNum = NumFor[n].GetNatNum();
if ( rNum.IsComplete() && rNum.GetDBNum() > 0 )
{
aPrefix += "[DBNum";
aPrefix += OUString::number( rNum.GetDBNum() );
aPrefix += "]";
SvNumberNatNum rNum = NumFor[n].GetNatNum();
if (rNum.IsComplete() && (rNum.GetDBNum() > 0 || nOriginalLang != LANGUAGE_DONTKNOW))
{ // GetFormatStringForExcel() may have changed language to en_US
if (rNum.GetLang() == LANGUAGE_ENGLISH_US && nOriginalLang != LANGUAGE_DONTKNOW)
rNum.SetLang( nOriginalLang );
if ( rNum.GetDBNum() > 0 )
{
aPrefix += "[DBNum";
aPrefix += OUString::number( rNum.GetDBNum() );
aPrefix += "]";
}
}
sal_uInt16 nAnz = NumFor[n].GetCount();
@@ -4809,11 +4835,11 @@ OUString SvNumberformat::GetMappedFormatstring( const NfKeywordTable& rKeywords,
MsLangId::getRealLanguage( rNum.GetLang() ) ==
LANGUAGE_THAI )
{
aStr.insert( 0, "[$-D07041E]" ); // date in Thai digit, Buddhist era
lcl_insertLCID( aStr, "D07041E" ); // date in Thai digit, Buddhist era
}
else
{
aStr.insert( 0, "[$-107041E]" ); // date in Arabic digit, Buddhist era
lcl_insertLCID( aStr, "107041E" ); // date in Arabic digit, Buddhist era
}
j = j+2;
bLCIDInserted = true;
@@ -4825,14 +4851,20 @@ OUString SvNumberformat::GetMappedFormatstring( const NfKeywordTable& rKeywords,
}
}
}
// The Thai T NatNum modifier during Xcl export.
if (rNum.IsSet() && rNum.GetNatNum() == 1 &&
rKeywords[NF_KEY_THAI_T] == "T" &&
MsLangId::getRealLanguage( rNum.GetLang()) ==
LANGUAGE_THAI && !bLCIDInserted )
if (rNum.IsSet() && !bLCIDInserted)
{
aStr.insert( 0, "[$-D00041E]" ); // number in Thai digit
// The Thai T NatNum modifier during Xcl export.
if (rNum.GetNatNum() == 1 &&
rKeywords[NF_KEY_THAI_T] == "T" &&
MsLangId::getRealLanguage( rNum.GetLang()) == LANGUAGE_THAI )
{
lcl_insertLCID( aStr, "D00041E" ); // number in Thai digit
}
else if ( rNum.IsComplete() && rNum.GetDBNum() > 0 )
{
lcl_insertLCID( aStr, OUString::number( sal::static_int_cast<sal_Int32>(
MsLangId::getRealLanguage( rNum.GetLang())), 16).toAsciiUpperCase());
}
}
}
for ( ; nSub<4 && bDefault[nSub]; ++nSub )