20 #include <com/sun/star/script/vba/XVBAEventProcessor.hpp>
21 #include <com/sun/star/sheet/TableValidationVisibility.hpp>
30 #include <osl/thread.hxx>
31 #include <document.hxx>
72 #include <LibreOfficeKit/LibreOfficeKitEnums.h>
74 #include <config_fuzzers.h>
81 void sortAndRemoveDuplicates(std::vector<ScTypedStrData>& rStrings,
bool bCaseSens)
86 std::vector<ScTypedStrData>::iterator it =
88 rStrings.erase(it, rStrings.end());
93 std::vector<ScTypedStrData>::iterator it =
95 rStrings.erase(it, rStrings.end());
104 for (
SCTAB i = 0; i < static_cast<SCTAB>(maTabs.size()); ++
i)
111 if (!p || p->
empty())
115 aNames.emplace(i, p);
122 for (
const auto& [rName, rxRangeName] : rRangeMap)
135 bool bFound = GetTable(rName, nTab);
138 SetRangeName( nTab,
nullptr );
140 SetRangeName( nTab, std::unique_ptr<ScRangeName>(
new ScRangeName( *pName )) );
147 for (
SCTAB i = 0; i < static_cast<SCTAB>(maTabs.size()); ++
i)
155 SetRangeName(i, std::unique_ptr<ScRangeName>(p));
157 OUString aTableName = maTabs[i]->GetName();
158 aRangeNameMap.insert(std::pair<OUString, ScRangeName*>(aTableName,p));
169 if (!
ValidTab(nTab) || nTab >= static_cast<SCTAB>(maTabs.size()) || !maTabs[nTab])
172 return maTabs[nTab]->GetRangeName();
179 return pRangeName.get();
184 if (!
ValidTab(nTab) || nTab >= static_cast<SCTAB>(maTabs.size()) || !maTabs[nTab])
187 return maTabs[nTab]->SetRangeName(std::move(pNew));
192 pRangeName = std::move(pNewRangeName);
201 pRangeNames= GetRangeName();
203 pRangeNames= GetRangeName(rAddress.
Tab());
205 for (
const auto& rEntry : *pRangeNames)
207 if (rEntry.second->IsValidReference(aNameRange))
209 if (aNameRange.
In(rAddress))
224 return pGlobalNames->
insert(pName);
234 return pLocalNames->
insert(pName);
256 pData = pRangeName->findByRange( rBlock );
265 const ScRangeName* pRN = (nTab < 0 ? GetRangeName() : GetRangeName(nTab));
266 return (pRN ? pRN->
findByIndex( nIndex) :
nullptr);
271 if (pDBCollection && bRemoveAutoFilter)
277 for (
const auto& rxNamedDB : rNamedDBs)
279 const ScDBData& rOldData = *rxNamedDB;
287 if (pNewDBCollection)
308 RepaintRange( aOldRange );
313 pDBCollection = std::move(pNewDBCollection);
319 return pDBCollection->GetDBAtCursor(nCol, nRow, nTab, ePortion);
327 return pDBCollection->GetDBAtCursor(nCol, nRow, nTab, ePortion);
335 return pDBCollection->GetDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2);
343 return pDBCollection->GetDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2);
351 pDBCollection->RefreshDirtyTableColumnNames();
356 return pDPCollection && pDPCollection->GetCount();
363 return pDPCollection.get();
368 return pDPCollection.get();
376 sal_uInt16
nCount = pDPCollection->GetCount();
378 for (sal_uInt16
i=0;
i<nCount;
i++)
379 if ( (*pDPCollection)[
i].GetOutRange().
In( aPos ) )
380 return &(*pDPCollection)[
i];
392 sal_uInt16
i = pDPCollection->GetCount();
394 if ( (*pDPCollection)[i].GetOutRange().
In( rBlock ) )
395 return &(*pDPCollection)[i];
402 if (apTemporaryChartLock)
403 apTemporaryChartLock->StopLocking();
407 std::unique_ptr<ScChartListenerCollection> pNewChartListenerCollection,
408 bool bSetChartRangeLists )
410 std::unique_ptr<ScChartListenerCollection> pOld = std::move(pChartListenerCollection);
411 pChartListenerCollection = std::move(pNewChartListenerCollection);
412 if ( pChartListenerCollection )
415 pChartListenerCollection->SetDiffDirty( *pOld, bSetChartRangeLists );
416 pChartListenerCollection->StartAllListeners();
422 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
423 maTabs[nTab]->SetScenario(bFlag);
428 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] &&maTabs[nTab]->IsScenario();
434 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsScenario())
436 maTabs[nTab]->SetScenarioComment( rComment );
437 maTabs[nTab]->SetScenarioColor( rColor );
438 maTabs[nTab]->SetScenarioFlags( nFlags );
444 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
445 return maTabs[nTab]->GetTabBgColor();
451 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
452 maTabs[nTab]->SetTabBgColor(rColor);
457 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
458 return maTabs[nTab]->GetTabBgColor() ==
COL_AUTO;
465 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsScenario())
467 maTabs[nTab]->GetScenarioComment( rComment );
468 rColor = maTabs[nTab]->GetScenarioColor();
469 rFlags = maTabs[nTab]->GetScenarioFlags();
475 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsScenario())
476 rFlags = maTabs[nTab]->GetScenarioFlags();
481 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsLinked();
500 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
501 return maTabs[nTab]->GetLinkMode();
507 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
508 return maTabs[nTab]->GetLinkDoc();
514 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
515 return maTabs[nTab]->GetLinkFlt();
521 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
522 return maTabs[nTab]->GetLinkOpt();
528 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
529 return maTabs[nTab]->GetLinkTab();
535 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
536 return maTabs[nTab]->GetLinkRefreshDelay();
541 const OUString& rFilter,
const OUString& rOptions,
542 const OUString& rTabName,
sal_uLong nRefreshDelay )
544 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
545 maTabs[nTab]->SetLink( nMode, rDoc, rFilter, rOptions, rTabName, nRefreshDelay );
549 std::u16string_view rFilter, std::u16string_view rOptions )
const
553 if (maTabs[
i]->IsLinked()
554 && maTabs[
i]->GetLinkDoc() == rDoc
555 && maTabs[
i]->GetLinkFlt() == rFilter
556 && maTabs[
i]->GetLinkOpt() == rOptions)
563 const OUString& aFileName,
const OUString& aTabName )
567 OSL_FAIL(
"LinkExternalTab in Clipboard" );
574 OUString aFilterName;
576 sal_uInt32 nLinkCnt = pExtDocOptions ? pExtDocOptions->GetDocSettings().mnLinkCnt : 0;
584 if ( pSrcDoc->
GetTable( aTabName, nSrcTab ) )
588 OSL_FAIL(
"can't insert external document table");
591 rTab = GetTableCount() - 1;
593 TransferTab( *pSrcDoc, nSrcTab, rTab,
false,
true );
600 bool bWasThere = HasLink( aFileName, aFilterName, aOptions );
601 SetLink( rTab,
ScLinkMode::VALUE, aFileName, aFilterName, aOptions, aTabName, nRefreshDelay );
606 OUString aFilName = aFilterName;
620 if (!pExternalRefMgr)
623 return pExternalRefMgr.get();
628 return pExternalRefMgr && pExternalRefMgr->isInReferenceMarking();
633 if (!pExternalRefMgr)
635 if (!pExternalRefMgr->hasExternalData())
638 pExternalRefMgr->markUsedByLinkListeners();
640 pExternalRefMgr->markUsedExternalRefCells();
648 if (!mxFormulaParserPool)
650 return *mxFormulaParserPool;
655 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
656 return maTabs[nTab]->GetSheetEvents();
662 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
663 maTabs[nTab]->SetSheetEvents( std::move(pNew) );
668 if (nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
671 const ScSheetEvents* pEvents = maTabs[nTab]->GetSheetEvents();
672 if ( pEvents && pEvents->
GetScript( nEvent ) )
675 if (bWithVbaEvents && mxVbaEvents.is())
try
677 uno::Sequence< uno::Any > aArgs( 1 );
683 catch( uno::Exception& )
692 SCTAB nSize =
static_cast<SCTAB>(maTabs.size());
693 for (
SCTAB nTab = 0; nTab < nSize; nTab++)
694 if (HasSheetEventScript( nTab, nEvent, bWithVbaEvents ))
701 SCTAB nSize =
static_cast<SCTAB>(maTabs.size());
702 for (
SCTAB nTab = 0; nTab < nSize; nTab++)
703 if (maTabs[nTab] && maTabs[nTab]->GetCalcNotification())
710 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
711 return maTabs[nTab]->GetCalcNotification();
718 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && !maTabs[nTab]->GetCalcNotification())
719 maTabs[nTab]->SetCalcNotification(
true);
724 SCTAB nSize =
static_cast<SCTAB>(maTabs.size());
725 for (
SCTAB nTab = 0; nTab < nSize; nTab++)
726 if (maTabs[nTab] && maTabs[nTab]->GetCalcNotification())
727 maTabs[nTab]->SetCalcNotification(
false);
734 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()))
737 pVal = maTabs[nTab]->GetOutlineTable();
738 if (!pVal && bCreate)
740 maTabs[nTab]->StartOutlineTable();
741 pVal = maTabs[nTab]->GetOutlineTable();
750 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->SetOutlineTable(pNewOutline);
756 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
757 maTabs[nTab]->DoAutoOutline( nStartCol, nStartRow, nEndCol, nEndRow );
762 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->TestRemoveSubTotals( rParam );
767 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
768 maTabs[nTab]->RemoveSubTotals( rParam );
773 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->DoSubTotals( rParam );
779 for (
bool bHas = aIter.
first(); bHas; bHas = aIter.
next())
797 for (
SCTAB nTab=0; nTab<nCount; nTab++)
798 if (maTabs[nTab] && pPosDoc->
maTabs[nTab] && pDestDoc->
maTabs[nTab])
799 maTabs[nTab]->CopyUpdated( pPosDoc->
maTabs[nTab].get(), pDestDoc->
maTabs[nTab].get() );
804 if (!(
ValidTab(nSrcTab) &&
ValidTab(nDestTab) && nSrcTab < static_cast<SCTAB>(maTabs.size())
805 && nDestTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nSrcTab] && maTabs[nDestTab]))
810 ScRangeList aRanges = *maTabs[nSrcTab]->GetScenarioRanges();
813 for (
SCTAB nTab = nDestTab+1;
814 nTab< static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsScenario();
817 if ( maTabs[nTab]->IsActiveScenario() )
819 bool bTouched =
false;
820 for (
size_t nR=0, nRangeCount = aRanges.
size(); nR < nRangeCount && !bTouched; nR++ )
822 const ScRange& rRange = aRanges[ nR ];
823 if ( maTabs[nTab]->HasScenarioRange( rRange ) )
828 maTabs[nTab]->SetActiveScenario(
false);
830 maTabs[nTab]->CopyScenarioFrom( maTabs[nDestTab].
get() );
835 maTabs[nSrcTab]->SetActiveScenario(
true);
839 maTabs[nSrcTab]->CopyScenarioTo( maTabs[nDestTab].
get() );
842 SetAllFormulasDirty(aCxt);
852 if (
ValidTab(nSrcTab) && nSrcTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nSrcTab])
853 maTabs[nSrcTab]->MarkScenarioIn( rDestMark, nNeededBits );
860 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->HasScenarioRange( rRange );
865 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
866 return maTabs[nTab]->GetScenarioRanges();
873 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsActiveScenario( );
878 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
879 maTabs[nTab]->SetActiveScenario( bActive );
884 if (
ValidTab(nSrcTab) && nSrcTab < static_cast<SCTAB>(maTabs.size())
885 && nDestTab < static_cast<SCTAB>(maTabs.size())&&
ValidTab(nDestTab))
886 return maTabs[nSrcTab]->TestCopyScenarioTo( maTabs[nDestTab].
get() );
888 OSL_FAIL(
"wrong table at TestCopyScenario");
894 if (!pUnoBroadcaster)
906 if ( bInUnoBroadcast )
925 OSL_FAIL(
"RemoveUnoObject called from BroadcastUno" );
930 while ( bInUnoBroadcast )
932 osl::Thread::yield();
939 OSL_FAIL(
"No Uno broadcaster");
945 if (!pUnoBroadcaster)
948 bInUnoBroadcast =
true;
949 pUnoBroadcaster->Broadcast( rHint );
950 bInUnoBroadcast =
false;
956 if ( pUnoListenerCalls &&
957 rHint.
GetId() == SfxHintId::DataChanged &&
958 !bInUnoListenerCall )
965 bInUnoListenerCall =
true;
966 pUnoListenerCalls->ExecuteAndClear();
967 bInUnoListenerCall =
false;
972 const lang::EventObject& rEvent )
974 OSL_ENSURE( bInUnoBroadcast,
"AddUnoListenerCall is supposed to be called from BroadcastUno only" );
976 if ( !pUnoListenerCalls )
978 pUnoListenerCalls->Add( rListener, rEvent );
983 OSL_ENSURE( !pUnoRefUndoList,
"BeginUnoRefUndo twice" );
989 return std::move(pUnoRefUndoList);
995 if ( pUnoRefUndoList )
996 pUnoRefUndoList->Add( nId, rOldRanges );
1009 std::unique_ptr<sc::ExpandRefsSwitch> pExpandRefsSwitch;
1013 size_t nFirstTab, nLastTab;
1031 xColNameRanges->UpdateReference( eUpdateRefMode,
this, aRange, nDx, nDy, nDz );
1032 xRowNameRanges->UpdateReference( eUpdateRefMode,
this, aRange, nDx, nDy, nDz );
1033 pDBCollection->UpdateReference( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz );
1035 pRangeName->UpdateReference(rCxt);
1036 if ( pDPCollection )
1037 pDPCollection->UpdateReference( eUpdateRefMode, aRange, nDx, nDy, nDz );
1038 UpdateChartRef( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz );
1039 UpdateRefAreaLinks( eUpdateRefMode, aRange, nDx, nDy, nDz );
1040 if ( pValidationList )
1043 pValidationList->UpdateReference(rCxt);
1046 pDetOpList->UpdateReference(
this, eUpdateRefMode, aRange, nDx, nDy, nDz );
1047 if ( pUnoBroadcaster )
1049 eUpdateRefMode, aRange, nDx, nDy, nDz ) );
1052 nLastTab = maTabs.size()-1;
1055 for (
size_t i = nFirstTab,
n = maTabs.size() ;
i <= nLastTab &&
i <
n; ++
i)
1060 maTabs[i]->UpdateReference(rCxt, pUndoDoc, bIncludeDraw, bUpdateNoteCaptionPos);
1071 theCol1 = aEmbedRange.aStart.Col();
1072 theRow1 = aEmbedRange.aStart.Row();
1073 theTab1 = aEmbedRange.aStart.Tab();
1074 theCol2 = aEmbedRange.aEnd.Col();
1075 theRow2 = aEmbedRange.aEnd.Row();
1076 theTab2 = aEmbedRange.aEnd.Tab();
1088 nDx,nDy,nDz, theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 ) )
1090 aEmbedRange =
ScRange( theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 );
1106 OSL_ENSURE(pClipDoc->
bIsClip,
"UpdateTranspose: No Clip");
1115 for (
SCTAB nDestTab=0; nDestTab< static_cast<SCTAB>(maTabs.size()) && maTabs[nDestTab]; nDestTab++)
1118 while (!pClipDoc->
maTabs[nClipTab]) nClipTab = (nClipTab+1) % (
MAXTAB+1);
1121 aDest.
SetTab( nDestTab );
1125 pRangeName->UpdateTranspose( aSource, aDest );
1126 for (
SCTAB i=0; i< static_cast<SCTAB>(maTabs.size());
i++)
1128 maTabs[i]->UpdateTranspose( aSource, aDest, pUndoDoc );
1130 nClipTab = (nClipTab+1) % (
MAXTAB+1);
1141 pRangeName->UpdateGrow( rArea, nGrowX, nGrowY );
1143 for (
SCTAB i=0; i< static_cast<SCTAB>(maTabs.size()) && maTabs[
i];
i++)
1144 maTabs[
i]->UpdateGrow( rArea, nGrowX, nGrowY );
1149 double nStepValue,
double nMaxValue)
1155 SCTAB nMax = maTabs.size();
1156 for (
const auto& rTab : rMark)
1162 maTabs[rTab]->Fill(nCol1, nRow1, nCol2, nRow2,
1163 nFillCount, eFillDir, eFillCmd, eFillDateCmd,
1164 nStepValue, nMaxValue, pProgress);
1173 if (nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
1174 return maTabs[nTab]->GetAutoFillPreview( rSource, nEndX, nEndY );
1180 sal_uInt16 nFormatNo,
const ScMarkData& rMark )
1184 SCTAB nMax = maTabs.size();
1185 for (
const auto& rTab : rMark)
1190 maTabs[rTab]->AutoFormat( nStartCol, nStartRow, nEndCol, nEndRow, nFormatNo );
1197 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()))
1203 maTabs[nTab]->GetAutoFormatData(nStartCol, nStartRow, nEndCol, nEndRow, rData);
1212 bool bReplace = ( nCommand == SvxSearchCmd::REPLACE ||
1213 nCommand == SvxSearchCmd::REPLACE_ALL );
1223 else if ( bReplace )
1241 else if ( bReplace )
1262 else if ( bReplace )
1280 else if ( bReplace )
1300 bool bFound =
false;
1301 if (rTab >= static_cast<SCTAB>(maTabs.size()))
1302 OSL_FAIL(
"table out of range");
1309 if ( nCommand == SvxSearchCmd::FIND_ALL ||
1310 nCommand == SvxSearchCmd::REPLACE_ALL )
1312 SCTAB nMax = maTabs.size();
1313 for (
const auto& rMarkedTab : rMark)
1315 if (rMarkedTab >= nMax)
1317 if (maTabs[rMarkedTab])
1321 bFound |= maTabs[rMarkedTab]->SearchAndReplace(
1322 rSearchItem, nCol, nRow, rMark, rMatchedRanges, rUndoStr, pUndoDoc);
1334 for (nTab = rTab; (nTab >= 0) && !bFound; nTab--)
1339 bFound = maTabs[nTab]->SearchAndReplace(
1340 rSearchItem, nCol, nRow, rMark, rMatchedRanges, rUndoStr, pUndoDoc);
1350 rSearchItem, nCol, nRow );
1355 OString aPayload = OString::number(nTab);
1357 pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_SET_PART, aPayload.getStr());
1365 for (nTab = rTab; (nTab < static_cast<SCTAB>(maTabs.size())) && !bFound; nTab++)
1370 bFound = maTabs[nTab]->SearchAndReplace(
1371 rSearchItem, nCol, nRow, rMark, rMatchedRanges, rUndoStr, pUndoDoc);
1381 rSearchItem, nCol, nRow );
1386 OString aPayload = OString::number(nTab);
1388 pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_SET_PART, aPayload.getStr());
1404 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1405 return maTabs[nTab]->UpdateOutlineCol( nStartCol, nEndCol, bShow );
1407 OSL_FAIL(
"missing tab");
1413 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1414 return maTabs[nTab]->UpdateOutlineRow( nStartRow, nEndRow, bShow );
1416 OSL_FAIL(
"missing tab");
1421 SCTAB nTab,
const ScSortParam& rSortParam,
bool bKeepQuery,
bool bUpdateRefs,
1424 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1426 bool bOldEnableIdle = IsIdleEnabled();
1428 maTabs[nTab]->Sort(rSortParam, bKeepQuery, bUpdateRefs, pProgress, pUndo);
1429 EnableIdle(bOldEnableIdle);
1439 bool bOldEnableIdle = IsIdleEnabled();
1442 EnableIdle(bOldEnableIdle);
1447 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1448 return maTabs[nTab]->Query(rQueryParam, bKeepSub);
1450 OSL_FAIL(
"missing tab");
1456 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1457 maTabs[nTab]->GetUpperCellString( nCol, nRow, rStr );
1467 OSL_FAIL(
"missing tab");
1478 bool bHasAutoFilter = (pDBData !=
nullptr);
1490 nRow = aParam.
nRow1;
1492 for ( nCol=aParam.
nCol1; nCol<=aParam.
nCol2 && bHasAutoFilter; nCol++ )
1497 bHasAutoFilter =
false;
1501 bHasAutoFilter =
false;
1504 return bHasAutoFilter;
1510 return ValidTab(nTab) && maTabs[nTab] && maTabs[nTab]->HasColHeader( nStartCol, nStartRow, nEndCol, nEndRow );
1516 return ValidTab(nTab) && maTabs[nTab] && maTabs[nTab]->HasRowHeader( nStartCol, nStartRow, nEndCol, nEndRow );
1523 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1537 if ( !(
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && pDBCollection) )
1550 pDBData->
GetArea( nAreaTab, nStartCol, nStartRow, nEndCol, nEndRow );
1559 bool bFilter =
true;
1573 maTabs[nTab]->GetFilteredFilterEntries( nCol, nStartRow, nEndRow, aParam, rFilterEntries );
1577 maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rFilterEntries );
1590 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1592 maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rFilterEntries );
1593 sortAndRemoveDuplicates( rFilterEntries.
maStrData, bCaseSens);
1602 std::vector<ScTypedStrData>& rStrings,
bool bLimit )
1609 sal_uInt32 nValidation = GetAttr( nCol, nRow, nTab,
ATTR_VALIDDATA )->GetValue();
1615 if (pData->
GetListType() == css::sheet::TableValidationVisibility::SORTEDASCENDING)
1616 sortAndRemoveDuplicates(rStrings,
true);
1623 if (!
ValidTab(nTab) || nTab >=
static_cast<SCTAB>(maTabs.size()))
1629 std::set<ScTypedStrData> aStrings;
1630 if (maTabs[nTab]->GetDataEntries(nCol, nRow, aStrings, bLimit))
1632 rStrings.insert(rStrings.end(), aStrings.begin(), aStrings.end());
1633 sortAndRemoveDuplicates(rStrings,
true);
1646 for (
const auto& rEntry : *pRangeName)
1651 if ( pDBCollection )
1654 for (
const auto& rxDB : rDBs)
1660 pLists[0] = GetColNameRanges();
1661 pLists[1] = GetRowNameRanges();
1667 for (
size_t i = 0, nPairs = pList->size();
i < nPairs; ++
i )
1672 for (
bool bHas = aIter.
first(); bHas; bHas = aIter.
next())
1686 rRange = aEmbedRange;
1693 if ( aEmbedRange.aStart.Tab() <
static_cast<SCTAB>(maTabs.size()) )
1694 pTable = maTabs[aEmbedRange.aStart.Tab()].get();
1696 OSL_FAIL(
"table out of range");
1699 OSL_FAIL(
"GetEmbeddedRect without a table");
1705 for (i=0; i<aEmbedRange.aStart.Col(); i++)
1709 for (i=aEmbedRange.aStart.Col(); i<=aEmbedRange.aEnd.Col(); i++)
1725 aEmbedRange = rRange;
1730 bIsEmbedded =
false;
1741 bool bAdded =
false;
1743 while (rTwips < nStopTwips && nRow <= nEndRow && !bStop)
1745 SCROW nHeightEndRow;
1746 sal_uInt16 nHeight = pTable->
GetRowHeight( nRow,
nullptr, &nHeightEndRow, bHiddenAsZero );
1747 if (nHeightEndRow > nEndRow)
1748 nHeightEndRow = nEndRow;
1750 nRow = nHeightEndRow + 1;
1753 SCROW nRows = nHeightEndRow - nRow + 1;
1754 sal_Int64 nAdd =
static_cast<sal_Int64
>(nHeight) * nRows;
1755 if (nAdd + rTwips >= nStopTwips)
1757 sal_Int64 nDiff = nAdd + rTwips - nStopTwips;
1758 nRows -=
static_cast<SCROW>(nDiff / nHeight);
1759 nAdd =
static_cast<sal_Int64
>(nHeight) * nRows;
1761 if (nAdd + rTwips >= nStopTwips)
1784 if (nTab < static_cast<SCTAB>(maTabs.size()))
1785 pTable = maTabs[nTab].get();
1787 OSL_FAIL(
"table out of range");
1790 OSL_FAIL(
"GetRange without a table");
1795 if ( IsNegativePage( nTab ) )
1811 if (nSize+nAdd <= nTwips+1 && nX1<MaxCol())
1829 if (nSize+nAdd < nTwips && nX2<MaxCol())
1844 if (
lcl_AddTwipsWhile( nSize, nTwips+2, nY1, MaxRow(), pTable, bHiddenAsZero) && nY1 < MaxRow())
1852 if (
lcl_AddTwipsWhile( nSize, nTwips, nY2, MaxRow(), pTable, bHiddenAsZero) && nY2 < MaxRow())
1856 return ScRange( nX1,nY1,nTab, nX2,nY2,nTab );
1862 aEmbedRange = GetRange( nTab, rRect );
1867 return pDocProtection.get();
1875 pDocProtection.reset();
1880 return pDocProtection && pDocProtection->isProtected();
1886 return !IsDocProtected() && ( bImportingXML || mbChangeReadOnlyEnabled || !mpShell || !mpShell->IsReadOnly() );
1891 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
1892 return maTabs[nTab]->IsProtected();
1894 OSL_FAIL(
"Wrong table number");
1900 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
1901 return maTabs[nTab]->GetProtection();
1908 if (!
ValidTab(nTab) || nTab >= static_cast<SCTAB>(maTabs.size()))
1911 maTabs[nTab]->SetProtection(pProtect);
1916 if (!
ValidTab(nTabSrc) || nTabSrc >= static_cast<SCTAB>(maTabs.size()) || nTabDest >= static_cast<SCTAB>(maTabs.size()) || !
ValidTab(nTabDest))
1919 maTabs[nTabDest]->SetProtection( maTabs[nTabSrc]->GetProtection() );
1924 assert(pDocOptions &&
"No DocOptions! :-(");
1925 return *pDocOptions;
1930 assert(pDocOptions &&
"No DocOptions! :-(");
1932 *pDocOptions = rOpt;
1933 mxPoolHelper->SetFormTableOpt(rOpt);
1938 assert(pViewOptions &&
"No ViewOptions! :-(");
1939 return *pViewOptions;
1944 assert(pViewOptions &&
"No ViewOptions! :-(");
1945 *pViewOptions = rOpt;
1951 rCjk = eCjkLanguage;
1952 rCtl = eCtlLanguage;
1958 eCjkLanguage = eCjk;
1959 eCtlLanguage = eCtl;
1960 if ( mxPoolHelper.is() )
1968 UpdateDrawLanguages();
1973 if (!
ValidTab(nTab) || nTab >= static_cast<SCTAB>(maTabs.size()) || !maTabs[nTab])
1975 OSL_FAIL(
"GetMMRect: wrong table");
1982 for (i=0; i<nStartCol; i++)
1983 aRect.
AdjustLeft(GetColWidth(i,nTab, bHiddenAsZero ) );
1984 aRect.
AdjustTop(GetRowHeight( 0, nStartRow-1, nTab, bHiddenAsZero ) );
1989 for (i=nStartCol; i<=nEndCol; i++)
1990 aRect.
AdjustRight(GetColWidth(i,nTab, bHiddenAsZero) );
1991 aRect.
AdjustBottom(GetRowHeight( nStartRow, nEndRow, nTab, bHiddenAsZero ) );
1998 if ( IsNegativePage( nTab ) )
2006 pExtDocOptions = std::move(pNewOptions);
2011 mpClipOptions = std::move(pClipOptions);
2017 OUStringBuffer aTotal;
2021 for (nRow=nStartRow; nRow<=nEndRow; nRow++)
2022 for (nCol=nStartCol; nCol<=nEndCol; nCol++)
2025 if (!aCellStr.isEmpty())
2027 if (!aTotal.isEmpty())
2029 aTotal.append(aCellStr);
2031 if (nCol != nStartCol || nRow != nStartRow)
2035 SetString(nStartCol,nStartRow,nTab,aTotal.makeStringAndClear());
2043 for (nRow=nStartRow; nRow<=nEndRow; nRow++)
2044 for (nCol=nStartCol; nCol<=nEndCol; nCol++)
2046 if (nCol != nStartCol || nRow != nStartRow)
2052 SCCOL nEndCol,
SCROW nEndRow,
bool bDeleteCaptions )
2054 ScTable* pTab = FetchTable(nTab);
2062 if( nStartCol < nEndCol )
2063 DeleteAreaTab( nStartCol + 1, nStartRow, nEndCol, nStartRow, nTab, nDelFlag );
2064 if( nStartRow < nEndRow )
2065 DeleteAreaTab( nStartCol, nStartRow + 1, nEndCol, nEndRow, nTab, nDelFlag );
2081 ApplyAttr( nCol, nRow, nTab, *pDefAttr );
2087 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
2088 maTabs[nTab]->ExtendPrintArea( pDev, nStartCol, nStartRow, rEndCol, nEndRow );
2093 if(
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
2094 return maTabs[nTab]->GetPatternCount( nCol );
2101 if(
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
2102 return maTabs[nTab]->GetPatternCount( nCol, nRow1, nRow2 );
2109 if(
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
2110 maTabs[nTab]->ReservePatternCount( nCol, nReserve );
2115 rParam = mSheetSortParams[ nTab ];
2120 mSheetSortParams[ nTab ] = rParam;
2125 return maTabs[nTab]->ClampToAllocatedColumns(nCol);
2130 return maTabs[nTab]->GetAllocatedColumnsCount();
SC_DLLPUBLIC void UpdateTranspose(const ScAddress &rDestPos, ScDocument *pClipDoc, const ScMarkData &rMark, ScDocument *pUndoDoc)
SC_DLLPUBLIC bool IsDocProtected() const
SC_DLLPUBLIC OUString GetLinkDoc(SCTAB nTab) const
void SetMergedCells(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2)
OUString GetLinkOpt(SCTAB nTab) const
void RemoveMerge(SCCOL nCol, SCROW nRow, SCTAB nTab)
SC_DLLPUBLIC ScDPObject * GetDPAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab) const
SCCOL GetColMerge() const
SCROW mnRowDelta
Amount and direction of movement in the row direction.
Temporarily switch on/off auto calculation mode.
bool insert(std::unique_ptr< ScDBData > p)
Takes ownership of p and attempts to insert it into the collection.
bool HasAutoFilter() const
SC_DLLPUBLIC bool HasColHeader(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab)
static ScRefUpdateRes Update(const ScDocument *pDoc, UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, SCCOL nDx, SCROW nDy, SCTAB nDz, SCCOL &theCol1, SCROW &theRow1, SCTAB &theTab1, SCCOL &theCol2, SCROW &theRow2, SCTAB &theTab2)
bool HasLink(std::u16string_view rDoc, std::u16string_view rFilter, std::u16string_view rOptions) const
OUString getString() const
bool HasScenarioRange(SCTAB nTab, const ScRange &rRange) const
SC_DLLPUBLIC void SetScenario(SCTAB nTab, bool bFlag)
SC_DLLPUBLIC bool IsTabProtected(SCTAB nTab) const
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
bool FillSelectionList(std::vector< ScTypedStrData > &rStrings, const ScAddress &rPos) const
Tries to fill the passed collection with list validation entries.
void GetFilterSelCount(SCSIZE &nSelected, SCSIZE &nTotal)
ScUnoListenerCalls stores notifications to XModifyListener that can't be processed during BroadcastUn...
Sheet / outlining (grouping) information.
SC_DLLPUBLIC ScRangeName * GetRangeName() const
bool UpdateOutlineCol(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool bShow)
Adapt Outline.
SCSIZE Query(SCTAB nTab, const ScQueryParam &rQueryParam, bool bKeepSub)
constexpr TypedWhichId< SvxLanguageItem > ATTR_CJK_FONT_LANGUAGE(115)
SC_DLLPUBLIC void SetTabProtection(SCTAB nTab, const ScTableProtection *pProtect)
SC_DLLPUBLIC void DoMergeContents(SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow)
void SetSheetEvents(SCTAB nTab, std::unique_ptr< ScSheetEvents > pNew)
std::unique_ptr< ContentProperties > pData
void ReservePatternCount(SCTAB nTab, SCCOL nCol, SCSIZE nReserve)
SC_DLLPUBLIC bool IsActiveScenario(SCTAB nTab) const
sheet protection state container
SC_DLLPUBLIC void SetTabBgColor(SCTAB nTab, const Color &rColor)
bool IsAddressInRangeName(RangeNameScope eScope, const ScAddress &rAddress)
void CopyScenario(SCTAB nSrcTab, SCTAB nDestTab, bool bNewScenario=false)
constexpr TypedWhichId< SvxLanguageItem > ATTR_FONT_LANGUAGE(110)
Context for reference update during shifting, moving or copying of cell ranges.
SC_DLLPUBLIC ScDPCollection * GetDPCollection()
List of RefUpdate changes made to UNO objects during ScUpdateRefHint broadcast.
SC_DLLPUBLIC const ScDBData * GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const
void SC_DLLPUBLIC SetSortParam(const ScSortParam &rParam, SCTAB nTab)
void GetEmbedded(ScRange &rRange) const
bool InsertNewRangeName(const OUString &rName, const ScAddress &rPos, const OUString &rExpr)
Insert a new named expression to the global scope.
SC_DLLPUBLIC bool CreateQueryParam(const ScRange &rRange, ScQueryParam &rQueryParam)
SC_DLLPUBLIC ScRange GetRange(SCTAB nTab, const tools::Rectangle &rMMRect, bool bHiddenAsZero=true) const
void Invalidate(sal_uInt16 nId)
void SetClipOptions(std::unique_ptr< ScClipOptions > pClipOptions)
bool IsLinked(SCTAB nTab) const
SCSIZE GetPatternCount(SCTAB nTab, SCCOL nCol) const
bool DoSubTotals(SCTAB nTab, ScSubTotalParam &rParam)
SC_DLLPUBLIC void Fill(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScProgress *pProgress, const ScMarkData &rMark, sal_uLong nFillCount, FillDir eFillDir=FILL_TO_BOTTOM, FillCmd eFillCmd=FILL_LINEAR, FillDateCmd eFillDateCmd=FILL_DAY, double nStepValue=1.0, double nMaxValue=1E307)
SC_DLLPUBLIC formula::FormulaGrammar::AddressConvention GetAddressConvention() const
ScFormulaCell * getFormulaCell()
bool HasAutoFilter(SCCOL nCol, SCROW nRow, SCTAB nTab)
::std::map< SCTAB, const ScRangeName * > TabNameCopyMap
Map that stores non-managed pointers to ScRangeName instances.
void ExtendDataArea(const ScDocument &rDoc)
static sal_Int32 GetVbaDocumentEventId(ScSheetEventId nEvent)
constexpr TypedWhichId< ScMergeAttr > ATTR_MERGE(144)
void AddUnoRefChange(sal_Int64 nId, const ScRangeList &rOldRanges)
void SetString(SwCursor &rCursor, const OUString &rString)
bool HasAnySheetEventScript(ScSheetEventId nEvent, bool bWithVbaEvents=false) const
void Sort(SCTAB nTab, const ScSortParam &rSortParam, bool bKeepQuery, bool bUpdateRefs, ScProgress *pProgress, sc::ReorderParam *pUndo)
Sort a range of data.
void GetMarkArea(ScRange &rRange) const
OUString GetString(int nId)
constexpr::Color COL_AUTO(0xFF, 0xFF, 0xFF, 0xFF)
SC_DLLPUBLIC void SetGrammar(formula::FormulaGrammar::Grammar eGram)
SC_DLLPUBLIC bool LinkExternalTab(SCTAB &nTab, const OUString &aDocTab, const OUString &aFileName, const OUString &aTabName)
void DoAutoOutline(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab)
void Reorder(const sc::ReorderParam &rParam)
ScClipParam & GetClipParam()
void UpdateReference(sc::RefUpdateContext &rCxt, ScDocument *pUndoDoc=nullptr, bool bIncludeDraw=true, bool bUpdateNoteCaptionPos=true)
ScRange maSortRange
This sort range already takes into account the presence or absence of header row / column i...
size_t SCSIZE
size_t typedef to be able to find places where code was changed from USHORT to size_t and is used to ...
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
SC_DLLPUBLIC void CopyUpdated(ScDocument *pPosDoc, ScDocument *pDestDoc)
From this document this method copies the cells of positions at which there are also cells in pPosDoc...
void SetAreaTab(SCTAB nTab)
SC_DLLPUBLIC SCSIZE GetEntryCount() const
static SfxViewShell * Current()
void SetChartListenerCollection(std::unique_ptr< ScChartListenerCollection >, bool bSetChartRangeLists)
bool ValidRange(const ScRange &rRange, SCCOL nMaxCol=MAXCOL, SCROW nMaxRow=MAXROW)
SC_DLLPUBLIC bool GetTable(const OUString &rName, SCTAB &rTab) const
SC_DLLPUBLIC ScExternalRefManager * GetExternalRefManager() const
SC_DLLPUBLIC const ScQueryEntry & GetEntry(SCSIZE n) const
Walk through all cells in an area.
tools::Rectangle GetEmbeddedRect() const
static sal_Int32 GetVbaSheetEventId(ScSheetEventId nEvent)
bool HasSheetEventScript(SCTAB nTab, ScSheetEventId nEvent, bool bWithVbaEvents=false) const
void CopyTabProtection(SCTAB nTabSrc, SCTAB nTabDest)
bool SetOutlineTable(SCTAB nTab, const ScOutlineTable *pNewOutline)
void GetName(OUString &rName) const
void MarkUsedExternalReferences()
static ScDocument * GetClipDoc()
void GetFilterEntries(SCCOL nCol, SCROW nRow, SCTAB nTab, ScFilterEntries &rFilterEntries)
Get a list of unique strings to use in filtering criteria.
SC_DLLPUBLIC void SetAllRangeNames(const std::map< OUString, std::unique_ptr< ScRangeName >> &rRangeMap)
SC_DLLPUBLIC SCCOL GetAllocatedColumnsCount(SCTAB nTab) const
void PutInOrder(T &nStart, T &nEnd)
All current charts in the calc will be locked in constructor and unlocked in destructor.
SC_DLLPUBLIC bool HasRowHeader(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab)
SC_DLLPUBLIC const ScDocOptions & GetDocOptions() const
bool HasCalcNotification(SCTAB nTab) const
A pretty assertion that checks that the relevant bits in the are not set on the document at entry an...
constexpr TypedWhichId< SfxUInt32Item > ATTR_VALIDDATA(153)
ScDBDataPortion
Enum used to indicate which portion of the DBArea is to be considered.
SC_DLLPUBLIC ScDocProtection * GetDocProtection() const
bool HasAnyCalcNotification() const
SC_DLLPUBLIC void SetScenarioData(SCTAB nTab, const OUString &rComment, const Color &rColor, ScScenarioFlags nFlags)
ScDocument * GetDocument()
std::unique_ptr< ScUnoRefList > EndUnoRefUndo()
void GetScenarioFlags(SCTAB nTab, ScScenarioFlags &rFlags) const
SC_DLLPUBLIC const ScRangeData * findByRange(const ScRange &rRange) const
void Reorder(const sc::ReorderParam &rParam)
void SetDBCollection(std::unique_ptr< ScDBCollection > pNewDBCollection, bool bRemoveAutoFilter=false)
const SCTAB SC_TAB_APPEND
SC_DLLPUBLIC bool HasPivotTable() const
#define STR_GLOBAL_RANGE_NAME
SC_DLLPUBLIC const ScRangeList * GetScenarioRanges(SCTAB nTab) const
SC_DLLPUBLIC bool IsDefaultTabBgColor(SCTAB nTab) const
SC_DLLPUBLIC void GetRangeNameMap(std::map< OUString, ScRangeName * > &rRangeName)
SvxSearchCmd GetCommand() const
UpdateRefMode meMode
update mode - insert/delete, copy, or move.
SC_DLLPUBLIC void SetActiveScenario(SCTAB nTab, bool bActive)
void GetFormulaEntries(ScTypedCaseStrSet &rStrings)
Entries for Formula auto input.
sal_uInt16 GetColWidth(SCCOL nCol, bool bHiddenAsZero=true) const
void GetAutoFormatData(SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, ScAutoFormatData &rData)
void ExtendPrintArea(OutputDevice *pDev, SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL &rEndCol, SCROW nEndRow) const
Find the maximum column position that contains printable data for the specified row range...
SC_DLLPUBLIC void SetViewOptions(const ScViewOptions &rOpt)
ScFormulaParserPool & GetFormulaParserPool() const
Returns the pool containing external formula parsers.
OUString GetAutoFillPreview(const ScRange &rSource, SCCOL nEndX, SCROW nEndY)
SC_DLLPUBLIC SCCOL ClampToAllocatedColumns(SCTAB nTab, SCCOL nCol) const
const ScRange & GetRange(sal_uInt16 n) const
void MarkScenario(SCTAB nSrcTab, SCTAB nDestTab, ScMarkData &rDestMark, bool bResetMark=true, ScScenarioFlags nNeededBits=ScScenarioFlags::NONE) const
ScDPObject * GetDPAtBlock(const ScRange &rBlock) const
void SetLink(SCTAB nTab, ScLinkMode nMode, const OUString &rDoc, const OUString &rFilter, const OUString &rOptions, const OUString &rTabName, sal_uLong nRefreshDelay)
void BroadcastUno(const SfxHint &rHint)
OUString GetLinkFlt(SCTAB nTab) const
bool IsInExternalReferenceMarking() const
SC_DLLPUBLIC tools::Rectangle GetMMRect(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, bool bHiddenAsZero=true) const
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
SC_DLLPUBLIC ScRangeData * findByIndex(sal_uInt16 i) const
bool In(const ScAddress &) const
is Address& in Range?
std::set< ScTypedStrData, ScTypedStrData::LessCaseSensitive > ScTypedCaseStrSet
void GetSearchAndReplaceStart(const SvxSearchItem &rSearchItem, SCCOL &rCol, SCROW &rRow)
SC_DLLPUBLIC void DoMerge(SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, bool bDeleteCaptions=true)
void GetArea(SCTAB &rTab, SCCOL &rCol1, SCROW &rRow1, SCCOL &rCol2, SCROW &rRow2) const
ScRange maRange
Range of cells that are about to be moved for insert/delete/move modes.
void GetDataEntries(SCCOL nCol, SCROW nRow, SCTAB nTab, std::vector< ScTypedStrData > &rStrings, bool bLimit=false)
Entries for selection list listbox (no numbers/formulas)
SC_DLLPUBLIC void GetFilterEntriesArea(SCCOL nCol, SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bCaseSens, ScFilterEntries &rFilterEntries)
Entries for Filter dialog.
void SetCalcNotification(SCTAB nTab)
SC_DLLPUBLIC const ScViewOptions & GetViewOptions() const
void RemoveSubTotals(SCTAB nTab, ScSubTotalParam &rParam)
void AddUnoObject(SfxListener &rObject)
const OUString * GetScript(ScSheetEventId nEvent) const
void GetUpperCellString(SCCOL nCol, SCROW nRow, SCTAB nTab, OUString &rStr)
SC_DLLPUBLIC void DoEmptyBlock(SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow)
SC_DLLPUBLIC ScLkUpdMode GetLinkMode() const
SC_DLLPUBLIC void GetScenarioData(SCTAB nTab, OUString &rComment, Color &rColor, ScScenarioFlags &rFlags) const
constexpr TypedWhichId< SvxLanguageItem > ATTR_CTL_FONT_LANGUAGE(120)
bool GetRowDirection() const
Stores global named database ranges.
SC_DLLPUBLIC Color GetTabBgColor(SCTAB nTab) const
constexpr TypedWhichId< ScMergeFlagAttr > ATTR_MERGE_FLAG(145)
void GetFilterSelCount(SCCOL nCol, SCROW nRow, SCTAB nTab, SCSIZE &nSelected, SCSIZE &nTotal)
void SetEmbedded(const ScRange &rRange)
void StopTemporaryChartLock()
bool CreateQueryParam(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScQueryParam &rQueryParam)
SC_DLLPUBLIC void SetDocOptions(const ScDocOptions &rOpt)
void SC_DLLPUBLIC GetSortParam(ScSortParam &rParam, SCTAB nTab)
SC_DLLPUBLIC bool IsScenario(SCTAB nTab) const
void AutoFormat(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, sal_uInt16 nFormatNo, const ScMarkData &rMark)
const OUString & GetUpperName() const
static bool lcl_AddTwipsWhile(tools::Long &rTwips, tools::Long nStopTwips, SCROW &rPosY, SCROW nEndRow, const ScTable *pTable, bool bHiddenAsZero)
Similar to ScViewData::AddPixelsWhile(), but add height twips and only while result is less than nSto...
SCTAB mnTabDelta
Amount and direction of movement in the sheet direction.
void SetInCreate(bool bSet)
sal_uLong GetLinkRefreshDelay(SCTAB nTab) const
bool IsDocEditable() const
void UpdateGrow(const ScRange &rArea, SCCOL nGrowX, SCROW nGrowY)
const ScSheetEvents * GetSheetEvents(SCTAB nTab) const
static void MirrorRectRTL(tools::Rectangle &rRect)
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
SC_DLLPUBLIC ScOutlineTable * GetOutlineTable(SCTAB nTab, bool bCreate=false)
void RemoveUnoObject(SfxListener &rObject)
bool UpdateOutlineRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bShow)
void SetLanguage(LanguageType eLatin, LanguageType eCjk, LanguageType eCtl)
SC_DLLPUBLIC OUString GetLinkTab(SCTAB nTab) const
sal_Int16 GetListType() const
SC_DLLPUBLIC void GetQueryParam(ScQueryParam &rQueryParam) const
bool TestRemoveSubTotals(SCTAB nTab, const ScSubTotalParam &rParam)
void SetRangeName(SCTAB nTab, std::unique_ptr< ScRangeName > pNew)
void ResetCalcNotifications()
bool SearchAndReplace(const SvxSearchItem &rSearchItem, SCCOL &rCol, SCROW &rRow, SCTAB &rTab, const ScMarkData &rMark, ScRangeList &rMatchedRanges, OUString &rUndoStr, ScDocument *pUndoDoc=nullptr)
void AddUnoListenerCall(const css::uno::Reference< css::util::XModifyListener > &rListener, const css::lang::EventObject &rEvent)
SC_DLLPUBLIC void SetDocProtection(const ScDocProtection *pProtect)
SCROW GetRowMerge() const
bool HasSubTotalCells(const ScRange &rRange)
SC_DLLPUBLIC void SetExtDocOptions(std::unique_ptr< ScExtDocOptions > pNewOptions)
bool GetTableSelect(SCTAB nTab) const
bool TestCopyScenario(SCTAB nSrcTab, SCTAB nDestTab) const
const ScDBData * GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, ScDBDataPortion ePortion) const
std::vector< ScTypedStrData > maStrData
SC_DLLPUBLIC void GetLanguage(LanguageType &rLatin, LanguageType &rCjk, LanguageType &rCtl) const
This struct stores general clipboard parameters associated with a ScDocument instance created in clip...
ScRangeData * FindRangeNameBySheetAndIndex(SCTAB nTab, sal_uInt16 nIndex) const
Find a named expression / range name in either global or a local scope.
SCCOL mnColDelta
Amount and direction of movement in the column direction.
sal_uInt16 GetRowHeight(SCROW nRow, SCROW *pStartRow, SCROW *pEndRow, bool bHiddenAsZero=true) const
SC_DLLPUBLIC void GetAllTabRangeNames(ScRangeName::TabNameCopyMap &rRangeNames) const
Get all range names that are local to each table.
void RefreshDirtyTableColumnNames()
bool ValidTab(SCTAB nTab)
SC_DLLPUBLIC bool insert(ScRangeData *p, bool bReuseFreeIndex=true)
Insert object into set.
Each instance of this struct represents a single filtering criteria.
Strings (and string results if InsertDeleteFlags::FORMULA is not set).
void SetPoolDefaultItem(const SfxPoolItem &)
SC_DLLPUBLIC const ScRangeData * GetRangeAtBlock(const ScRange &rBlock, OUString *pName) const
SC_DLLPUBLIC const ScTableProtection * GetTabProtection(SCTAB nTab) const
std::unique_ptr< ScExternalRefManager > pExternalRefMgr