[Libreoffice-commits] core.git: sc/source
Markus Mohrhard
markus.mohrhard at googlemail.com
Thu Apr 7 12:07:12 UTC 2016
sc/source/filter/excel/xicontent.cxx | 59 +++++++++++++++++++++--------------
1 file changed, 37 insertions(+), 22 deletions(-)
New commits:
commit e214df32fb3637bd7810a299fb8b38810b1a3874
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu Apr 7 08:20:12 2016 +0200
we need the position in the formula converter, tdf#99093
Change-Id: Ic3dd13aa4d4b8190b78f3e6f1cdda844e39cc719
Reviewed-on: https://gerrit.libreoffice.org/23884
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
diff --git a/sc/source/filter/excel/xicontent.cxx b/sc/source/filter/excel/xicontent.cxx
index edef22d..84c43e0 100644
--- a/sc/source/filter/excel/xicontent.cxx
+++ b/sc/source/filter/excel/xicontent.cxx
@@ -789,34 +789,21 @@ void XclImpValidationManager::ReadDV( XclImpStream& rStrm )
rStrm.SetNulSubstChar( '\n' );
::std::unique_ptr< ScTokenArray > xTokArr1;
- sal_uInt16 nLen = 0;
- nLen = rStrm.ReaduInt16();
+ // We can't import the formula directly because we need the range
+ sal_uInt16 nLenFormula1 = rStrm.ReaduInt16();
rStrm.Ignore( 2 );
- if( nLen > 0 )
- {
- const ScTokenArray* pTokArr = nullptr;
- rFmlaConv.Reset();
- rFmlaConv.Convert( pTokArr, rStrm, nLen, false, FT_CondFormat );
- // formula converter owns pTokArr -> create a copy of the token array
- if( pTokArr )
- xTokArr1.reset( pTokArr->Clone() );
- }
- rStrm.SetNulSubstChar(); // back to default
+ XclImpStreamPos aPosFormula1;
+ rStrm.StorePosition(aPosFormula1);
+ rStrm.Ignore(nLenFormula1);
// second formula
::std::unique_ptr< ScTokenArray > xTokArr2;
- nLen = rStrm.ReaduInt16();
+ sal_uInt16 nLenFormula2 = rStrm.ReaduInt16();
rStrm.Ignore( 2 );
- if( nLen > 0 )
- {
- const ScTokenArray* pTokArr = nullptr;
- rFmlaConv.Reset();
- rFmlaConv.Convert( pTokArr, rStrm, nLen, false, FT_CondFormat );
- // formula converter owns pTokArr -> create a copy of the token array
- if( pTokArr )
- xTokArr2.reset( pTokArr->Clone() );
- }
+ XclImpStreamPos aPosFormula2;
+ rStrm.StorePosition(aPosFormula2);
+ rStrm.Ignore(nLenFormula2);
// read all cell ranges
XclRangeList aXclRanges;
@@ -830,6 +817,34 @@ void XclImpValidationManager::ReadDV( XclImpStream& rStrm )
if ( aScRanges.empty() )
return;
+ ScRange aCombinedRange = aScRanges.Combine();
+
+ XclImpStreamPos aCurrentPos;
+ rStrm.StorePosition(aCurrentPos);
+ rStrm.RestorePosition(aPosFormula1);
+ if( nLenFormula1 > 0 )
+ {
+ const ScTokenArray* pTokArr = nullptr;
+ rFmlaConv.Reset(aCombinedRange.aStart);
+ rFmlaConv.Convert( pTokArr, rStrm, nLenFormula1, false, FT_CondFormat );
+ // formula converter owns pTokArr -> create a copy of the token array
+ if( pTokArr )
+ xTokArr1.reset( pTokArr->Clone() );
+ }
+ rStrm.SetNulSubstChar(); // back to default
+ if (nLenFormula2 > 0)
+ {
+ rStrm.RestorePosition(aPosFormula2);
+ const ScTokenArray* pTokArr = nullptr;
+ rFmlaConv.Reset(aCombinedRange.aStart);
+ rFmlaConv.Convert( pTokArr, rStrm, nLenFormula2, false, FT_CondFormat );
+ // formula converter owns pTokArr -> create a copy of the token array
+ if( pTokArr )
+ xTokArr2.reset( pTokArr->Clone() );
+ }
+
+ rStrm.RestorePosition(aCurrentPos);
+
bool bIsValid = true; // valid settings in flags field
ScValidationMode eValMode = SC_VALID_ANY;
More information about the Libreoffice-commits
mailing list