23 #include <osl/diagnose.h>
27 #include <tokenarray.hxx>
38 #include <document.hxx>
50 #include <com/sun/star/sheet/ComplexReference.hpp>
51 #include <com/sun/star/sheet/ExternalReference.hpp>
52 #include <com/sun/star/sheet/FormulaToken.hpp>
53 #include <com/sun/star/sheet/ReferenceFlags.hpp>
54 #include <com/sun/star/sheet/NameToken.hpp>
64 void lcl_SingleRefToCalc(
ScSingleRefData& rRef,
const sheet::SingleReference& rAPI )
68 rRef.
SetColRel( ( rAPI.Flags & sheet::ReferenceFlags::COLUMN_RELATIVE ) != 0 );
69 rRef.
SetRowRel( ( rAPI.Flags & sheet::ReferenceFlags::ROW_RELATIVE ) != 0 );
70 rRef.
SetTabRel( ( rAPI.Flags & sheet::ReferenceFlags::SHEET_RELATIVE ) != 0 );
71 rRef.
SetColDeleted( ( rAPI.Flags & sheet::ReferenceFlags::COLUMN_DELETED ) != 0 );
72 rRef.
SetRowDeleted( ( rAPI.Flags & sheet::ReferenceFlags::ROW_DELETED ) != 0 );
73 rRef.
SetTabDeleted( ( rAPI.Flags & sheet::ReferenceFlags::SHEET_DELETED ) != 0 );
74 rRef.
SetFlag3D( ( rAPI.Flags & sheet::ReferenceFlags::SHEET_3D ) != 0 );
75 rRef.
SetRelName( ( rAPI.Flags & sheet::ReferenceFlags::RELATIVE_NAME ) != 0 );
78 rRef.
SetRelCol(static_cast<SCCOL>(rAPI.RelativeColumn));
80 rRef.
SetAbsCol(static_cast<SCCOL>(rAPI.Column));
83 rRef.
SetRelRow(static_cast<SCROW>(rAPI.RelativeRow));
85 rRef.
SetAbsRow(static_cast<SCROW>(rAPI.Row));
88 rRef.
SetRelTab(static_cast<SCTAB>(rAPI.RelativeSheet));
90 rRef.
SetAbsTab(static_cast<SCTAB>(rAPI.Sheet));
93 void lcl_ExternalRefToCalc(
ScSingleRefData& rRef,
const sheet::SingleReference& rAPI )
97 rRef.
SetColRel( ( rAPI.Flags & sheet::ReferenceFlags::COLUMN_RELATIVE ) != 0 );
98 rRef.
SetRowRel( ( rAPI.Flags & sheet::ReferenceFlags::ROW_RELATIVE ) != 0 );
99 rRef.
SetColDeleted( ( rAPI.Flags & sheet::ReferenceFlags::COLUMN_DELETED ) != 0 );
100 rRef.
SetRowDeleted( ( rAPI.Flags & sheet::ReferenceFlags::ROW_DELETED ) != 0 );
102 rRef.
SetFlag3D( ( rAPI.Flags & sheet::ReferenceFlags::SHEET_3D ) != 0 );
106 rRef.
SetRelCol(static_cast<SCCOL>(rAPI.RelativeColumn));
108 rRef.
SetAbsCol(static_cast<SCCOL>(rAPI.Column));
111 rRef.
SetRelRow(static_cast<SCROW>(rAPI.RelativeRow));
113 rRef.
SetAbsRow(static_cast<SCROW>(rAPI.Row));
119 struct TokenPointerRange
124 TokenPointerRange() : mpStart(nullptr), mpStop(nullptr) {}
126 mpStart(p), mpStop( p + static_cast<size_t>(n)) {}
130 TokenPointerRange maPointerRange[2];
134 bool bSkipRelName =
true ) :
135 mbSkipRelName(bSkipRelName)
137 maPointerRange[0] = TokenPointerRange( pCode, nLen);
138 maPointerRange[1] = TokenPointerRange( pRPN, nRPN);
141 bool skipToken(
size_t i,
const FormulaToken*
const * pp )
151 if ((*pp)->GetRef() > 1)
158 switch ((*pp)->GetType())
161 return (*pp)->GetSingleRef()->IsRelName();
178 if (skipToken( i, pp))
241 sbyte.eInForceArray = ParamClass::Unknown;
250 sharedstring.mpData = pData;
251 sharedstring.mpDataIgnoreCase = pDataIgoreCase;
288 name.nSheet = nSheet;
289 name.nIndex = nIndex;
297 extref.nFileId = nFileId;
299 extref.aRef.Ref2 = rRef;
300 maExternalName = rTabName;
308 extref.nFileId = nFileId;
310 maExternalName = rTabName;
318 extname.nFileId = nFileId;
319 maExternalName = rName;
326 maExternalName = rStr;
334 return aRef.Ref1.Valid(rDoc);
336 return aRef.Valid(rDoc);
348 #define IF_NOT_OPCODE_ERROR(o,c) SAL_WARN_IF((eOp!=o), "sc.core", #c "::ctor: OpCode " << static_cast<int>(eOp) << " lost, converted to " #o "; maybe inherit from FormulaToken instead!")
414 SAL_WARN(
"sc.core",
"unknown ScRawToken::CreateToken() type " <<
int(GetType()));
418 #undef IF_NOT_OPCODE_ERROR
428 && _rToken1.FormulaToken::operator ==(_rToken2));
436 aTemp1.Ref2 = aTemp1.Ref1;
451 ScRange aRange1 = aTemp1.toAbs(rLimits, aPos), aRange2 = aTemp2.
toAbs(rLimits, aPos);
455 return aRange1 == aRange2 && aTemp1.Ref1.FlagValue() == aTemp2.
Ref1.
FlagValue() && aTemp1.Ref2.FlagValue() == aTemp2.
Ref2.
FlagValue();
460 #if DEBUG_FORMULA_COMPILER
465 cout <<
"-- ScSingleRefToken" <<
endl;
469 cout <<
"-- ScDoubleRefToken" << endl;
473 cout <<
"-- FormulaToken" << endl;
474 cout <<
" opcode: " <<
int(rToken.
GetOpCode()) <<
" " <<
476 cout <<
" type: " <<
static_cast<int>(rToken.
GetType()) << endl;
480 cout <<
" value: " << rToken.
GetDouble() << endl;
496 const ScAddress & rPos,
bool bReuseDoubleRef )
541 aRef.
Extend(rLimits, rRef2, rPos);
553 xRes = (bReuseDoubleRef && rTok1.
GetRef() == 1 ? &rTok1 : rTok1.
Clone());
558 xRes = (bReuseDoubleRef && rTok2.
GetRef() == 1 ? &rTok2 : rTok2.
Clone());
567 if (pRefList->empty())
578 for (
size_t i=0; i<2; ++i)
583 rRef.
Extend(rLimits, *pt[i]->GetSingleRef(), rPos);
586 rRef.
Extend(rLimits, *pt[i]->GetDoubleRef(), rPos);
593 for (
const auto& rRefData : *p)
595 rRef.
Extend(rLimits, rRefData, rPos);
603 rRef.
Extend(rLimits, *pt[i]->GetSingleRef(), rPos);
609 rRef.
Extend(rLimits, *pt[i]->GetDoubleRef(), rPos);
652 if (!FormulaToken::operator==( r ) || &aRefList != r.
GetRefList())
747 if (!FormulaToken::operator==(r))
813 if (!FormulaToken::operator==(r))
846 if ( !FormulaToken::operator==(r) )
864 mxAreaRefRPN( r.mxAreaRefRPN ? r.mxAreaRefRPN->
Clone() : nullptr),
886 SAL_WARN(
"sc.core",
"ScTableRefToken::GetSheet - maybe adapt caller to know about TableRef?");
913 if ( !FormulaToken::operator==(r) )
938 , mpJumpMatrix(
std::move(p))
997 xMatrix == static_cast<const ScMatrixCellResultToken &>(r).xMatrix;
1058 OSL_ENSURE( r.
GetType() !=
svMatrix,
"ScMatrixFormulaCellToken::operator=: assigning ScMatrixToken to ScMatrixFormulaCellToken is not proper, use ScMatrixCellResultToken instead");
1092 OSL_FAIL(
"ScMatrixFormulaCellToken::SetUpperLeftDouble: not modifying unhandled token type");
1104 double f,
const svl::SharedString & rStr,
const OUString & rFormula,
bool bEmptyDisplayedAsString ) :
1108 mbEmptyDisplayedAsString( bEmptyDisplayedAsString)
1111 assert( !bEmptyDisplayedAsString || (f == 0.0 && rStr.
getString().isEmpty()));
1131 bool bError = FormulaTokenArray::AddFormulaToken(rToken, rSPool, pExtRef);
1135 const OpCode eOpCode =
static_cast<OpCode>(rToken.OpCode);
1137 const uno::TypeClass eClass = rToken.Data.getValueTypeClass();
1140 case uno::TypeClass_STRUCT:
1142 uno::Type aType = rToken.Data.getValueType();
1146 sheet::SingleReference aApiRef;
1147 rToken.Data >>= aApiRef;
1148 lcl_SingleRefToCalc( aSingleRef, aApiRef );
1159 sheet::ComplexReference aApiRef;
1160 rToken.Data >>= aApiRef;
1161 lcl_SingleRefToCalc( aComplRef.
Ref1, aApiRef.Reference1 );
1162 lcl_SingleRefToCalc( aComplRef.
Ref2, aApiRef.Reference2 );
1171 sheet::NameToken aTokenData;
1172 rToken.Data >>= aTokenData;
1175 SAL_WARN_IF( aTokenData.Sheet < -1 || std::numeric_limits<sal_Int16>::max() < aTokenData.Sheet,
1177 "ScTokenArray::AddFormulaToken - NameToken.Sheet out of limits: " << aTokenData.Sheet);
1178 sal_Int16 nSheet =
static_cast<sal_Int16
>(aTokenData.Sheet);
1190 sheet::ExternalReference aApiExtRef;
1191 if( (eOpCode ==
ocPush) && (rToken.Data >>= aApiExtRef) && (0 <= aApiExtRef.Index) && (aApiExtRef.Index <=
SAL_MAX_UINT16) )
1193 sal_uInt16 nFileId =
static_cast< sal_uInt16
>( aApiExtRef.Index );
1194 sheet::SingleReference aApiSRef;
1195 sheet::ComplexReference aApiCRef;
1197 if( aApiExtRef.Reference >>= aApiSRef )
1200 size_t nCacheId =
static_cast< size_t >( aApiSRef.Sheet );
1202 if( !aTabName.isEmpty() )
1206 lcl_ExternalRefToCalc( aSingleRef, aApiSRef );
1212 else if( aApiExtRef.Reference >>= aApiCRef )
1215 size_t nCacheId =
static_cast< size_t >( aApiCRef.Reference1.Sheet );
1217 if( !aTabName.isEmpty() )
1221 lcl_ExternalRefToCalc( aComplRef.
Ref1, aApiCRef.Reference1 );
1222 lcl_ExternalRefToCalc( aComplRef.
Ref2, aApiCRef.Reference2 );
1225 aComplRef.
Ref1.
Tab() +
static_cast<SCTAB>(aApiCRef.Reference2.Sheet - aApiCRef.Reference1.Sheet));
1231 else if( aApiExtRef.Reference >>= aName )
1233 if( !aName.isEmpty() )
1248 case uno::TypeClass_SEQUENCE:
1253 uno::Sequence< uno::Sequence< uno::Any >>>::
get()))
1274 #if HAVE_CPP_CONSTINIT_SORTED_VECTOR
1310 static const bool bThreadingProhibited = std::getenv(
"SC_NO_THREADED_CALCULATION");
1312 if (bThreadingProhibited)
1320 if (aThreadedCalcDenyList.find(eOp) != aThreadedCalcDenyList.end())
1323 <<
"(" <<
int(eOp) <<
") disables threaded calculation of formula group");
1338 <<
" disables threaded calculation of formula group");
1362 <<
"(" <<
int(eOp) <<
") disables vectorisation for formula group");
1547 <<
"(" <<
int(eOp) <<
") disables vectorisation for formula group");
1601 <<
"(" <<
int(eOp) <<
") disables vectorisation for formula group");
1637 <<
"(" <<
int(eOp) <<
") disables vectorisation for formula group");
1712 nVal += (size_t(rRef.
IsRowRel()) << 1);
1713 nVal += (size_t(rRef.
IsTabRel()) << 2);
1722 static const OUStringHash aHasher;
1728 sal_uInt16
n = std::min<sal_uInt16>(
nLen, 20);
1729 for (sal_uInt16 i = 0; i < n; ++i)
1743 nHash +=
static_cast<size_t>(nVal);
1750 nHash += std::hash<double>()(fVal);
1757 nHash += aHasher(aStr);
1769 size_t nVal1 = HashSingleRef(rRef.
Ref1);
1770 size_t nVal2 = HashSingleRef(rRef.
Ref2);
1777 nHash +=
static_cast<size_t>(eOp);
1782 nHash +=
static_cast<size_t>(eOp);
1784 nHash = (nHash << 4) - nHash;
1817 for (; p != pEnd; ++p)
1819 switch ((*p)->GetType())
1859 mxSheetLimits(&rDoc.GetSheetLimits()),
1867 mxSheetLimits(&rLimits),
1896 for (sal_uInt16 i=0; i<
nLen; i++)
1898 if ( ppToken1[i] != ppToken2[i] &&
1899 !(*ppToken1[i] == *ppToken2[i]) )
1909 FormulaTokenArray::Clear();
1931 pp = p->pCode.get();
1933 for( sal_uInt16 i = 0; i <
nLen; i++, pp++ )
1935 *pp = (*pp)->
Clone();
1943 for( sal_uInt16 i = 0; i <
nRPN; i++, pp++ )
1949 sal_uInt16 nIdx = 0xFFFF;
1950 for( sal_uInt16 j = 0; j <
nLen; j++, p2++ )
1957 if( nIdx == 0xFFFF )
1960 *pp = p->pCode[ nIdx ];
1980 bool bResult = (bPrevWasSep == bNewVal);
1981 bPrevWasSep = bNewVal;
1987 int nCol = -1, nRow = 0;
1988 int i, nPrevRowSep = -1, nStart = 0;
1989 bool bPrevWasSep =
false;
1991 bool bNumeric =
false;
1995 for ( i =
nLen ; i-- > nStart ; )
2060 if( nPrevRowSep < 0 ||
2061 ((nPrevRowSep - i) % 2) == 1)
2068 nCol = (nPrevRowSep - i) / 2;
2070 else if( (nPrevRowSep - i)/2 != nCol)
2101 if( nCol <= 0 || nRow <= 0 )
2106 for ( i = nStart, nCol = 0, nRow = 0 ; i <
nLen ; i++ )
2155 nLen = sal_uInt16( nStart );
2163 sal_uInt16 nIdx =
nLen;
2248 sal_uInt16 nTokens = 1;
2252 if( !rFormulaNmsp.isEmpty() )
2256 Assign( nTokens, aTokens );
2269 nExtend = rPos.
Row();
2275 nExtend = rPos.
Col();
2276 nCol =
static_cast<SCCOL>(nExtend) + 1;
2279 if ( rPos.
Row() <= 0 )
2281 nExtend = rPos.
Row();
2285 if ( rPos.
Col() <= 0 )
2287 nExtend = rPos.
Col();
2288 nCol =
static_cast<SCCOL>(nExtend) - 1;
2291 OSL_FAIL(
"unknown Direction" );
2300 if ( nParamCount &&
nRPN > nParamCount )
2304 for ( ; nParam <
nRPN-1; nParam++ )
2316 if (aAbs.
Row() == nRow && aAbs.
Row() > nExtend)
2318 nExtend = aAbs.
Row();
2323 if (aAbs.
Col() == nCol &&
static_cast<SCCOLROW>(aAbs.
Col()) > nExtend)
2325 nExtend = aAbs.
Col();
2330 if (aAbs.
Row() == nRow && aAbs.
Row() < nExtend)
2332 nExtend = aAbs.
Row();
2337 if (aAbs.
Col() == nCol &&
static_cast<SCCOLROW>(aAbs.
Col()) < nExtend)
2339 nExtend = aAbs.
Col();
2398 void GetExternalTableData(
const ScDocument* pOldDoc,
const ScDocument* pNewDoc,
const SCTAB nTab, OUString& rTabName, sal_uInt16& rFileId)
2400 const OUString& aFileName = pOldDoc->
GetFileURL();
2403 if (rTabName.isEmpty())
2404 pOldDoc->
GetName(nTab, rTabName);
2443 if (bCheckCopyArea && IsInCopyRange(aRange, &rOldDoc))
2469 for ( sal_uInt16 j=0; j<
nLen; ++j )
2471 switch (
pCode[j]->GetType() )
2475 if (SkipReference(
pCode[j], rPos, rOldDoc, bRangeName,
true))
2486 GetExternalTableData(&rOldDoc, &rNewDoc, rRef1.
Tab(), aTabName, nFileId);
2495 if (SkipReference(
pCode[j], rPos, rOldDoc, bRangeName,
true))
2504 GetExternalTableData(&rOldDoc, &rNewDoc, rRef.
Tab(), aTabName, nFileId);
2520 bool bCheckCopyRange)
2523 for (
size_t j=0; j<2; ++j)
2527 for (; pp != pEnd; ++pp)
2537 if (!SkipReference(p, rOldPos, rOldDoc,
false, bCheckCopyRange))
2544 AdjustSingleRefData( rRef1, rOldPos, rNewPos );
2545 AdjustSingleRefData( rRef2, rOldPos, rNewPos );
2550 if (!SkipReference(p, rOldPos, rOldDoc,
false, bCheckCopyRange))
2555 AdjustSingleRefData( rRef, rOldPos, rNewPos );
2570 for (
size_t j=0; j<2; ++j)
2574 for (; pp != pEnd; ++pp)
2618 for (
size_t j=0; j<2; ++j)
2620 FormulaToken*
const * pp = aPtrs.maPointerRange[j].mpStart;
2621 FormulaToken*
const *
const pEnd = aPtrs.maPointerRange[j].mpStop;
2622 for (; pp != pEnd; ++pp)
2638 if (nTab1 <= nTab && nTab <= nTab2)
2647 if (rRef.
Tab() + nPosTab == nTab)
2652 if (rRef.
Tab() == nTab)
2705 return aSelectedRange;
2758 restoreDeletedRef(rRef.
Ref1, rCxt);
2759 restoreDeletedRef(rRef.
Ref2, rCxt);
3054 ScRange aSelectedRange = getSelectedRange(rCxt);
3058 bool bCellShifted = rCxt.
maRange.
In(rOldPos);
3069 for (
size_t j=0; j<2; ++j)
3073 for (; pp != pEnd; ++pp)
3089 setRefDeleted(rRef, rCxt);
3100 restoreDeletedRef(rRef, rCxt);
3124 if (aSelectedRange.
In(aAbs))
3127 setRefDeleted(rRef, rCxt);
3133 const ShrinkResult eSR = shrinkRange(rCxt, aAbs, aSelectedRange, rRef);
3142 else if (eSR == STICKY)
3167 if (aSelectedRange.
In(aCheckRange))
3170 restoreDeletedRef(rRef, rCxt);
3178 if (expandRange(rCxt, aAbs, aSelectedRange, rRef))
3187 if (expandRangeByEdge(rCxt, aAbs, aSelectedRange, rRef))
3250 if ((*pp)->GetType() ==
svIndex)
3252 switch ((*pp)->GetOpCode())
3256 SCTAB nOldTab = (*pp)->GetSheet();
3269 if (isDBDataModified(rCxt.
mrDoc, **pp))
3301 for (
size_t j=0; j<2; ++j)
3305 for (; pp != pEnd; ++pp)
3317 if (aOldRange.
In(aAbs))
3338 if (aOldRange.
In(aAbs))
3380 if ((*pp)->GetType() ==
svIndex)
3382 switch ((*pp)->GetOpCode())
3386 SCTAB nOldTab = (*pp)->GetSheet();
3393 if (isDBDataModified(rCxt.
mrDoc, **pp))
3411 for (; p != pEnd; ++p)
3413 switch ((*p)->GetType())
3421 if (aAbs.
Tab() == nTab && nRow1 <= aAbs.
Row() && aAbs.
Row() <= nRow2)
3425 if (it != rColMap.
end())
3428 SCCOL nNewCol = it->second;
3453 if (it != rColMap.
end())
3456 SCCOL nNewCol = it->second;
3474 for (; p != pEnd; ++p)
3476 switch ((*p)->GetType())
3484 if (aAbs.
Tab() == nTab && nCol1 <= aAbs.
Col() && aAbs.
Col() <= nCol2)
3488 if (it != rRowMap.
end())
3491 SCROW nNewRow = it->second;
3516 if (it != rRowMap.
end())
3519 SCROW nNewRow = it->second;
3535 bool adjustSingleRefInName(
3550 bool bChanged =
false;
3598 bool adjustDoubleRefInName(
3601 bool bRefChanged =
false;
3611 ScRange aSelectedRange = getSelectedRange(rCxt);
3628 ScRange aSelectedRange = getSelectedRange(rCxt);
3651 aCxt.mnRowDelta = 0;
3653 aCxt.mnColDelta = 0;
3654 if (!aCxt.mnColDelta && !aCxt.mnRowDelta && !aCxt.mnTabDelta)
3659 if (adjustSingleRefInName(rRef.
Ref2, aCxt, rPos, &rRef))
3662 if (adjustSingleRefInName(rRef.
Ref1, aCxt, rPos,
nullptr))
3668 if (adjustSingleRefInName(rRef.
Ref2, rCxt, rPos, &rRef))
3671 if (adjustSingleRefInName(rRef.
Ref1, rCxt, rPos,
nullptr))
3693 for (
size_t j=0; j<2; ++j)
3697 for (; pp != pEnd; ++pp)
3729 if (nDelStartRow <= aAbs.
Row() && aAbs.
Row() <= nDelEndRow)
3758 if (nDelStartCol <= aAbs.
Col() && aAbs.
Col() <= nDelEndCol)
3767 if (adjustSingleRefInName(rRef, rCxt, rPos,
nullptr))
3783 if (adjustDoubleRefInName(rRef, rCxt, rPos))
3902 if (adjustDoubleRefInName(rRef, rCxt, rPos))
3907 if (adjustDoubleRefInName(rRef, rCxt, rPos))
3968 for (
size_t j=0; j<2; ++j)
3972 for (; pp != pEnd; ++pp)
3987 if (aOldRange.
In(aAbs))
4006 if (aOldRange.
In(aAbs))
4031 if (nDelPos <= aAbs.
Tab() && aAbs.
Tab() < nDelPos + nSheets)
4037 if (nDelPos < aAbs.
Tab())
4044 else if (rOldPos.
Tab() != rNewPos.
Tab())
4057 if (nInsPos <= aAbs.
Tab())
4064 else if (rOldPos.
Tab() != rNewPos.
Tab())
4080 bool bMoreThanOneTab = aStartPos.
Tab() != aEndPos.
Tab();
4081 bool bModified =
false;
4082 if (bMoreThanOneTab && aStartPos.
Tab() == nDelPos && nDelPos + nSheets <= aEndPos.
Tab())
4092 bModified = adjustSingleRefOnDeletedTab(rLimits, rRef1, nDelPos, nSheets, rOldPos, rNewPos);
4095 if (bMoreThanOneTab && aEndPos.
Tab() == nDelPos && aStartPos.
Tab() <= nDelPos - nSheets)
4105 bModified |= adjustSingleRefOnDeletedTab(rLimits, rRef2, nDelPos, nSheets, rOldPos, rNewPos);
4120 for (
size_t j=0; j<2; ++j)
4124 for (; pp != pEnd; ++pp)
4151 if ((*pp)->GetType() ==
svIndex)
4153 switch ((*pp)->GetOpCode())
4157 SCTAB nOldTab = (*pp)->GetSheet();
4164 (*pp)->SetSheet( nOldTab - rCxt.
mnSheets);
4173 if (isDBDataModified(rCxt.
mrDoc, **pp))
4193 for (
size_t j=0; j<2; ++j)
4197 for (; pp != pEnd; ++pp)
4227 if ((*pp)->GetType() ==
svIndex)
4229 switch ((*pp)->GetOpCode())
4233 SCTAB nOldTab = (*pp)->GetSheet();
4239 (*pp)->SetSheet( nOldTab + rCxt.
mnSheets);
4245 if (isDBDataModified(rCxt.
mrDoc, **pp))
4262 if (nNewTab == rPos.
Tab())
4278 if (adjustTabOnMove(aNewPos, rCxt))
4282 for (
size_t j=0; j<2; ++j)
4286 for (; pp != pEnd; ++pp)
4298 if (adjustTabOnMove(aAbs, rCxt))
4307 if (adjustTabOnMove(aAbs.
aStart, rCxt))
4309 if (adjustTabOnMove(aAbs.
aEnd, rCxt))
4320 if ((*pp)->GetType() ==
svIndex)
4322 switch ((*pp)->GetOpCode())
4326 SCTAB nOldTab = (*pp)->GetSheet();
4330 if (nNewTab != nOldTab)
4333 (*pp)->SetSheet( nNewTab);
4339 if (isDBDataModified(rCxt.
mrDoc, **pp))
4355 for (
size_t j=0; j<2; ++j)
4359 for (; pp != pEnd; ++pp)
4393 for (
size_t j=0; j<2; ++j)
4397 for (; pp != pEnd; ++pp)
4403 bool bAdjust =
false;
4414 bAdjust = (aAbs.
Tab() != rOldPos.
Tab());