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>
82void sortAndRemoveDuplicates(std::vector<ScTypedStrData>& rStrings,
bool bCaseSens)
87 std::vector<ScTypedStrData>::iterator it =
89 rStrings.erase(it, rStrings.end());
90 if (std::find_if(rStrings.begin(), rStrings.end(),
91 [](
ScTypedStrData& rString) { return rString.IsHiddenByFilter(); }) != rStrings.end()) {
98 std::vector<ScTypedStrData>::iterator it =
100 rStrings.erase(it, rStrings.end());
101 if (std::find_if(rStrings.begin(), rStrings.end(),
102 [](
ScTypedStrData& rString) { return rString.IsHiddenByFilter(); }) != rStrings.end()) {
113 for (
SCTAB i = 0; i < static_cast<SCTAB>(
maTabs.size()); ++
i)
120 if (!
p ||
p->empty())
124 aNames.emplace(
i,
p);
131 for (
const auto& [rName, rRangeName] : rRangeMap)
136 if (!rRangeName.empty())
142 bool bFound =
GetTable(rName, nTab);
143 assert(bFound); (void)bFound;
144 if (rRangeName.empty())
154 for (
SCTAB i = 0; i < static_cast<SCTAB>(
maTabs.size()); ++
i)
164 OUString aTableName =
maTabs[
i]->GetName();
165 aRangeNameMap.insert(std::pair<OUString, ScRangeName*>(aTableName,
p));
179 return maTabs[nTab]->GetRangeName();
194 return maTabs[nTab]->SetRangeName(std::move(pNew));
212 for (
const auto& rEntry : *pRangeNames)
214 if (rEntry.second->IsValidReference(aNameRange))
255 rName =
pData->GetName();
267 rName =
pData->GetName();
269 *pSheetLocal =
false;
289 for (
const auto& rxNamedDB : rNamedDBs)
291 const ScDBData& rOldData = *rxNamedDB;
299 if (pNewDBCollection)
331 return pDBCollection->GetDBAtCursor(nCol, nRow, nTab, ePortion);
339 return pDBCollection->GetDBAtCursor(nCol, nRow, nTab, ePortion);
347 return pDBCollection->GetDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2);
355 return pDBCollection->GetDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2);
392 return &(*pDPCollection)[
i];
407 return &(*pDPCollection)[
i];
419 std::unique_ptr<ScChartListenerCollection> pNewChartListenerCollection,
420 bool bSetChartRangeLists )
435 maTabs[nTab]->SetScenario(bFlag);
448 maTabs[nTab]->SetScenarioComment( rComment );
449 maTabs[nTab]->SetScenarioColor( rColor );
450 maTabs[nTab]->SetScenarioFlags( nFlags );
457 return maTabs[nTab]->GetTabBgColor();
464 maTabs[nTab]->SetTabBgColor(rColor);
479 maTabs[nTab]->GetScenarioComment( rComment );
480 rColor =
maTabs[nTab]->GetScenarioColor();
481 rFlags =
maTabs[nTab]->GetScenarioFlags();
488 rFlags =
maTabs[nTab]->GetScenarioFlags();
513 return maTabs[nTab]->GetLinkMode();
520 return maTabs[nTab]->GetLinkDoc();
527 return maTabs[nTab]->GetLinkFlt();
534 return maTabs[nTab]->GetLinkOpt();
541 return maTabs[nTab]->GetLinkTab();
548 return maTabs[nTab]->GetLinkRefreshDelay();
553 const OUString& rFilter,
const OUString& rOptions,
554 const OUString& rTabName,
sal_uLong nRefreshDelay )
557 maTabs[nTab]->SetLink( nMode, rDoc, rFilter, rOptions, rTabName, nRefreshDelay );
561 std::u16string_view rFilter, std::u16string_view rOptions )
const
566 &&
maTabs[
i]->GetLinkDoc() == rDoc
567 &&
maTabs[
i]->GetLinkFlt() == rFilter
568 &&
maTabs[
i]->GetLinkOpt() == rOptions)
575 const OUString& aFileName,
const OUString& aTabName )
579 OSL_FAIL(
"LinkExternalTab in Clipboard" );
589 OUString aFilterName;
599 if ( pSrcDoc->
GetTable( aTabName, nSrcTab ) )
603 OSL_FAIL(
"can't insert external document table");
608 TransferTab( *pSrcDoc, nSrcTab, rTab,
false,
true );
615 bool bWasThere =
HasLink( aFileName, aFilterName, aOptions );
620 pLink->SetInCreate(
true );
621 OUString aFilName = aFilterName;
624 pLink->SetInCreate(
false );
672 return maTabs[nTab]->GetSheetEvents();
679 maTabs[nTab]->SetSheetEvents( std::move(pNew) );
688 if ( pEvents && pEvents->
GetScript( nEvent ) )
693 uno::Sequence< uno::Any > aArgs{
uno::Any(nTab) };
698 catch( uno::Exception& )
708 for (
SCTAB nTab = 0; nTab < nSize; nTab++)
717 for (
SCTAB nTab = 0; nTab < nSize; nTab++)
718 if (
maTabs[nTab] &&
maTabs[nTab]->GetCalcNotification())
726 return maTabs[nTab]->GetCalcNotification();
734 maTabs[nTab]->SetCalcNotification(
true);
740 for (
SCTAB nTab = 0; nTab < nSize; nTab++)
741 if (
maTabs[nTab] &&
maTabs[nTab]->GetCalcNotification())
752 pVal =
maTabs[nTab]->GetOutlineTable();
753 if (!pVal && bCreate)
755 maTabs[nTab]->StartOutlineTable();
756 pVal =
maTabs[nTab]->GetOutlineTable();
765 return ValidTab(nTab) && nTab < static_cast<SCTAB>(
maTabs.size()) &&
maTabs[nTab] &&
maTabs[nTab]->SetOutlineTable(pNewOutline);
772 maTabs[nTab]->DoAutoOutline( nStartCol, nStartRow, nEndCol, nEndRow );
777 return ValidTab(nTab) && nTab < static_cast<SCTAB>(
maTabs.size()) &&
maTabs[nTab] &&
maTabs[nTab]->TestRemoveSubTotals( rParam );
783 maTabs[nTab]->RemoveSubTotals( rParam );
794 for (
bool bHas = aIter.
first(); bHas; bHas = aIter.
next())
814 maTabs[nTab]->CopyUpdated( pPosDoc->
maTabs[nTab].get(), pDestDoc->
maTabs[nTab].get() );
828 for (
SCTAB nTab = nDestTab+1;
829 nTab< static_cast<SCTAB>(
maTabs.size()) &&
maTabs[nTab] &&
maTabs[nTab]->IsScenario();
834 bool bTouched =
false;
835 for (
size_t nR=0, nRangeCount = aRanges.
size(); nR < nRangeCount && !bTouched; nR++ )
837 const ScRange& rRange = aRanges[ nR ];
843 maTabs[nTab]->SetActiveScenario(
false);
850 maTabs[nSrcTab]->SetActiveScenario(
true);
868 maTabs[nSrcTab]->MarkScenarioIn( rDestMark, nNeededBits );
875 return ValidTab(nTab) && nTab < static_cast<SCTAB>(
maTabs.size()) &&
maTabs[nTab] &&
maTabs[nTab]->HasScenarioRange( rRange );
881 return maTabs[nTab]->GetScenarioRanges();
894 maTabs[nTab]->SetActiveScenario( bActive );
903 OSL_FAIL(
"wrong table at TestCopyScenario");
940 OSL_FAIL(
"RemoveUnoObject called from BroadcastUno" );
947 osl::Thread::yield();
954 OSL_FAIL(
"No Uno broadcaster");
972 rHint.
GetId() == SfxHintId::DataChanged &&
987 const lang::EventObject& rEvent )
989 OSL_ENSURE(
bInUnoBroadcast,
"AddUnoListenerCall is supposed to be called from BroadcastUno only" );
1024 std::unique_ptr<sc::ExpandRefsSwitch> pExpandRefsSwitch;
1028 size_t nFirstTab, nLastTab;
1046 xColNameRanges->UpdateReference( eUpdateRefMode,
this, aRange, nDx, nDy, nDz );
1047 xRowNameRanges->UpdateReference( eUpdateRefMode,
this, aRange, nDx, nDy, nDz );
1048 pDBCollection->UpdateReference( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz );
1052 pDPCollection->UpdateReference( eUpdateRefMode, aRange, nDx, nDy, nDz );
1053 UpdateChartRef( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz );
1061 pDetOpList->UpdateReference(
this, eUpdateRefMode, aRange, nDx, nDy, nDz );
1064 eUpdateRefMode, aRange, nDx, nDy, nDz ) );
1067 nLastTab =
maTabs.size()-1;
1070 for (
size_t i = nFirstTab,
n =
maTabs.size() ;
i <= nLastTab &&
i <
n; ++
i)
1075 maTabs[
i]->UpdateReference(rCxt, pUndoDoc, bIncludeDraw, bUpdateNoteCaptionPos);
1103 nDx,nDy,nDz, theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 ) )
1121 OSL_ENSURE(pClipDoc->
bIsClip,
"UpdateTranspose: No Clip");
1130 for (
SCTAB nDestTab=0; nDestTab< static_cast<SCTAB>(
maTabs.size()) &&
maTabs[nDestTab]; nDestTab++)
1133 while (!pClipDoc->
maTabs[nClipTab]) nClipTab = (nClipTab+1) % (
MAXTAB+1);
1136 aDest.
SetTab( nDestTab );
1140 pRangeName->UpdateTranspose( aSource, aDest );
1143 maTabs[
i]->UpdateTranspose( aSource, aDest, pUndoDoc );
1145 nClipTab = (nClipTab+1) % (
MAXTAB+1);
1156 pRangeName->UpdateGrow( rArea, nGrowX, nGrowY );
1164 double nStepValue,
double nMaxValue)
1170 for (
const auto& rTab : rMark)
1176 maTabs[rTab]->Fill(nCol1, nRow1, nCol2, nRow2,
1177 nFillCount, eFillDir, eFillCmd, eFillDateCmd,
1178 nStepValue, nMaxValue, pProgress);
1188 return maTabs[nTab]->GetAutoFillPreview( rSource, nEndX, nEndY );
1194 sal_uInt16 nFormatNo,
const ScMarkData& rMark )
1199 for (
const auto& rTab : rMark)
1204 maTabs[rTab]->AutoFormat( nStartCol, nStartRow, nEndCol, nEndRow, nFormatNo );
1217 maTabs[nTab]->GetAutoFormatData(nStartCol, nStartRow, nEndCol, nEndRow, rData);
1226 bool bReplace = ( nCommand == SvxSearchCmd::REPLACE ||
1227 nCommand == SvxSearchCmd::REPLACE_ALL );
1237 else if ( bReplace )
1255 else if ( bReplace )
1276 else if ( bReplace )
1294 else if ( bReplace )
1319 OUString& rUndoStr,
ScDocument* pUndoDoc,
bool& bMatchedRangesWereClamped)
1322 bool bFound =
false;
1324 OSL_FAIL(
"table out of range");
1331 if ( nCommand == SvxSearchCmd::FIND_ALL ||
1332 nCommand == SvxSearchCmd::REPLACE_ALL )
1335 for (
const auto& rMarkedTab : rMark)
1337 if (rMarkedTab >= nMax)
1343 bFound |=
maTabs[rMarkedTab]->SearchAndReplace(
1344 rSearchItem, nCol, nRow, rMark, rMatchedRanges, rUndoStr, pUndoDoc, bMatchedRangesWereClamped);
1356 for (nTab = rTab; (nTab >= 0) && !bFound; nTab--)
1361 bFound =
maTabs[nTab]->SearchAndReplace(
1362 rSearchItem, nCol, nRow, rMark, rMatchedRanges, rUndoStr, pUndoDoc, bMatchedRangesWereClamped);
1372 rSearchItem, nCol, nRow );
1377 OString aPayload = OString::number(nTab);
1379 pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_SET_PART, aPayload.getStr());
1387 for (nTab = rTab; (nTab < static_cast<SCTAB>(
maTabs.size())) && !bFound; nTab++)
1392 bFound =
maTabs[nTab]->SearchAndReplace(
1393 rSearchItem, nCol, nRow, rMark, rMatchedRanges, rUndoStr, pUndoDoc, bMatchedRangesWereClamped);
1403 rSearchItem, nCol, nRow );
1408 OString aPayload = OString::number(nTab);
1410 pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_SET_PART, aPayload.getStr());
1427 return maTabs[nTab]->UpdateOutlineCol( nStartCol, nEndCol, bShow );
1429 OSL_FAIL(
"missing tab");
1436 return maTabs[nTab]->UpdateOutlineRow( nStartRow, nEndRow, bShow );
1438 OSL_FAIL(
"missing tab");
1443 SCTAB nTab,
const ScSortParam& rSortParam,
bool bKeepQuery,
bool bUpdateRefs,
1450 maTabs[nTab]->Sort(rSortParam, bKeepQuery, bUpdateRefs, pProgress, pUndo);
1470 maTabs[nTab]->PrepareQuery(rQueryParam);
1473 OSL_FAIL(
"missing tab");
1481 return maTabs[nTab]->Query(rQueryParam, bKeepSub);
1483 OSL_FAIL(
"missing tab");
1490 return maTabs[nTab]->GetUpperCellString( nCol, nRow );
1500 OSL_FAIL(
"missing tab");
1511 bool bHasAutoFilter = (pDBData !=
nullptr);
1523 nRow = aParam.
nRow1;
1525 for ( nCol=aParam.
nCol1; nCol<=aParam.
nCol2 && bHasAutoFilter; nCol++ )
1530 bHasAutoFilter =
false;
1534 bHasAutoFilter =
false;
1537 return bHasAutoFilter;
1543 return ValidTab(nTab) &&
maTabs[nTab] &&
maTabs[nTab]->HasColHeader( nStartCol, nStartRow, nEndCol, nEndRow );
1549 return ValidTab(nTab) &&
maTabs[nTab] &&
maTabs[nTab]->HasRowHeader( nStartCol, nStartRow, nEndCol, nEndRow );
1583 pDBData->
GetArea( nAreaTab, nStartCol, nStartRow, nEndCol, nEndRow );
1592 bool bFilter =
true;
1606 maTabs[nTab]->GetFilteredFilterEntries( nCol, nStartRow, nEndRow, aParam, rFilterEntries, bFilter );
1610 maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rFilterEntries );
1625 maTabs[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rFilterEntries,
true );
1626 sortAndRemoveDuplicates( rFilterEntries.
maStrData, bCaseSens);
1635 std::vector<ScTypedStrData>& rStrings,
bool bValidation )
1648 if (
pData->GetListType() == css::sheet::TableValidationVisibility::SORTEDASCENDING)
1649 sortAndRemoveDuplicates(rStrings,
true);
1662 std::set<ScTypedStrData> aStrings;
1665 rStrings.insert(rStrings.end(), aStrings.begin(), aStrings.end());
1666 sortAndRemoveDuplicates(rStrings,
true);
1687 for (
const auto& rxDB : rDBs)
1700 for (
size_t i = 0, nPairs = pList->size();
i < nPairs; ++
i )
1705 for (
bool bHas = aIter.
first(); bHas; bHas = aIter.
next())
1729 OSL_FAIL(
"table out of range");
1732 OSL_FAIL(
"GetEmbeddedRect without a table");
1771 bool bAdded =
false;
1773 while (rTwips < nStopTwips && nRow <= nEndRow && !bStop)
1775 SCROW nHeightEndRow;
1776 sal_uInt16 nHeight = pTable->
GetRowHeight( nRow,
nullptr, &nHeightEndRow, bHiddenAsZero );
1777 if (nHeightEndRow > nEndRow)
1778 nHeightEndRow = nEndRow;
1780 nRow = nHeightEndRow + 1;
1783 SCROW nRows = nHeightEndRow - nRow + 1;
1784 sal_Int64 nAdd =
static_cast<sal_Int64
>(nHeight) * nRows;
1785 if (nAdd + rTwips >= nStopTwips)
1787 sal_Int64 nDiff = nAdd + rTwips - nStopTwips;
1788 nRows -=
static_cast<SCROW>(nDiff / nHeight);
1789 nAdd =
static_cast<sal_Int64
>(nHeight) * nRows;
1791 if (nAdd + rTwips >= nStopTwips)
1815 pTable =
maTabs[nTab].get();
1817 OSL_FAIL(
"table out of range");
1820 OSL_FAIL(
"GetRange without a table");
1834 nTwips = aPosRect.
Left();
1841 if (nSize+nAdd <= nTwips+1 && nX1<
MaxCol())
1855 nTwips = aPosRect.
Right();
1859 if (nSize+nAdd < nTwips && nX2<
MaxCol())
1870 nTwips = aPosRect.
Top();
1880 nTwips = aPosRect.
Bottom();
1886 return ScRange( nX1,nY1,nTab, nX2,nY2,nTab );
1922 return maTabs[nTab]->IsProtected();
1924 OSL_FAIL(
"Wrong table number");
1931 return maTabs[nTab]->GetProtection();
1941 maTabs[nTab]->SetProtection(pProtect);
1949 maTabs[nTabDest]->SetProtection(
maTabs[nTabSrc]->GetProtection() );
2006 OSL_FAIL(
"GetMMRect: wrong table");
2013 for (
i=0;
i<nStartCol;
i++)
2020 for (
i=nStartCol;
i<=nEndCol;
i++)
2045 OUStringBuffer aTotal;
2049 for (nRow=nStartRow; nRow<=nEndRow; nRow++)
2050 for (nCol=nStartCol; nCol<=nEndCol; nCol++)
2053 if (!aCellStr.isEmpty())
2055 if (!aTotal.isEmpty())
2057 aTotal.append(aCellStr);
2059 if (nCol != nStartCol || nRow != nStartRow)
2063 SetString(nStartCol,nStartRow,nTab,aTotal.makeStringAndClear());
2071 for (nRow=nStartRow; nRow<=nEndRow; nRow++)
2072 for (nCol=nStartCol; nCol<=nEndCol; nCol++)
2074 if (nCol != nStartCol || nRow != nStartRow)
2090 if( nStartCol < nEndCol )
2091 DeleteAreaTab( nStartCol + 1, nStartRow, nEndCol, nStartRow, nTab, nDelFlag );
2092 if( nStartRow < nEndRow )
2093 DeleteAreaTab( nStartCol, nStartRow + 1, nEndCol, nEndRow, nTab, nDelFlag );
2109 ApplyAttr( nCol, nRow, nTab, *pDefAttr );
2116 maTabs[nTab]->ExtendPrintArea( pDev, nStartCol, nStartRow, rEndCol, nEndRow );
2122 return maTabs[nTab]->GetPatternCount( nCol );
2130 return maTabs[nTab]->GetPatternCount( nCol, nRow1, nRow2 );
2138 maTabs[nTab]->ReservePatternCount( nCol, nReserve );
2153 return maTabs[nTab]->ClampToAllocatedColumns(nCol);
2158 return maTabs[nTab]->GetAllocatedColumnsCount();
bool ValidTab(SCTAB nTab)
const SCTAB SC_TAB_APPEND
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 ...
void PutInOrder(T &nStart, T &nEnd)
Walk through all cells in an area.
ScFormulaCell * getFormulaCell()
OUString getString() const
All current charts in the calc will be locked in constructor and unlocked in destructor.
Stores global named database ranges.
bool HasAutoFilter() const
void GetFilterSelCount(SCSIZE &nSelected, SCSIZE &nTotal)
void GetArea(SCTAB &rTab, SCCOL &rCol1, SCROW &rRow1, SCCOL &rCol2, SCROW &rRow2) const
const OUString & GetUpperName() const
SC_DLLPUBLIC void GetQueryParam(ScQueryParam &rQueryParam) const
void ExtendDataArea(const ScDocument &rDoc)
ScDocument * GetDocument()
SC_DLLPUBLIC bool InsertTab(SCTAB nPos, const OUString &rName, bool bExternalDocument=false, bool bUndoDeleteTab=false)
SC_DLLPUBLIC bool IsScenario(SCTAB nTab) const
SC_DLLPUBLIC SCCOL GetAllocatedColumnsCount(SCTAB nTab) const
SC_DLLPUBLIC bool RemoveFlagsTab(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, ScMF nFlags)
SC_DLLPUBLIC sal_uInt16 GetRowHeight(SCROW nRow, SCTAB nTab, bool bHiddenAsZero=true) const
void UpdateGrow(const ScRange &rArea, SCCOL nGrowX, SCROW nGrowY)
bool IsAddressInRangeName(RangeNameScope eScope, const ScAddress &rAddress)
SC_DLLPUBLIC void GetRangeNameMap(std::map< OUString, ScRangeName * > &rRangeName)
bool UpdateOutlineCol(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool bShow)
Adapt Outline.
void GetAutoFormatData(SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, ScAutoFormatData &rData)
SC_DLLPUBLIC ScRange GetRange(SCTAB nTab, const tools::Rectangle &rMMRect, bool bHiddenAsZero=true) const
bool RefreshAutoFilter(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab)
tools::Rectangle GetEmbeddedRect() const
SC_DLLPUBLIC bool LinkExternalTab(SCTAB &nTab, const OUString &aDocTab, const OUString &aFileName, const OUString &aTabName)
SC_DLLPUBLIC sal_uInt16 GetColWidth(SCCOL nCol, SCTAB nTab, bool bHiddenAsZero=true) const
void SC_DLLPUBLIC GetSortParam(ScSortParam &rParam, SCTAB nTab)
SC_DLLPUBLIC void SetAllRangeNames(const std::map< OUString, ScRangeName > &rRangeMap)
SC_DLLPUBLIC OUString GetLinkTab(SCTAB nTab) const
SC_DLLPUBLIC const ScTableProtection * GetTabProtection(SCTAB nTab) const
void UpdateRefAreaLinks(UpdateRefMode eUpdateRefMode, const ScRange &r, SCCOL nDx, SCROW nDy, SCTAB nDz)
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...
bool SetOutlineTable(SCTAB nTab, const ScOutlineTable *pNewOutline)
SC_DLLPUBLIC ScRangeName * GetRangeName() const
SC_DLLPUBLIC sal_uLong TransferTab(ScDocument &rSrcDoc, SCTAB nSrcPos, SCTAB nDestPos, bool bInsertNew=true, bool bResultsOnly=false)
ScTable * FetchTable(SCTAB nTab)
ScFormulaParserPool & GetFormulaParserPool() const
Returns the pool containing external formula parsers.
SC_DLLPUBLIC bool IsDocProtected() const
void SetRangeName(SCTAB nTab, std::unique_ptr< ScRangeName > pNew)
std::unique_ptr< ScUnoListenerCalls > pUnoListenerCalls
SC_DLLPUBLIC void Fill(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScProgress *pProgress, const ScMarkData &rMark, sal_uInt64 nFillCount, FillDir eFillDir=FILL_TO_BOTTOM, FillCmd eFillCmd=FILL_LINEAR, FillDateCmd eFillDateCmd=FILL_DAY, double nStepValue=1.0, double nMaxValue=1E307)
ScClipParam & GetClipParam()
std::unique_ptr< ScClipOptions > mpClipOptions
SC_DLLPUBLIC Color GetTabBgColor(SCTAB nTab) const
void PrepareQuery(SCTAB nTab, ScQueryParam &rQueryParam)
SC_DLLPUBLIC bool GetTable(const OUString &rName, SCTAB &rTab) const
std::unique_ptr< ScDocOptions > pDocOptions
SC_DLLPUBLIC bool IsTabProtected(SCTAB nTab) const
bool IsIdleEnabled() const
LanguageType eCtlLanguage
ScRangePairList * GetRowNameRanges()
void MarkScenario(SCTAB nSrcTab, SCTAB nDestTab, ScMarkData &rDestMark, bool bResetMark=true, ScScenarioFlags nNeededBits=ScScenarioFlags::NONE) const
void RemoveSubTotals(SCTAB nTab, ScSubTotalParam &rParam)
SC_DLLPUBLIC SCCOL MaxCol() const
ScDPObject * GetDPAtBlock(const ScRange &rBlock) const
std::unique_ptr< ScDPCollection > pDPCollection
SC_DLLPUBLIC void SetScenarioData(SCTAB nTab, const OUString &rComment, const Color &rColor, ScScenarioFlags nFlags)
SC_DLLPUBLIC const ScValidationData * GetValidationEntry(sal_uInt32 nIndex) const
const ScDBData * GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, ScDBDataPortion ePortion) const
const ScSheetEvents * GetSheetEvents(SCTAB nTab) const
std::unique_ptr< ScFormulaParserPool > mxFormulaParserPool
SC_DLLPUBLIC SCROW GetMaxRowCount() const
SC_DLLPUBLIC void DoMergeContents(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab)
formula::FormulaGrammar::Grammar eGrammar
OUString GetLinkOpt(SCTAB nTab) const
rtl::Reference< ScPoolHelper > mxPoolHelper
bool InsertNewRangeName(const OUString &rName, const ScAddress &rPos, const OUString &rExpr)
Insert a new named expression to the global scope.
void GetSearchAndReplaceStart(const SvxSearchItem &rSearchItem, SCCOL &rCol, SCROW &rRow)
void SetCalcNotification(SCTAB nTab)
SC_DLLPUBLIC formula::FormulaGrammar::AddressConvention GetAddressConvention() const
ScRangeData * FindRangeNameBySheetAndIndex(SCTAB nTab, sal_uInt16 nIndex) const
Find a named expression / range name in either global or a local scope.
SC_DLLPUBLIC SCROW MaxRow() const
SC_DLLPUBLIC bool HasPivotTable() const
bool HasLink(std::u16string_view rDoc, std::u16string_view rFilter, std::u16string_view rOptions) const
void AddUnoRefChange(sal_Int64 nId, const ScRangeList &rOldRanges)
SC_DLLPUBLIC void DoMerge(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, bool bDeleteCaptions=true)
void UpdateReference(sc::RefUpdateContext &rCxt, ScDocument *pUndoDoc=nullptr, bool bIncludeDraw=true, bool bUpdateNoteCaptionPos=true)
bool DoSubTotals(SCTAB nTab, ScSubTotalParam &rParam)
SC_DLLPUBLIC const ScDBData * GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const
SfxBindings * GetViewBindings()
std::unique_ptr< SfxBroadcaster > pUnoBroadcaster
SC_DLLPUBLIC void SetDocOptions(const ScDocOptions &rOpt)
bool HasScenarioRange(SCTAB nTab, const ScRange &rRange) const
SC_DLLPUBLIC bool IsNegativePage(SCTAB nTab) const
void RepaintRange(const ScRange &rRange)
std::unique_ptr< ScValidationDataList > pValidationList
void CopyScenario(SCTAB nSrcTab, SCTAB nDestTab, bool bNewScenario=false)
bool IsDocEditable() const
ScRangePairListRef xRowNameRanges
SC_DLLPUBLIC ScExternalRefManager * GetExternalRefManager() const
std::unique_ptr< ScUnoRefList > EndUnoRefUndo()
SC_DLLPUBLIC void GetScenarioData(SCTAB nTab, OUString &rComment, Color &rColor, ScScenarioFlags &rFlags) const
SC_DLLPUBLIC void GetAllTabRangeNames(ScRangeName::TabNameCopyMap &rRangeNames) const
Get all range names that are local to each table.
void RemoveMerge(SCCOL nCol, SCROW nRow, SCTAB nTab)
SC_DLLPUBLIC void GetFilterEntriesArea(SCCOL nCol, SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bCaseSens, ScFilterEntries &rFilterEntries)
Entries for Filter dialog.
void CopyTabProtection(SCTAB nTabSrc, SCTAB nTabDest)
void ReservePatternCount(SCTAB nTab, SCCOL nCol, SCSIZE nReserve)
SC_DLLPUBLIC const ScViewOptions & GetViewOptions() const
SC_DLLPUBLIC void DoEmptyBlock(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab)
void AddUnoObject(SfxListener &rObject)
void ResetCalcNotifications()
void SetChartListenerCollection(std::unique_ptr< ScChartListenerCollection >, bool bSetChartRangeLists)
std::unique_ptr< ScDetOpList > pDetOpList
SC_DLLPUBLIC bool CreateQueryParam(const ScRange &rRange, ScQueryParam &rQueryParam)
OUString GetUpperCellString(SCCOL nCol, SCROW nRow, SCTAB nTab)
void SetLanguage(LanguageType eLatin, LanguageType eCjk, LanguageType eCtl)
std::unique_ptr< ScExtDocOptions > pExtDocOptions
SC_DLLPUBLIC bool SetString(SCCOL nCol, SCROW nRow, SCTAB nTab, const OUString &rString, const ScSetStringParam *pParam=nullptr)
ScRangePairList * GetColNameRanges()
void GetFilterEntries(SCCOL nCol, SCROW nRow, SCTAB nTab, ScFilterEntries &rFilterEntries)
Get a list of unique strings to use in filtering criteria.
SC_DLLPUBLIC void SetGrammar(formula::FormulaGrammar::Grammar eGram)
bool HasAnyCalcNotification() const
SC_DLLPUBLIC bool HasColHeader(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab)
std::unique_ptr< ScExternalRefManager > pExternalRefMgr
void SetAllFormulasDirty(const sc::SetFormulaDirtyContext &rCxt)
bool UpdateOutlineRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bShow)
SC_DLLPUBLIC void SetViewOptions(const ScViewOptions &rOpt)
void GetDataEntries(SCCOL nCol, SCROW nRow, SCTAB nTab, std::vector< ScTypedStrData > &rStrings, bool bValidation=false)
Entries for selection list listbox (no numbers/formulas)
SC_DLLPUBLIC const ScRangeList * GetScenarioRanges(SCTAB nTab) const
void DoAutoOutline(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab)
void SC_DLLPUBLIC SetSortParam(const ScSortParam &rParam, SCTAB nTab)
SC_DLLPUBLIC formula::FormulaGrammar::Grammar GetGrammar() const
void Reorder(const sc::ReorderParam &rParam)
void MarkUsedExternalReferences()
std::unique_ptr< ScUnoRefList > pUnoRefUndoList
SC_DLLPUBLIC const ScRangeData * GetRangeAtBlock(const ScRange &rBlock, OUString &rName, bool *pSheetLocal=nullptr) const
void GetEmbedded(ScRange &rRange) const
bool HasCalcNotification(SCTAB nTab) const
SCSIZE GetPatternCount(SCTAB nTab, SCCOL nCol) const
SC_DLLPUBLIC ScDPObject * GetDPAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab) const
void EnableIdle(bool bDo)
void StopTemporaryChartLock()
SC_DLLPUBLIC void ApplyAttr(SCCOL nCol, SCROW nRow, SCTAB nTab, const SfxPoolItem &rAttr)
SC_DLLPUBLIC ScDocProtection * GetDocProtection() const
SC_DLLPUBLIC void GetLanguage(LanguageType &rLatin, LanguageType &rCjk, LanguageType &rCtl) const
SC_DLLPUBLIC ScOutlineTable * GetOutlineTable(SCTAB nTab, bool bCreate=false)
SCSIZE Query(SCTAB nTab, const ScQueryParam &rQueryParam, bool bKeepSub)
bool TestRemoveSubTotals(SCTAB nTab, const ScSubTotalParam &rParam)
SC_DLLPUBLIC SCCOL ClampToAllocatedColumns(SCTAB nTab, SCCOL nCol) const
void SetSheetEvents(SCTAB nTab, std::unique_ptr< ScSheetEvents > pNew)
void SetClipOptions(std::unique_ptr< ScClipOptions > pClipOptions)
bool HasSheetEventScript(SCTAB nTab, ScSheetEventId nEvent, bool bWithVbaEvents=false) const
LanguageType eCjkLanguage
sal_uLong GetLinkRefreshDelay(SCTAB nTab) const
void SetLink(SCTAB nTab, ScLinkMode nMode, const OUString &rDoc, const OUString &rFilter, const OUString &rOptions, const OUString &rTabName, sal_uLong nRefreshDelay)
SC_DLLPUBLIC void SetExtDocOptions(std::unique_ptr< ScExtDocOptions > pNewOptions)
void AddUnoListenerCall(const css::uno::Reference< css::util::XModifyListener > &rListener, const css::lang::EventObject &rEvent)
bool HasAnySheetEventScript(ScSheetEventId nEvent, bool bWithVbaEvents=false) const
std::unique_ptr< ScDBCollection > pDBCollection
SC_DLLPUBLIC void SetActiveScenario(SCTAB nTab, bool bActive)
SC_DLLPUBLIC void SetDocProtection(const ScDocProtection *pProtect)
SC_DLLPUBLIC bool HasRowHeader(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab)
std::map< SCTAB, ScSortParam > mSheetSortParams
std::unique_ptr< ScTemporaryChartLock > apTemporaryChartLock
OUString GetAutoFillPreview(const ScRange &rSource, SCCOL nEndX, SCROW nEndY)
bool TestCopyScenario(SCTAB nSrcTab, SCTAB nDestTab) const
bool SearchAndReplace(const SvxSearchItem &rSearchItem, SCCOL &rCol, SCROW &rRow, SCTAB &rTab, const ScMarkData &rMark, ScRangeList &rMatchedRanges, OUString &rUndoStr, ScDocument *pUndoDoc, bool &bMatchedRangesWereClamped)
void AutoFormat(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, sal_uInt16 nFormatNo, const ScMarkData &rMark)
static bool IsEmptyCellSearch(const SvxSearchItem &rSearchItem)
SC_DLLPUBLIC void DeleteAreaTab(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, SCTAB nTab, InsertDeleteFlags nDelFlag)
SC_DLLPUBLIC OUString GetString(SCCOL nCol, SCROW nRow, SCTAB nTab, const ScInterpreterContext *pContext=nullptr) const
void RemoveUnoObject(SfxListener &rObject)
void UpdateChartRef(UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, SCCOL nDx, SCROW nDy, SCTAB nDz)
SC_DLLPUBLIC OUString GetLinkDoc(SCTAB nTab) const
void UpdateDrawLanguages()
SC_DLLPUBLIC void SetTabProtection(SCTAB nTab, const ScTableProtection *pProtect)
bool IsLinked(SCTAB nTab) const
void RefreshDirtyTableColumnNames()
void SetDBCollection(std::unique_ptr< ScDBCollection > pNewDBCollection, bool bRemoveAutoFilter=false)
bool IsInExternalReferenceMarking() const
std::unique_ptr< ScDocProtection > pDocProtection
css::uno::Reference< css::script::vba::XVBAEventProcessor > mxVbaEvents
bool HasSubTotalCells(const ScRange &rRange)
SC_DLLPUBLIC sfx2::LinkManager * GetLinkManager()
void GetFilterSelCount(SCCOL nCol, SCROW nRow, SCTAB nTab, SCSIZE &nSelected, SCSIZE &nTotal)
std::unique_ptr< ScViewOptions > pViewOptions
SC_DLLPUBLIC void SetTabBgColor(SCTAB nTab, const Color &rColor)
OUString GetLinkFlt(SCTAB nTab) const
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 SetScenario(SCTAB nTab, bool bFlag)
bool IsClipboardSource() const
bool ValidRange(const ScRange &rRange) const
bool mbChangeReadOnlyEnabled
SC_DLLPUBLIC const SfxPoolItem * GetAttr(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich) const
bool HasAutoFilter(SCCOL nCol, SCROW nRow, SCTAB nTab)
ScRangePairListRef xColNameRanges
void GetScenarioFlags(SCTAB nTab, ScScenarioFlags &rFlags) const
SC_DLLPUBLIC void UpdateTranspose(const ScAddress &rDestPos, ScDocument *pClipDoc, const ScMarkData &rMark, ScDocument *pUndoDoc)
SC_DLLPUBLIC SCCOL GetMaxColCount() const
SC_DLLPUBLIC ScLkUpdMode GetLinkMode() const
SC_DLLPUBLIC const ScDocOptions & GetDocOptions() const
SC_DLLPUBLIC ScDPCollection * GetDPCollection()
std::unique_ptr< ScRangeName > pRangeName
void Sort(SCTAB nTab, const ScSortParam &rSortParam, bool bKeepQuery, bool bUpdateRefs, ScProgress *pProgress, sc::ReorderParam *pUndo)
Sort a range of data.
SC_DLLPUBLIC bool IsActiveScenario(SCTAB nTab) const
SC_DLLPUBLIC bool IsDefaultTabBgColor(SCTAB nTab) const
SC_DLLPUBLIC tools::Rectangle GetMMRect(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, bool bHiddenAsZero=true) const
void BroadcastUno(const SfxHint &rHint)
void GetFormulaEntries(ScTypedCaseStrSet &rStrings)
Entries for Formula auto input.
SC_DLLPUBLIC SCTAB GetTableCount() const
std::unique_ptr< ScChartListenerCollection > pChartListenerCollection
void SetEmbedded(const ScRange &rRange)
static void MirrorRectRTL(tools::Rectangle &rRect)
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
const ScRange & GetMarkArea() const
bool GetTableSelect(SCTAB nTab) const
void SetAreaTab(SCTAB nTab)
SCCOL GetColMerge() const
SCROW GetRowMerge() const
static ScDocument * GetClipDoc()
SC_DLLPUBLIC ScRangeData * findByIndex(sal_uInt16 i) const
::std::map< SCTAB, const ScRangeName * > TabNameCopyMap
Map that stores non-managed pointers to ScRangeName instances.
SC_DLLPUBLIC bool insert(ScRangeData *p, bool bReuseFreeIndex=true)
Insert object into set.
SC_DLLPUBLIC const ScRangeData * findByRange(const ScRange &rRange) const
const ScRange & GetRange(sal_uInt16 n) const
bool Contains(const ScAddress &) const
is Address& fully in Range?
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)
const OUString * GetScript(ScSheetEventId nEvent) const
static sal_Int32 GetVbaDocumentEventId(ScSheetEventId nEvent)
static sal_Int32 GetVbaSheetEventId(ScSheetEventId nEvent)
sheet protection state container
sal_uInt16 GetColWidth(SCCOL nCol, bool bHiddenAsZero=true) const
sal_uInt16 GetRowHeight(SCROW nRow, SCROW *pStartRow, SCROW *pEndRow, bool bHiddenAsZero=true) const
void SetMergedCells(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2)
bool CreateQueryParam(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScQueryParam &rQueryParam)
void Reorder(const sc::ReorderParam &rParam)
ScUnoListenerCalls stores notifications to XModifyListener that can't be processed during BroadcastUn...
List of RefUpdate changes made to UNO objects during ScUpdateRefHint broadcast.
void Invalidate(sal_uInt16 nId)
void SetPoolDefaultItem(const SfxPoolItem &)
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
static SAL_WARN_UNUSED_RESULT SfxViewShell * Current()
SvxSearchCmd GetCommand() const
const i18nutil::SearchOptions2 & GetSearchOptions() const
bool GetRowDirection() const
SvxSearchCellType GetCellType() const
Temporarily switch on/off auto calculation mode.
void InsertFileLink(sfx2::SvBaseLink &, SvBaseLinkObjectType nFileType, std::u16string_view rFileNm, const OUString *pFilterNm=nullptr, const OUString *pRange=nullptr)
constexpr ::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
ScDBDataPortion
Enum used to indicate which portion of the DBArea is to be considered.
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...
@ NOTE
Strings (and string results if InsertDeleteFlags::FORMULA is not set).
@ NOCAPTIONS
Sparklines in a cell.
constexpr OUStringLiteral STR_GLOBAL_RANGE_NAME
std::unique_ptr< sal_Int32[]> pData
constexpr Point convert(const Point &rPoint, o3tl::Length eFrom, o3tl::Length eTo)
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
constexpr TypedWhichId< ScMergeFlagAttr > ATTR_MERGE_FLAG(145)
constexpr TypedWhichId< ScMergeAttr > ATTR_MERGE(144)
constexpr TypedWhichId< SvxLanguageItem > ATTR_CTL_FONT_LANGUAGE(120)
constexpr TypedWhichId< SvxLanguageItem > ATTR_FONT_LANGUAGE(110)
constexpr TypedWhichId< SfxUInt32Item > ATTR_VALIDDATA(153)
constexpr TypedWhichId< SvxLanguageItem > ATTR_CJK_FONT_LANGUAGE(115)
This struct stores general clipboard parameters associated with a ScDocument instance created in clip...
std::vector< ScTypedStrData > maStrData
A pretty assertion that checks that the relevant bits in the @nFlags are not set on the document at e...
Each instance of this struct represents a single filtering criteria.
SC_DLLPUBLIC const ScQueryEntry & GetEntry(SCSIZE n) const
SC_DLLPUBLIC SCSIZE GetEntryCount() const
Context for reference update during shifting, moving or copying of cell ranges.
SCROW mnRowDelta
Amount and direction of movement in the row direction.
UpdateRefMode meMode
update mode - insert/delete, copy, or move.
SCCOL mnColDelta
Amount and direction of movement in the column direction.
SCTAB mnTabDelta
Amount and direction of movement in the sheet direction.
ScRange maRange
Range of cells that are about to be moved for insert/delete/move modes.
ScRange maSortRange
This sort range already takes into account the presence or absence of header row / column i....
std::set< ScTypedStrData, ScTypedStrData::LessCaseSensitive > ScTypedCaseStrSet