diff options
author | Eike Rathke <erack@redhat.com> | 2017-07-17 11:36:29 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2017-07-21 06:25:05 +0200 |
commit | 6622ea7365fbf1b425e5f90667dd7e6466fd0293 (patch) | |
tree | 7a787b37e399abd9b8c91fceb7e5ca52c8435e34 | |
parent | 6f75cd76215045837697699e7dfcd7b0a40467f4 (diff) |
Resolves: tdf#75650 reset boolean number format to General for new formula
Change-Id: Iec2feefcbb5a92c64f182d93b4055fc009dbe1e5
(cherry picked from commit 1c1783864a356a4394f80dec28db939f4cf572cd)
Reviewed-on: https://gerrit.libreoffice.org/40052
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
-rw-r--r-- | sc/source/ui/view/viewfunc.cxx | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index ca21a561fed8..90f3b5996a53 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -508,10 +508,11 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, { i = *itr; aPos.SetTab( i ); - sal_uLong nIndex = (sal_uLong) static_cast<const SfxUInt32Item*>( pDoc->GetAttr( - nCol, nRow, i, ATTR_VALUE_FORMAT ))->GetValue(); - if ( pFormatter->GetType( nIndex ) == css::util::NumberFormat::TEXT || - ( ( rString[0] == '+' || rString[0] == '-' ) && nError != FormulaError::NONE && rString == aFormula ) ) + const sal_uInt32 nIndex = static_cast<const SfxUInt32Item*>( pDoc->GetAttr( + nCol, nRow, i, ATTR_VALUE_FORMAT ))->GetValue(); + const sal_Int16 nType = pFormatter->GetType( nIndex); + if (nType == css::util::NumberFormat::TEXT || + ((rString[0] == '+' || rString[0] == '-') && nError != FormulaError::NONE && rString == aFormula)) { if ( pData ) { @@ -531,6 +532,23 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, if(pCell->GetCode()->IsHyperLink()) pCell->GetCode()->SetHyperLink(false); } + if (nType == css::util::NumberFormat::LOGICAL) + { + // Reset to General so the actual format can be determined + // after the cell has been interpreted. A sticky boolean + // number format is highly likely unwanted.. see tdf#75650. + // General of same locale as current number format. + const SvNumberformat* pEntry = pFormatter->GetEntry( nIndex); + const LanguageType nLang = (pEntry ? pEntry->GetLanguage() : ScGlobal::eLnge); + const sal_uInt32 nFormat = pFormatter->GetStandardFormat( css::util::NumberFormat::NUMBER, nLang); + ScPatternAttr aPattern( pDoc->GetPool()); + aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_VALUE_FORMAT, nFormat)); + ScMarkData aMark; + aMark.SelectTable( i, true); + aMark.SetMarkArea( ScRange( ScAddress( nCol, nRow, i))); + rFunc.ApplyAttributes( aMark, aPattern, false); + bNumFmtChanged = true; + } rFunc.SetFormulaCell(aPos, pCell, true); } } |