sc/qa/unit/data/xlsx/empty-noconf.xlsx |binary sc/qa/unit/subsequent_filters-test.cxx | 31 +++++++++++++++++++++++++++++-- sc/source/filter/excel/excdoc.cxx | 7 +++++-- sc/source/filter/oox/workbookhelper.cxx | 22 +++++++--------------- sc/source/ui/unoobj/confuno.cxx | 7 +++++-- 5 files changed, 46 insertions(+), 21 deletions(-)
New commits: commit b0a890e5bda70afa77feb3e89c3d446b00e580a3 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Thu Aug 13 13:45:07 2015 +0200 Some more tdf#92256 related tests Change-Id: I052cceb229f8ab72277c51600994269e4ea52135 Reviewed-on: https://gerrit.libreoffice.org/17704 Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Eike Rathke <er...@redhat.com> diff --git a/sc/qa/unit/data/xlsx/empty-noconf.xlsx b/sc/qa/unit/data/xlsx/empty-noconf.xlsx new file mode 100644 index 0000000..21f80b4 Binary files /dev/null and b/sc/qa/unit/data/xlsx/empty-noconf.xlsx differ diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx index cd909f9..3eb33b0 100644 --- a/sc/qa/unit/subsequent_filters-test.cxx +++ b/sc/qa/unit/subsequent_filters-test.cxx @@ -3109,8 +3109,16 @@ void ScFiltersTest::testRefStringXLSX() double nVal = rDoc.GetValue(2, 2, 0); ASSERT_DOUBLES_EQUAL(3.0, nVal); - const ScCalcConfig& rCalcConfig = rDoc.GetCalcConfig(); - CPPUNIT_ASSERT_EQUAL(formula::FormulaGrammar::CONV_XL_A1, rCalcConfig.meStringRefAddressSyntax); + ScCalcConfig aCalcConfig = rDoc.GetCalcConfig(); + CPPUNIT_ASSERT_EQUAL(formula::FormulaGrammar::CONV_XL_A1, aCalcConfig.meStringRefAddressSyntax); + + //make sure ref syntax gets saved for MSO-produced docs + xDocSh = saveAndReload( &(*xDocSh), XLSX); + CPPUNIT_ASSERT_MESSAGE("Failed to reload doc", xDocSh.Is()); + + ScDocument& rDoc2 = xDocSh->GetDocument(); + aCalcConfig = rDoc2.GetCalcConfig(); + CPPUNIT_ASSERT_EQUAL(formula::FormulaGrammar::CONV_XL_A1, aCalcConfig.meStringRefAddressSyntax); xDocSh->DoClose(); } @@ -3128,7 +3136,26 @@ void ScFiltersTest::testRefStringConfigXLSX() CPPUNIT_ASSERT_EQUAL_MESSAGE("String ref syntax doesn't match", formula::FormulaGrammar::CONV_OOO, aConfig.meStringRefAddressSyntax); + xDocSh = loadDoc("empty-noconf.", XLSX); + CPPUNIT_ASSERT_MESSAGE("Failed to open 2nd doc", xDocSh.Is()); + + //set ref syntax to something else than ExcelA1 (native to xlsx format) ... + ScDocument& rDoc2 = xDocSh->GetDocument(); + aConfig = rDoc2.GetCalcConfig(); + aConfig.meStringRefAddressSyntax = formula::FormulaGrammar::CONV_A1_XL_A1; + rDoc2.SetCalcConfig( aConfig ); + + ScDocShellRef xNewDocSh = saveAndReload( &(*xDocSh), XLSX); + CPPUNIT_ASSERT_MESSAGE("Failed to reload 2nd doc", xNewDocSh.Is()); + + // ... and make sure it got saved + ScDocument& rDoc3 = xNewDocSh->GetDocument(); + aConfig = rDoc3.GetCalcConfig(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("String ref syntax doesn't match", formula::FormulaGrammar::CONV_A1_XL_A1, + aConfig.meStringRefAddressSyntax); + xDocSh->DoClose(); + xNewDocSh->DoClose(); } void ScFiltersTest::testBnc762542() commit 077c8838ace23cfe5c54ae222153dbef815b56b0 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Thu Aug 13 13:13:16 2015 +0200 tdf#92256: Don't force CalcA1 syntax on all !Microsoft xlsx docs in other words, don't override user's configuration of string ref syntax Change-Id: I70281f6869663ccdaabacf506f6effcaf4b5a3fa Reviewed-on: https://gerrit.libreoffice.org/17702 Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Eike Rathke <er...@redhat.com> diff --git a/sc/source/filter/oox/workbookhelper.cxx b/sc/source/filter/oox/workbookhelper.cxx index 5b01085..883a58d 100644 --- a/sc/source/filter/oox/workbookhelper.cxx +++ b/sc/source/filter/oox/workbookhelper.cxx @@ -532,18 +532,6 @@ void WorkbookGlobals::useInternalChartDataTable( bool bInternal ) // private -------------------------------------------------------------------- -namespace { - -formula::FormulaGrammar::AddressConvention getConvention(css::uno::Reference<XDocumentProperties> xDocProps) -{ - if (xDocProps->getGenerator().startsWithIgnoreAsciiCase("Microsoft")) - return formula::FormulaGrammar::CONV_XL_A1; - - return formula::FormulaGrammar::CONV_OOO; -} - -} - void WorkbookGlobals::initialize( bool bWorkbookFile ) { maCellStyles = "CellStyles"; @@ -573,9 +561,13 @@ void WorkbookGlobals::initialize( bool bWorkbookFile ) Reference< XDocumentPropertiesSupplier > xPropSupplier( mxDoc, UNO_QUERY); Reference< XDocumentProperties > xDocProps = xPropSupplier->getDocumentProperties(); - ScCalcConfig aCalcConfig = mpDoc->GetCalcConfig(); - aCalcConfig.SetStringRefSyntax( getConvention(xDocProps) ); - mpDoc->SetCalcConfig(aCalcConfig); + + if (xDocProps->getGenerator().startsWithIgnoreAsciiCase("Microsoft")) + { + ScCalcConfig aCalcConfig = mpDoc->GetCalcConfig(); + aCalcConfig.SetStringRefSyntax( formula::FormulaGrammar::CONV_XL_A1 ) ; + mpDoc->SetCalcConfig(aCalcConfig); + } mxDocImport.reset(new ScDocumentImport(*mpDoc)); commit 2bfeabde75d1e99879465fee6fe6a97357739ae2 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Thu Aug 13 12:22:05 2015 +0200 tdf#92256: Save ref syntax when different from native one that is, CalcA1 for ODF and ExcelA1 for OOXML Change-Id: Ie4df23c5787531677c4533776d489991d413a8d6 Reviewed-on: https://gerrit.libreoffice.org/17701 Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Eike Rathke <er...@redhat.com> diff --git a/sc/source/filter/excel/excdoc.cxx b/sc/source/filter/excel/excdoc.cxx index a591402..98fc175 100644 --- a/sc/source/filter/excel/excdoc.cxx +++ b/sc/source/filter/excel/excdoc.cxx @@ -883,8 +883,11 @@ void ExcDocument::WriteXml( XclExpXmlStream& rStrm ) const ScCalcConfig& rCalcConfig = GetDoc().GetCalcConfig(); - // don't write if it hasn't been read or explicitly changed - if ( rCalcConfig.mbHasStringRefSyntax ) + // 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) ) { XclExtLstRef xExtLst( new XclExtLst( GetRoot() ) ); xExtLst->AddRecord( XclExpExtRef( new XclExpExtCalcPr( GetRoot(), rCalcConfig.meStringRefAddressSyntax )) ); diff --git a/sc/source/ui/unoobj/confuno.cxx b/sc/source/ui/unoobj/confuno.cxx index c695f4f..0ddaaa1 100644 --- a/sc/source/ui/unoobj/confuno.cxx +++ b/sc/source/ui/unoobj/confuno.cxx @@ -462,8 +462,11 @@ uno::Any SAL_CALL ScDocumentConfiguration::getPropertyValue( const OUString& aPr { ScCalcConfig aCalcConfig = rDoc.GetCalcConfig(); - // if it hasn't been read or explicitly changed, don't write it - if ( aCalcConfig.mbHasStringRefSyntax ) + // 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; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits