[Libreoffice-commits] core.git: Branch 'private/bubli/lhm-4-1-6-backports' - sc/source
Katarina Behrens
Katarina.Behrens at cib.de
Wed Oct 28 07:17:59 PDT 2015
sc/source/filter/excel/excdoc.cxx | 12 ++++++++++--
sc/source/ui/unoobj/confuno.cxx | 28 +++++++++++++++++-----------
2 files changed, 27 insertions(+), 13 deletions(-)
New commits:
commit e23e760d2f433b0924c0992002f48b1afcf58292
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date: Wed Oct 28 15:00:51 2015 +0100
tdf#92256: Don't save CONV_UNSPECIFIED string ref syntax value
The following scenario is how it breaks:
1. user has ExcelA1 as her formula syntax setting, CONV_UNSPECIFIED
(that means "same as formula syntax") as her string ref syntax setting
2. she saves the document, it will now contain CONV_UNSPECIFIED value
3. someone else with CalcA1 formula syntax setting opens the document
... since it contains CONV_UNSPECIFIED "same as formula syntax" value,
it will use his CalcA1 formula syntax value to evaluate INDIRECT func
=> #REF!
Avoid this by reading formula syntax/grammar value, mapping it to
matching string ref syntax and saving that instead of CONV_UNSPECIFIED
Change-Id: I3cf08878ed8badc8719ee5be535c8fdbb7ba6d42
diff --git a/sc/source/filter/excel/excdoc.cxx b/sc/source/filter/excel/excdoc.cxx
index 81cd99d..7feb78a 100644
--- a/sc/source/filter/excel/excdoc.cxx
+++ b/sc/source/filter/excel/excdoc.cxx
@@ -823,15 +823,23 @@ void ExcDocument::WriteXml( XclExpXmlStream& rStrm )
pExpChangeTrack->WriteXml( rStrm );
const ScCalcConfig& rCalcConfig = GetDoc().GetCalcConfig();
+ formula::FormulaGrammar::AddressConvention eConv = rCalcConfig.meStringRefAddressSyntax;
+
+ // don't save "unspecified" string ref syntax ... query formula grammar
+ // and save that instead
+ if( eConv == formula::FormulaGrammar::CONV_UNSPECIFIED)
+ {
+ eConv = GetDoc().GetAddressConvention();
+ }
// write if it has been read|imported or explicitly changed
// or if ref syntax isn't what would be native for our file format
// i.e. ExcelA1 in this case
if ( rCalcConfig.mbHasStringRefSyntax ||
- (rCalcConfig.meStringRefAddressSyntax != formula::FormulaGrammar::CONV_XL_A1) )
+ (eConv != formula::FormulaGrammar::CONV_XL_A1) )
{
XclExtLstRef xExtLst( new XclExtLst( GetRoot() ) );
- xExtLst->AddRecord( XclExpExtRef( new XclExpExtCalcPr( GetRoot(), rCalcConfig.meStringRefAddressSyntax )) );
+ xExtLst->AddRecord( XclExpExtRef( new XclExpExtCalcPr( GetRoot(), eConv )) );
xExtLst->SaveXml(rStrm);
}
diff --git a/sc/source/ui/unoobj/confuno.cxx b/sc/source/ui/unoobj/confuno.cxx
index abcbdbc..9a9078f 100644
--- a/sc/source/ui/unoobj/confuno.cxx
+++ b/sc/source/ui/unoobj/confuno.cxx
@@ -459,22 +459,28 @@ uno::Any SAL_CALL ScDocumentConfiguration::getPropertyValue( const OUString& aPr
else if ( aPropertyName.compareToAscii( SC_UNO_SYNTAXSTRINGREF ) == 0 )
{
ScCalcConfig aCalcConfig = pDoc->GetCalcConfig();
+ formula::FormulaGrammar::AddressConvention eConv = aCalcConfig.meStringRefAddressSyntax;
- // write if it has been read|imported or explicitly changed
- // or if ref syntax isn't what would be native for our file format
- // i.e. CalcA1 in this case
- if ( aCalcConfig.mbHasStringRefSyntax ||
- (aCalcConfig.meStringRefAddressSyntax != formula::FormulaGrammar::CONV_OOO) )
- {
- formula::FormulaGrammar::AddressConvention aConv = aCalcConfig.meStringRefAddressSyntax;
+ // don't save "unspecified" string ref syntax ... query formula grammar
+ // and save that instead
+ if( eConv == formula::FormulaGrammar::CONV_UNSPECIFIED)
+ {
+ eConv = pDoc->GetAddressConvention();
+ }
- switch (aConv)
+ // write if it has been read|imported or explicitly changed
+ // or if ref syntax isn't what would be native for our file format
+ // i.e. CalcA1 in this case
+ if ( aCalcConfig.mbHasStringRefSyntax ||
+ (eConv != formula::FormulaGrammar::CONV_OOO) )
+ {
+ switch (eConv)
{
case formula::FormulaGrammar::CONV_OOO:
case formula::FormulaGrammar::CONV_XL_A1:
case formula::FormulaGrammar::CONV_XL_R1C1:
case formula::FormulaGrammar::CONV_A1_XL_A1:
- aRet <<= static_cast<sal_Int16>( aConv );
+ aRet <<= static_cast<sal_Int16>( eConv );
break;
case formula::FormulaGrammar::CONV_UNSPECIFIED:
@@ -485,8 +491,8 @@ uno::Any SAL_CALL ScDocumentConfiguration::getPropertyValue( const OUString& aPr
aRet <<= sal_Int16(9999);
break;
}
- }
- }
+ }
+ }
else
{
More information about the Libreoffice-commits
mailing list