20 #include <com/sun/star/script/vba/XVBAEventProcessor.hpp>
21 #include <com/sun/star/sheet/TableValidationVisibility.hpp>
30 #include <osl/thread.hxx>
31 #include <osl/diagnose.h>
32 #include <document.hxx>
73 #include <LibreOfficeKit/LibreOfficeKitEnums.h>
75 #include <config_fuzzers.h>
82 void sortAndRemoveDuplicates(std::vector<ScTypedStrData>& rStrings,
bool bCaseSens)
87 std::vector<ScTypedStrData>::iterator it =
89 rStrings.erase(it, rStrings.end());
94 std::vector<ScTypedStrData>::iterator it =
96 rStrings.erase(it, rStrings.end());
105 for (
SCTAB i = 0; i < static_cast<SCTAB>(maTabs.size()); ++
i)
112 if (!p || p->
empty())
116 aNames.emplace(i, p);
123 for (
const auto& [rName, rxRangeName] : rRangeMap)
136 bool bFound = GetTable(rName, nTab);
139 SetRangeName( nTab,
nullptr );
141 SetRangeName( nTab, std::unique_ptr<ScRangeName>(
new ScRangeName( *pName )) );
148 for (
SCTAB i = 0; i < static_cast<SCTAB>(maTabs.size()); ++
i)
156 SetRangeName(i, std::unique_ptr<ScRangeName>(p));
158 OUString aTableName = maTabs[i]->GetName();
159 aRangeNameMap.insert(std::pair<OUString, ScRangeName*>(aTableName,p));
170 if (!
ValidTab(nTab) || nTab >= static_cast<SCTAB>(maTabs.size()) || !maTabs[nTab])
173 return maTabs[nTab]->GetRangeName();
180 return pRangeName.get();
185 if (!
ValidTab(nTab) || nTab >= static_cast<SCTAB>(maTabs.size()) || !maTabs[nTab])
188 return maTabs[nTab]->SetRangeName(std::move(pNew));
193 pRangeName = std::move(pNewRangeName);
202 pRangeNames= GetRangeName();
204 pRangeNames= GetRangeName(rAddress.
Tab());
206 for (
const auto& rEntry : *pRangeNames)
208 if (rEntry.second->IsValidReference(aNameRange))
210 if (aNameRange.
In(rAddress))
225 return pGlobalNames->
insert(pName);
235 return pLocalNames->
insert(pName);
258 pData = pRangeName->findByRange( rBlock );
263 *pSheetLocal =
false;
271 const ScRangeName* pRN = (nTab < 0 ? GetRangeName() : GetRangeName(nTab));
272 return (pRN ? pRN->
findByIndex( nIndex) :
nullptr);
277 if (pDBCollection && bRemoveAutoFilter)
283 for (
const auto& rxNamedDB : rNamedDBs)
285 const ScDBData& rOldData = *rxNamedDB;
293 if (pNewDBCollection)
314 RepaintRange( aOldRange );
319 pDBCollection = std::move(pNewDBCollection);
325 return pDBCollection->GetDBAtCursor(nCol, nRow, nTab, ePortion);
333 return pDBCollection->GetDBAtCursor(nCol, nRow, nTab, ePortion);
341 return pDBCollection->GetDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2);
349 return pDBCollection->GetDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2);
357 pDBCollection->RefreshDirtyTableColumnNames();
362 return pDPCollection && pDPCollection->GetCount();
369 return pDPCollection.get();
374 return pDPCollection.get();
382 sal_uInt16
nCount = pDPCollection->GetCount();
384 for (sal_uInt16
i=0;
i<nCount;
i++)
385 if ( (*pDPCollection)[
i].GetOutRange().
In( aPos ) )
386 return &(*pDPCollection)[
i];
398 sal_uInt16
i = pDPCollection->GetCount();
400 if ( (*pDPCollection)[i].GetOutRange().
In( rBlock ) )
401 return &(*pDPCollection)[i];
408 if (apTemporaryChartLock)
409 apTemporaryChartLock->StopLocking();
413 std::unique_ptr<ScChartListenerCollection> pNewChartListenerCollection,
414 bool bSetChartRangeLists )
416 std::unique_ptr<ScChartListenerCollection> pOld = std::move(pChartListenerCollection);
417 pChartListenerCollection = std::move(pNewChartListenerCollection);
418 if ( pChartListenerCollection )
421 pChartListenerCollection->SetDiffDirty( *pOld, bSetChartRangeLists );
422 pChartListenerCollection->StartAllListeners();
428 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
429 maTabs[nTab]->SetScenario(bFlag);
434 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] &&maTabs[nTab]->IsScenario();
440 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsScenario())
442 maTabs[nTab]->SetScenarioComment( rComment );
443 maTabs[nTab]->SetScenarioColor( rColor );
444 maTabs[nTab]->SetScenarioFlags( nFlags );
450 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
451 return maTabs[nTab]->GetTabBgColor();
457 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
458 maTabs[nTab]->SetTabBgColor(rColor);
463 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
464 return maTabs[nTab]->GetTabBgColor() ==
COL_AUTO;
471 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsScenario())
473 maTabs[nTab]->GetScenarioComment( rComment );
474 rColor = maTabs[nTab]->GetScenarioColor();
475 rFlags = maTabs[nTab]->GetScenarioFlags();
481 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsScenario())
482 rFlags = maTabs[nTab]->GetScenarioFlags();
487 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsLinked();
506 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
507 return maTabs[nTab]->GetLinkMode();
513 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
514 return maTabs[nTab]->GetLinkDoc();
520 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
521 return maTabs[nTab]->GetLinkFlt();
527 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
528 return maTabs[nTab]->GetLinkOpt();
534 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
535 return maTabs[nTab]->GetLinkTab();
541 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
542 return maTabs[nTab]->GetLinkRefreshDelay();
547 const OUString& rFilter,
const OUString& rOptions,
548 const OUString& rTabName,
sal_uLong nRefreshDelay )
550 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
551 maTabs[nTab]->SetLink( nMode, rDoc, rFilter, rOptions, rTabName, nRefreshDelay );
555 std::u16string_view rFilter, std::u16string_view rOptions )
const
559 if (maTabs[
i]->IsLinked()
560 && maTabs[
i]->GetLinkDoc() == rDoc
561 && maTabs[
i]->GetLinkFlt() == rFilter
562 && maTabs[
i]->GetLinkOpt() == rOptions)
569 const OUString& aFileName,
const OUString& aTabName )
573 OSL_FAIL(
"LinkExternalTab in Clipboard" );
580 OUString aFilterName;
582 sal_uInt32 nLinkCnt = pExtDocOptions ? pExtDocOptions->GetDocSettings().mnLinkCnt : 0;
590 if ( pSrcDoc->
GetTable( aTabName, nSrcTab ) )
594 OSL_FAIL(
"can't insert external document table");
597 rTab = GetTableCount() - 1;
599 TransferTab( *pSrcDoc, nSrcTab, rTab,
false,
true );
606 bool bWasThere = HasLink( aFileName, aFilterName, aOptions );
607 SetLink( rTab,
ScLinkMode::VALUE, aFileName, aFilterName, aOptions, aTabName, nRefreshDelay );
612 OUString aFilName = aFilterName;
626 if (!pExternalRefMgr)
629 return pExternalRefMgr.get();
634 return pExternalRefMgr && pExternalRefMgr->isInReferenceMarking();
639 if (!pExternalRefMgr)
641 if (!pExternalRefMgr->hasExternalData())
644 pExternalRefMgr->markUsedByLinkListeners();
646 pExternalRefMgr->markUsedExternalRefCells();
654 if (!mxFormulaParserPool)
656 return *mxFormulaParserPool;
661 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
662 return maTabs[nTab]->GetSheetEvents();
668 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
669 maTabs[nTab]->SetSheetEvents( std::move(pNew) );
674 if (nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
677 const ScSheetEvents* pEvents = maTabs[nTab]->GetSheetEvents();
678 if ( pEvents && pEvents->
GetScript( nEvent ) )
681 if (bWithVbaEvents && mxVbaEvents.is())
try
683 uno::Sequence< uno::Any > aArgs( 1 );
689 catch( uno::Exception& )
698 SCTAB nSize =
static_cast<SCTAB>(maTabs.size());
699 for (
SCTAB nTab = 0; nTab < nSize; nTab++)
700 if (HasSheetEventScript( nTab, nEvent, bWithVbaEvents ))
707 SCTAB nSize =
static_cast<SCTAB>(maTabs.size());
708 for (
SCTAB nTab = 0; nTab < nSize; nTab++)
709 if (maTabs[nTab] && maTabs[nTab]->GetCalcNotification())
716 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
717 return maTabs[nTab]->GetCalcNotification();
724 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && !maTabs[nTab]->GetCalcNotification())
725 maTabs[nTab]->SetCalcNotification(
true);
730 SCTAB nSize =
static_cast<SCTAB>(maTabs.size());
731 for (
SCTAB nTab = 0; nTab < nSize; nTab++)
732 if (maTabs[nTab] && maTabs[nTab]->GetCalcNotification())
733 maTabs[nTab]->SetCalcNotification(
false);
740 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()))
743 pVal = maTabs[nTab]->GetOutlineTable();
744 if (!pVal && bCreate)
746 maTabs[nTab]->StartOutlineTable();
747 pVal = maTabs[nTab]->GetOutlineTable();
756 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->SetOutlineTable(pNewOutline);
762 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
763 maTabs[nTab]->DoAutoOutline( nStartCol, nStartRow, nEndCol, nEndRow );
768 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->TestRemoveSubTotals( rParam );
773 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
774 maTabs[nTab]->RemoveSubTotals( rParam );
779 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->DoSubTotals( rParam );
785 for (
bool bHas = aIter.
first(); bHas; bHas = aIter.
next())
803 for (
SCTAB nTab=0; nTab<nCount; nTab++)
804 if (maTabs[nTab] && pPosDoc->
maTabs[nTab] && pDestDoc->
maTabs[nTab])
805 maTabs[nTab]->CopyUpdated( pPosDoc->
maTabs[nTab].get(), pDestDoc->
maTabs[nTab].get() );
810 if (!(
ValidTab(nSrcTab) &&
ValidTab(nDestTab) && nSrcTab < static_cast<SCTAB>(maTabs.size())
811 && nDestTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nSrcTab] && maTabs[nDestTab]))
816 ScRangeList aRanges = *maTabs[nSrcTab]->GetScenarioRanges();
819 for (
SCTAB nTab = nDestTab+1;
820 nTab< static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsScenario();
823 if ( maTabs[nTab]->IsActiveScenario() )
825 bool bTouched =
false;
826 for (
size_t nR=0, nRangeCount = aRanges.
size(); nR < nRangeCount && !bTouched; nR++ )
828 const ScRange& rRange = aRanges[ nR ];
829 if ( maTabs[nTab]->HasScenarioRange( rRange ) )
834 maTabs[nTab]->SetActiveScenario(
false);
836 maTabs[nTab]->CopyScenarioFrom( maTabs[nDestTab].
get() );
841 maTabs[nSrcTab]->SetActiveScenario(
true);
845 maTabs[nSrcTab]->CopyScenarioTo( maTabs[nDestTab].
get() );
848 SetAllFormulasDirty(aCxt);
858 if (
ValidTab(nSrcTab) && nSrcTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nSrcTab])
859 maTabs[nSrcTab]->MarkScenarioIn( rDestMark, nNeededBits );
866 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->HasScenarioRange( rRange );
871 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
872 return maTabs[nTab]->GetScenarioRanges();
879 return ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && maTabs[nTab]->IsActiveScenario( );
884 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
885 maTabs[nTab]->SetActiveScenario( bActive );
890 if (
ValidTab(nSrcTab) && nSrcTab < static_cast<SCTAB>(maTabs.size())
891 && nDestTab < static_cast<SCTAB>(maTabs.size())&&
ValidTab(nDestTab))
892 return maTabs[nSrcTab]->TestCopyScenarioTo( maTabs[nDestTab].
get() );
894 OSL_FAIL(
"wrong table at TestCopyScenario");
900 if (!pUnoBroadcaster)
912 if ( bInUnoBroadcast )
931 OSL_FAIL(
"RemoveUnoObject called from BroadcastUno" );
936 while ( bInUnoBroadcast )
938 osl::Thread::yield();
945 OSL_FAIL(
"No Uno broadcaster");
951 if (!pUnoBroadcaster)
954 bInUnoBroadcast =
true;
955 pUnoBroadcaster->Broadcast( rHint );
956 bInUnoBroadcast =
false;
962 if ( pUnoListenerCalls &&
963 rHint.
GetId() == SfxHintId::DataChanged &&
964 !bInUnoListenerCall )
971 bInUnoListenerCall =
true;
972 pUnoListenerCalls->ExecuteAndClear();
973 bInUnoListenerCall =
false;
978 const lang::EventObject& rEvent )
980 OSL_ENSURE( bInUnoBroadcast,
"AddUnoListenerCall is supposed to be called from BroadcastUno only" );
982 if ( !pUnoListenerCalls )
984 pUnoListenerCalls->Add( rListener, rEvent );
989 OSL_ENSURE( !pUnoRefUndoList,
"BeginUnoRefUndo twice" );
995 return std::move(pUnoRefUndoList);
1001 if ( pUnoRefUndoList )
1002 pUnoRefUndoList->Add( nId, rOldRanges );
1015 std::unique_ptr<sc::ExpandRefsSwitch> pExpandRefsSwitch;
1019 size_t nFirstTab, nLastTab;
1037 xColNameRanges->UpdateReference( eUpdateRefMode,
this, aRange, nDx, nDy, nDz );
1038 xRowNameRanges->UpdateReference( eUpdateRefMode,
this, aRange, nDx, nDy, nDz );
1039 pDBCollection->UpdateReference( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz );
1041 pRangeName->UpdateReference(rCxt);
1042 if ( pDPCollection )
1043 pDPCollection->UpdateReference( eUpdateRefMode, aRange, nDx, nDy, nDz );
1044 UpdateChartRef( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz );
1045 UpdateRefAreaLinks( eUpdateRefMode, aRange, nDx, nDy, nDz );
1046 if ( pValidationList )
1049 pValidationList->UpdateReference(rCxt);
1052 pDetOpList->UpdateReference(
this, eUpdateRefMode, aRange, nDx, nDy, nDz );
1053 if ( pUnoBroadcaster )
1055 eUpdateRefMode, aRange, nDx, nDy, nDz ) );
1058 nLastTab = maTabs.size()-1;
1061 for (
size_t i = nFirstTab,
n = maTabs.size() ;
i <= nLastTab &&
i <
n; ++
i)
1066 maTabs[i]->UpdateReference(rCxt, pUndoDoc, bIncludeDraw, bUpdateNoteCaptionPos);
1077 theCol1 = aEmbedRange.aStart.Col();
1078 theRow1 = aEmbedRange.aStart.Row();
1079 theTab1 = aEmbedRange.aStart.Tab();
1080 theCol2 = aEmbedRange.aEnd.Col();
1081 theRow2 = aEmbedRange.aEnd.Row();
1082 theTab2 = aEmbedRange.aEnd.Tab();
1094 nDx,nDy,nDz, theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 ) )
1096 aEmbedRange =
ScRange( theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 );
1112 OSL_ENSURE(pClipDoc->
bIsClip,
"UpdateTranspose: No Clip");
1121 for (
SCTAB nDestTab=0; nDestTab< static_cast<SCTAB>(maTabs.size()) && maTabs[nDestTab]; nDestTab++)
1124 while (!pClipDoc->
maTabs[nClipTab]) nClipTab = (nClipTab+1) % (
MAXTAB+1);
1127 aDest.
SetTab( nDestTab );
1131 pRangeName->UpdateTranspose( aSource, aDest );
1132 for (
SCTAB i=0; i< static_cast<SCTAB>(maTabs.size());
i++)
1134 maTabs[i]->UpdateTranspose( aSource, aDest, pUndoDoc );
1136 nClipTab = (nClipTab+1) % (
MAXTAB+1);
1147 pRangeName->UpdateGrow( rArea, nGrowX, nGrowY );
1149 for (
SCTAB i=0; i< static_cast<SCTAB>(maTabs.size()) && maTabs[
i];
i++)
1150 maTabs[
i]->UpdateGrow( rArea, nGrowX, nGrowY );
1155 double nStepValue,
double nMaxValue)
1161 SCTAB nMax = maTabs.size();
1162 for (
const auto& rTab : rMark)
1168 maTabs[rTab]->Fill(nCol1, nRow1, nCol2, nRow2,
1169 nFillCount, eFillDir, eFillCmd, eFillDateCmd,
1170 nStepValue, nMaxValue, pProgress);
1179 if (nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
1180 return maTabs[nTab]->GetAutoFillPreview( rSource, nEndX, nEndY );
1186 sal_uInt16 nFormatNo,
const ScMarkData& rMark )
1190 SCTAB nMax = maTabs.size();
1191 for (
const auto& rTab : rMark)
1196 maTabs[rTab]->AutoFormat( nStartCol, nStartRow, nEndCol, nEndRow, nFormatNo );
1203 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()))
1209 maTabs[nTab]->GetAutoFormatData(nStartCol, nStartRow, nEndCol, nEndRow, rData);
1218 bool bReplace = ( nCommand == SvxSearchCmd::REPLACE ||
1219 nCommand == SvxSearchCmd::REPLACE_ALL );
1229 else if ( bReplace )
1247 else if ( bReplace )
1268 else if ( bReplace )
1286 else if ( bReplace )
1306 bool bFound =
false;
1307 if (rTab >= static_cast<SCTAB>(maTabs.size()))
1308 OSL_FAIL(
"table out of range");
1315 if ( nCommand == SvxSearchCmd::FIND_ALL ||
1316 nCommand == SvxSearchCmd::REPLACE_ALL )
1318 SCTAB nMax = maTabs.size();
1319 for (
const auto& rMarkedTab : rMark)
1321 if (rMarkedTab >= nMax)
1323 if (maTabs[rMarkedTab])
1327 bFound |= maTabs[rMarkedTab]->SearchAndReplace(
1328 rSearchItem, nCol, nRow, rMark, rMatchedRanges, rUndoStr, pUndoDoc);
1340 for (nTab = rTab; (nTab >= 0) && !bFound; nTab--)
1345 bFound = maTabs[nTab]->SearchAndReplace(
1346 rSearchItem, nCol, nRow, rMark, rMatchedRanges, rUndoStr, pUndoDoc);
1356 rSearchItem, nCol, nRow );
1361 OString aPayload = OString::number(nTab);
1363 pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_SET_PART, aPayload.getStr());
1371 for (nTab = rTab; (nTab < static_cast<SCTAB>(maTabs.size())) && !bFound; nTab++)
1376 bFound = maTabs[nTab]->SearchAndReplace(
1377 rSearchItem, nCol, nRow, rMark, rMatchedRanges, rUndoStr, pUndoDoc);
1387 rSearchItem, nCol, nRow );
1392 OString aPayload = OString::number(nTab);
1394 pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_SET_PART, aPayload.getStr());
1410 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1411 return maTabs[nTab]->UpdateOutlineCol( nStartCol, nEndCol, bShow );
1413 OSL_FAIL(
"missing tab");
1419 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1420 return maTabs[nTab]->UpdateOutlineRow( nStartRow, nEndRow, bShow );
1422 OSL_FAIL(
"missing tab");
1427 SCTAB nTab,
const ScSortParam& rSortParam,
bool bKeepQuery,
bool bUpdateRefs,
1430 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1432 bool bOldEnableIdle = IsIdleEnabled();
1434 maTabs[nTab]->Sort(rSortParam, bKeepQuery, bUpdateRefs, pProgress, pUndo);
1435 EnableIdle(bOldEnableIdle);
1445 bool bOldEnableIdle = IsIdleEnabled();
1448 EnableIdle(bOldEnableIdle);
1453 if(
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1454 maTabs[nTab]->PrepareQuery(rQueryParam);
1457 OSL_FAIL(
"missing tab");
1464 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1465 return maTabs[nTab]->Query(rQueryParam, bKeepSub);
1467 OSL_FAIL(
"missing tab");
1473 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1474 maTabs[nTab]->GetUpperCellString( nCol, nRow, rStr );
1484 OSL_FAIL(
"missing tab");
1495 bool bHasAutoFilter = (pDBData !=
nullptr);
1507 nRow = aParam.
nRow1;
1509 for ( nCol=aParam.
nCol1; nCol<=aParam.
nCol2 && bHasAutoFilter; nCol++ )
1514 bHasAutoFilter =
false;
1518 bHasAutoFilter =
false;
1521 return bHasAutoFilter;
1527 return ValidTab(nTab) && maTabs[nTab] && maTabs[nTab]->HasColHeader( nStartCol, nStartRow, nEndCol, nEndRow );
1533 return ValidTab(nTab) && maTabs[nTab] && maTabs[nTab]->HasRowHeader( nStartCol, nStartRow, nEndCol, nEndRow );
1540 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1554 if ( !(
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] && pDBCollection) )
1567 pDBData->
GetArea( nAreaTab, nStartCol, nStartRow, nEndCol, nEndRow );
1576 bool bFilter =
true;
1590 maTabs[nTab]->GetFilteredFilterEntries( nCol, nStartRow, nEndRow, aParam, rFilterEntries, bFilter );
1594 maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rFilterEntries );
1607 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
1609 maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rFilterEntries );
1610 sortAndRemoveDuplicates( rFilterEntries.
maStrData, bCaseSens);
1619 std::vector<ScTypedStrData>& rStrings,
bool bLimit )
1626 sal_uInt32 nValidation = GetAttr( nCol, nRow, nTab,
ATTR_VALIDDATA )->GetValue();
1632 if (pData->
GetListType() == css::sheet::TableValidationVisibility::SORTEDASCENDING)
1633 sortAndRemoveDuplicates(rStrings,
true);
1640 if (!
ValidTab(nTab) || nTab >=
static_cast<SCTAB>(maTabs.size()))
1646 std::set<ScTypedStrData> aStrings;
1647 if (maTabs[nTab]->GetDataEntries(nCol, nRow, aStrings, bLimit))
1649 rStrings.insert(rStrings.end(), aStrings.begin(), aStrings.end());
1650 sortAndRemoveDuplicates(rStrings,
true);
1663 for (
const auto& rEntry : *pRangeName)
1668 if ( pDBCollection )
1671 for (
const auto& rxDB : rDBs)
1677 pLists[0] = GetColNameRanges();
1678 pLists[1] = GetRowNameRanges();
1684 for (
size_t i = 0, nPairs = pList->size();
i < nPairs; ++
i )
1689 for (
bool bHas = aIter.
first(); bHas; bHas = aIter.
next())
1703 rRange = aEmbedRange;
1710 if ( aEmbedRange.aStart.Tab() <
static_cast<SCTAB>(maTabs.size()) )
1711 pTable = maTabs[aEmbedRange.aStart.Tab()].get();
1713 OSL_FAIL(
"table out of range");
1716 OSL_FAIL(
"GetEmbeddedRect without a table");
1722 for (i=0; i<aEmbedRange.aStart.Col(); i++)
1726 for (i=aEmbedRange.aStart.Col(); i<=aEmbedRange.aEnd.Col(); i++)
1742 aEmbedRange = rRange;
1747 bIsEmbedded =
false;
1758 bool bAdded =
false;
1760 while (rTwips < nStopTwips && nRow <= nEndRow && !bStop)
1762 SCROW nHeightEndRow;
1763 sal_uInt16 nHeight = pTable->
GetRowHeight( nRow,
nullptr, &nHeightEndRow, bHiddenAsZero );
1764 if (nHeightEndRow > nEndRow)
1765 nHeightEndRow = nEndRow;
1767 nRow = nHeightEndRow + 1;
1770 SCROW nRows = nHeightEndRow - nRow + 1;
1771 sal_Int64 nAdd =
static_cast<sal_Int64
>(nHeight) * nRows;
1772 if (nAdd + rTwips >= nStopTwips)
1774 sal_Int64 nDiff = nAdd + rTwips - nStopTwips;
1775 nRows -=
static_cast<SCROW>(nDiff / nHeight);
1776 nAdd =
static_cast<sal_Int64
>(nHeight) * nRows;
1778 if (nAdd + rTwips >= nStopTwips)
1801 if (nTab < static_cast<SCTAB>(maTabs.size()))
1802 pTable = maTabs[nTab].get();
1804 OSL_FAIL(
"table out of range");
1807 OSL_FAIL(
"GetRange without a table");
1812 if ( IsNegativePage( nTab ) )
1828 if (nSize+nAdd <= nTwips+1 && nX1<MaxCol())
1846 if (nSize+nAdd < nTwips && nX2<MaxCol())
1861 if (
lcl_AddTwipsWhile( nSize, nTwips+2, nY1, MaxRow(), pTable, bHiddenAsZero) && nY1 < MaxRow())
1869 if (
lcl_AddTwipsWhile( nSize, nTwips, nY2, MaxRow(), pTable, bHiddenAsZero) && nY2 < MaxRow())
1873 return ScRange( nX1,nY1,nTab, nX2,nY2,nTab );
1879 aEmbedRange = GetRange( nTab, rRect );
1884 return pDocProtection.get();
1892 pDocProtection.reset();
1897 return pDocProtection && pDocProtection->isProtected();
1903 return !IsDocProtected() && ( bImportingXML || mbChangeReadOnlyEnabled || !mpShell || !mpShell->IsReadOnly() );
1908 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
1909 return maTabs[nTab]->IsProtected();
1911 OSL_FAIL(
"Wrong table number");
1917 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab])
1918 return maTabs[nTab]->GetProtection();
1925 if (!
ValidTab(nTab) || nTab >= static_cast<SCTAB>(maTabs.size()))
1928 maTabs[nTab]->SetProtection(pProtect);
1933 if (!
ValidTab(nTabSrc) || nTabSrc >= static_cast<SCTAB>(maTabs.size()) || nTabDest >= static_cast<SCTAB>(maTabs.size()) || !
ValidTab(nTabDest))
1936 maTabs[nTabDest]->SetProtection( maTabs[nTabSrc]->GetProtection() );
1941 assert(pDocOptions &&
"No DocOptions! :-(");
1942 return *pDocOptions;
1947 assert(pDocOptions &&
"No DocOptions! :-(");
1949 *pDocOptions = rOpt;
1950 mxPoolHelper->SetFormTableOpt(rOpt);
1955 assert(pViewOptions &&
"No ViewOptions! :-(");
1956 return *pViewOptions;
1961 assert(pViewOptions &&
"No ViewOptions! :-(");
1962 *pViewOptions = rOpt;
1968 rCjk = eCjkLanguage;
1969 rCtl = eCtlLanguage;
1975 eCjkLanguage = eCjk;
1976 eCtlLanguage = eCtl;
1977 if ( mxPoolHelper.is() )
1985 UpdateDrawLanguages();
1990 if (!
ValidTab(nTab) || nTab >= static_cast<SCTAB>(maTabs.size()) || !maTabs[nTab])
1992 OSL_FAIL(
"GetMMRect: wrong table");
1999 for (i=0; i<nStartCol; i++)
2000 aRect.
AdjustLeft(GetColWidth(i,nTab, bHiddenAsZero ) );
2001 aRect.
AdjustTop(GetRowHeight( 0, nStartRow-1, nTab, bHiddenAsZero ) );
2006 for (i=nStartCol; i<=nEndCol; i++)
2007 aRect.
AdjustRight(GetColWidth(i,nTab, bHiddenAsZero) );
2008 aRect.
AdjustBottom(GetRowHeight( nStartRow, nEndRow, nTab, bHiddenAsZero ) );
2015 if ( IsNegativePage( nTab ) )
2023 pExtDocOptions = std::move(pNewOptions);
2028 mpClipOptions = std::move(pClipOptions);
2034 OUStringBuffer aTotal;
2038 for (nRow=nStartRow; nRow<=nEndRow; nRow++)
2039 for (nCol=nStartCol; nCol<=nEndCol; nCol++)
2042 if (!aCellStr.isEmpty())
2044 if (!aTotal.isEmpty())
2046 aTotal.append(aCellStr);
2048 if (nCol != nStartCol || nRow != nStartRow)
2052 SetString(nStartCol,nStartRow,nTab,aTotal.makeStringAndClear());
2060 for (nRow=nStartRow; nRow<=nEndRow; nRow++)
2061 for (nCol=nStartCol; nCol<=nEndCol; nCol++)
2063 if (nCol != nStartCol || nRow != nStartRow)
2069 SCCOL nEndCol,
SCROW nEndRow,
bool bDeleteCaptions )
2071 ScTable* pTab = FetchTable(nTab);
2079 if( nStartCol < nEndCol )
2080 DeleteAreaTab( nStartCol + 1, nStartRow, nEndCol, nStartRow, nTab, nDelFlag );
2081 if( nStartRow < nEndRow )
2082 DeleteAreaTab( nStartCol, nStartRow + 1, nEndCol, nEndRow, nTab, nDelFlag );
2098 ApplyAttr( nCol, nRow, nTab, *pDefAttr );
2104 if (
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
2105 maTabs[nTab]->ExtendPrintArea( pDev, nStartCol, nStartRow, rEndCol, nEndRow );
2110 if(
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
2111 return maTabs[nTab]->GetPatternCount( nCol );
2118 if(
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
2119 return maTabs[nTab]->GetPatternCount( nCol, nRow1, nRow2 );
2126 if(
ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
2127 maTabs[nTab]->ReservePatternCount( nCol, nReserve );
2132 rParam = mSheetSortParams[ nTab ];
2137 mSheetSortParams[ nTab ] = rParam;
2142 return maTabs[nTab]->ClampToAllocatedColumns(nCol);
2147 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.
constexpr::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
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)
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)
SC_DLLPUBLIC const ScRangeData * GetRangeAtBlock(const ScRange &rBlock, OUString &rName, bool *pSheetLocal=nullptr) const
void PrepareQuery(SCTAB nTab, ScQueryParam &rQueryParam)
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 ScTableProtection * GetTabProtection(SCTAB nTab) const
std::unique_ptr< ScExternalRefManager > pExternalRefMgr