30#include <document.hxx>
45using ::std::unique_ptr;
48using ::std::remove_if;
59 bool bByR,
bool bHasH,
bool bTotals) :
98 mpContainer (nullptr),
100 aUpper (rData.aUpper),
101 nTable (rData.nTable),
102 nStartCol (rData.nStartCol),
103 nStartRow (rData.nStartRow),
104 nEndCol (rData.nEndCol),
105 nEndRow (rData.nEndRow),
106 bByRow (rData.bByRow),
107 bHasHeader (rData.bHasHeader),
108 bHasTotals (rData.bHasTotals),
109 bDoSize (rData.bDoSize),
110 bKeepFmt (rData.bKeepFmt),
111 bStripData (rData.bStripData),
112 bIsAdvanced (rData.bIsAdvanced),
113 aAdvSource (rData.aAdvSource),
114 bDBSelection (rData.bDBSelection),
116 bAutoFilter (rData.bAutoFilter),
117 bModified (rData.bModified),
118 maTableColumnNames (rData.maTableColumnNames),
119 maTableColumnAttributes(rData.maTableColumnAttributes),
120 mbTableColumnNamesDirty(rData.mbTableColumnNamesDirty),
121 nFilteredRowCount (rData.nFilteredRowCount)
133 mpContainer (nullptr),
136 nTable (rData.nTable),
137 nStartCol (rData.nStartCol),
138 nStartRow (rData.nStartRow),
139 nEndCol (rData.nEndCol),
140 nEndRow (rData.nEndRow),
141 bByRow (rData.bByRow),
142 bHasHeader (rData.bHasHeader),
143 bHasTotals (rData.bHasTotals),
144 bDoSize (rData.bDoSize),
145 bKeepFmt (rData.bKeepFmt),
146 bStripData (rData.bStripData),
147 bIsAdvanced (rData.bIsAdvanced),
148 aAdvSource (rData.aAdvSource),
149 bDBSelection (rData.bDBSelection),
151 bAutoFilter (rData.bAutoFilter),
152 bModified (rData.bModified),
153 maTableColumnNames (rData.maTableColumnNames),
154 maTableColumnAttributes(rData.maTableColumnAttributes),
155 mbTableColumnNamesDirty (rData.mbTableColumnNamesDirty),
156 nFilteredRowCount (rData.nFilteredRowCount)
199 if (bHeaderRangeDiffers)
225 ScRefreshTimer::operator!=( rData )
235 if (!(aSort1 == aSort2))
241 if (!(aQuery1 == aQuery2))
247 if (!(aSubTotal1 == aSubTotal2))
253 return aImport1 == aImport2;
270 return aBuf.makeStringAndClear();
300 return aBuf.makeStringAndClear();
328 if (bHeaderRangeChange)
337 if (bHeaderRangeChange)
374 if (nUpdateCol != -1)
379 if (rEntry.
nField >= nUpdateCol)
381 else if (rEntry.
nField >= nUpdateCol + nDifX2)
385 if (rEntry.
nField > nCol2)
401 SetArea( nTab, nCol1, nRow1, nCol2, nRow2 );
560 else if (nOldPos < nNewPos)
562 if (nTab > nOldPos && nTab <= nNewPos)
567 if (nTab >= nNewPos && nTab < nOldPos)
571 bool bChanged = (nTab != aRange.
aStart.
Tab());
603 GetArea( theTab1, theCol1, theRow1, theCol2, theRow2 );
605 SCCOL nOldCol1 = theCol1, nOldCol2 = theCol2;
609 nDy, nDz, theCol1, theRow1, theTab1, theCol2, theRow2, theTab2);
621 if (
HasAutoFilter() && theCol1 - nOldCol1 != theCol2 - nOldCol2)
622 MoveTo(theTab1, theCol1, theRow1, theCol2, theRow2, nCol1);
624 MoveTo( theTab1, theCol1, theRow1, theCol2, theRow2 );
634 aRangeAdvSource.
GetVars( theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 );
636 nCol1,nRow1,nTab1, nCol2,nRow2,nTab2, nDx,nDy,nDz,
637 theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 ) )
639 aRangeAdvSource.
aStart.
Set( theCol1,theRow1,theTab1 );
640 aRangeAdvSource.
aEnd.
Set( theCol2,theRow2,theTab2 );
705 SCCOL nDiff1 = nNewCol1 - nOldCol1;
706 SCCOL nDiff2 = nNewCol2 - nOldCol2;
707 if (nDiff1 == nDiff2)
710 ::std::vector<OUString> aNewNames;
711 ::std::vector<TableColumnAttributes> aNewAttributes;
720 size_t nHead =
static_cast<size_t>(::std::max( nCol1 + std::min<SCCOL>(nDx, 0) - nOldCol1, 0));
721 size_t nTail =
static_cast<size_t>(::std::max( nOldCol2 - nCol1 + 1, 0));
722 size_t n = nHead + nTail;
728 aNewAttributes.resize(
n);
730 for (
size_t i = 0;
i < nHead; ++
i)
745 "sc.core",
"ScDBData::AdjustTableColumnAttributes - invalidating column attributes/offsets");
774class TableColumnNameSearch
777 explicit TableColumnNameSearch( OUString aSearchName ) :
778 maSearchName(
std::move( aSearchName ))
782 bool operator()(
const OUString& rName )
const
788 OUString maSearchName;
795void SetTableColumnName( ::std::vector<OUString>& rVec,
size_t nIndex,
const OUString& rName,
size_t nCount )
801 aStr = rName + OUString::number( nCount);
808 if (std::none_of( rVec.begin(), rVec.end(), TableColumnNameSearch( aStr)))
820 ::std::vector<OUString> aNewNames;
822 bool bHaveEmpty =
false;
831 while ((pCell = aIter.
GetNext( nCol, nRow)) !=
nullptr)
835 const OUString& rStr = pCell->
getString( pDoc);
840 SetTableColumnName( aNewNames, nCol-
nStartCol, rStr, 0);
841 if (nLastColFilled < nCol-1)
844 nLastColFilled = nCol;
857 for (
size_t i=0,
n=aNewNames.size();
i <
n; ++
i)
859 if (aNewNames[
i].isEmpty())
865 SetTableColumnName( aNewNames,
i, rStr, 0);
874 OUString aColumn(
ScResId(STR_COLUMN));
875 for (
size_t i=0,
n=aNewNames.size();
i <
n; ++
i)
877 if (aNewNames[
i].isEmpty())
878 SetTableColumnName( aNewNames,
i, aColumn,
i+1);
913 ::std::vector<OUString>::const_iterator it(
935 if (rHint.
GetId() != SfxHintId::ScDataChanged)
937 const ScHint* pScHint =
static_cast<const ScHint*
>(&rHint);
941 assert(!
"ScDBData::Notify - how did we end up here without container?");
961 if (!aHeaderRange.
Contains( aHintAddress))
1003 explicit FindByTable(
SCTAB nTab) : mnTab(nTab) {}
1005 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
1013class UpdateMoveTabFunc
1018 UpdateMoveTabFunc(
SCTAB nOld,
SCTAB nNew) : mnOldTab(nOld), mnNewTab(nNew) {}
1019 void operator() (std::unique_ptr<ScDBData>
const& p)
1021 p->UpdateMoveTab(mnOldTab, mnNewTab);
1026 std::u16string_view rOldName)
1040 size_t nLastIndex = rOldName.rfind(
'_');
1041 sal_Int32 nOldNumber = 1;
1043 if (nLastIndex != std::u16string_view::npos)
1046 std::u16string_view sLastPart(rOldName.substr(nLastIndex));
1053 if (OUString::number(nOldNumber) == sLastPart)
1054 aPrefix = rOldName.substr(0, nLastIndex);
1057 aPrefix = OUString::Concat(rOldName) +
"_";
1062 aPrefix = OUString::Concat(rOldName) +
"_";
1066 sNewName = aPrefix + OUString::number(++nOldNumber);
1067 }
while (namedDBs.
findByName(sNewName) !=
nullptr);
1079 mnCol(nCol),
mnRow(nRow), mnTab(nTab), mePortion(ePortion) {}
1081 bool operator() (std::unique_ptr<ScDBData>
const& p)
1083 return p->IsDBAtCursor(
mnCol,
mnRow, mnTab, mePortion);
1091 explicit FindByRange(
const ScRange& rRange) : mrRange(rRange) {}
1093 bool operator() (std::unique_ptr<ScDBData>
const& p)
1095 return p->IsDBAtArea(
1104 explicit FindByIndex(sal_uInt16 nIndex) :
mnIndex(
nIndex) {}
1105 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
1111class FindByUpperName
1113 const OUString& mrName;
1115 explicit FindByUpperName(
const OUString& rName) : mrName(rName) {}
1116 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
1118 return p->GetUpperName() == mrName;
1124 const OUString& mrName;
1126 explicit FindByName(
const OUString& rName) : mrName(rName) {}
1127 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
1129 return p->GetName() == mrName;
1137 explicit FindByPointer(
const ScDBData* pDBData) : mpDBData(pDBData) {}
1138 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
1140 return p.get() == mpDBData;
1163 for (
auto const& it : r.
m_DBs)
1166 std::unique_ptr<ScDBData>
pData(
p);
1178 p->SetContainer(
this);
1179 if (mrDoc.IsClipOrUndo())
1182 p->StartTableColumnNamesListener();
1183 if (!
p->AreTableColumnNamesDirty())
1189 maDirtyTableColumnNames.Join(
p->GetHeaderArea());
1195 p->RefreshTableColumnNames(
nullptr);
1201 return m_DBs.begin();
1211 return m_DBs.begin();
1221 DBsType::iterator itr = find_if(
1222 m_DBs.begin(), m_DBs.end(), FindByIndex(
nIndex));
1223 return itr == m_DBs.end() ? nullptr : itr->get();
1228 DBsType::iterator itr = find_if(
1229 m_DBs.begin(), m_DBs.end(), FindByUpperName(rName));
1230 return itr == m_DBs.end() ? nullptr : itr->get();
1236 m_DBs.begin(), m_DBs.end(), FindByUpperName(rName));
1241 DBsType::iterator itr = find_if(m_DBs.begin(), m_DBs.end(), FindByName(rName));
1242 return itr == m_DBs.end() ? nullptr : itr->get();
1248 if (!
pData->GetIndex())
1251 pair<DBsType::iterator, bool> r = m_DBs.insert(std::move(
pData));
1259 if (
p->HasImportParam() && !
p->HasImportSelection())
1261 p->SetRefreshHandler(
mrParent.GetRefreshHandler());
1262 p->SetRefreshControl(&mrDoc.GetRefreshTimerControlAddress());
1270 return m_DBs.erase(itr);
1275 return m_DBs.empty();
1280 return m_DBs.size();
1285 return ::comphelper::ContainerUniquePtrEquals(m_DBs, r.
m_DBs);
1290 return m_DBs.begin();
1300 return m_DBs.begin();
1311 DBsType::const_iterator itr = find_if(
1312 m_DBs.begin(), m_DBs.end(), FindByCursor(nCol, nRow, nTab, ePortion));
1313 return itr == m_DBs.end() ? nullptr : itr->get();
1318 DBsType::const_iterator itr = find_if(
1319 m_DBs.begin(), m_DBs.end(), FindByRange(rRange));
1320 return itr == m_DBs.end() ? nullptr : itr->get();
1325 FindByTable func(nTab);
1326 m_DBs.erase(std::remove_if(m_DBs.begin(), m_DBs.end(), func), m_DBs.end());
1335 ::std::unique_ptr<ScDBData> pNew(
new ScDBData(
1339 m_DBs.push_back(std::move(pNew));
1346 m_DBs.push_back(std::unique_ptr<ScDBData>(
p));
1351 return m_DBs.erase(itr);
1356 return m_DBs.empty();
1361 return any_of(m_DBs.begin(), m_DBs.end(), FindByPointer(
p));
1366 return ::comphelper::ContainerUniquePtrEquals(m_DBs, r.
m_DBs);
1375 m_DBs.reserve(r.
m_DBs.size());
1376 for (
auto const& it : r.
m_DBs)
1378 m_DBs.push_back(std::make_unique<ScDBData>(*it));
1386 rDoc(r.rDoc), nEntryIndex(r.nEntryIndex), maNamedDBs(r.maNamedDBs, *this), maAnonDBs(r.maAnonDBs) {}
1391 NamedDBs::DBsType::const_iterator itr = find_if(
1399 if (pNoNameData->
IsDBAtCursor(nCol,nRow,nTab,ePortion))
1415 NamedDBs::DBsType::iterator itr = find_if(
1423 if (pNoNameData->
IsDBAtCursor(nCol,nRow,nTab,ePortion))
1439 ScRange aRange(nCol1, nRow1, nTab, nCol2, nRow2, nTab);
1440 NamedDBs::DBsType::const_iterator itr = find_if(
1448 if (pNoNameData->
IsDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2))
1459 if (pNoNameData->
IsDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2))
1468 ScRange aRange(nCol1, nRow1, nTab, nCol2, nRow2, nTab);
1469 NamedDBs::DBsType::iterator itr = find_if(
1477 if (pNoNameData->
IsDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2))
1488 if (pNoNameData->
IsDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2))
1501 if (it->AreTableColumnNamesDirty())
1510 FindByTable func(nTab);
1512 ::std::vector<NamedDBs::DBsType::iterator>
v;
1515 for (; itr != itrEnd; ++itr)
1523 for (
const auto& rIter :
v)
1537 if (nTab1 == nTab2 && nDz == 0)
1540 if (
pData->UpdateReference(&
rDoc, eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2,
1541 nTab2, nDx, nDy, nDz))
1553 if (it->get()->UpdateReference(&
rDoc, eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2,
1554 nTab2, nDx, nDy, nDz))
1562 if (it->get()->UpdateReference(&
rDoc, eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2,
1563 nTab2, nDx, nDy, nDz))
1572 UpdateMoveTabFunc func(nOldPos, nNewPos);
1581 std::vector<const ScDBData*> aTemp;
1585 if (rxNamedDB->GetTab() != nOldPos)
1587 aTemp.emplace_back( rxNamedDB.get());
1589 for (
const auto& rxNamedDB : aTemp)
1591 const OUString
newName( lcl_IncrementNumberInNamedRange(
maNamedDBs, rxNamedDB->GetName()));
1592 std::unique_ptr<ScDBData> pDataCopy = std::make_unique<ScDBData>(
newName, *rxNamedDB);
1593 pDataCopy->UpdateMoveTab(nOldPos, nNewPos);
1594 pDataCopy->SetIndex(0);
1605 SCCOL nStartCol, nEndCol;
1606 SCROW nStartRow, nEndRow;
1607 rxNamedDB->
GetArea( nAreaTab, nStartCol, nStartRow, nEndCol, nEndRow );
1608 if ( nTab == nAreaTab && nCol+1 >= nStartCol && nCol <= nEndCol+1 &&
1609 nRow+1 >= nStartRow && nRow <= nEndRow+1 )
1611 if ( nCol < nStartCol || nCol > nEndCol || nRow < nStartRow || nRow > nEndRow )
1614 pNearData = rxNamedDB.get();
1617 return rxNamedDB.get();
1627 std::vector<ScDBData*> pTabData;
1630 if (rxNamedDB->GetTab() == nTab)
1631 pTabData.emplace_back(rxNamedDB.get());
1635 pTabData.emplace_back(pAnonDBData);
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 ...
BaseContainerNodeSharedPtr & mrParent
OUString uppercase(const OUString &rStr, sal_Int32 nPos, sal_Int32 nCount) const
void Set(SCCOL nCol, SCROW nRow, SCTAB nTab)
Stores global anonymous database ranges.
const ScDBData * findAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, ScDBDataPortion ePortion) const
bool has(const ScDBData *p) const
ScDBData * getByRange(const ScRange &rRange)
iterator erase(const iterator &itr)
void deleteOnTab(SCTAB nTab)
DBsType::const_iterator const_iterator
DBsType::iterator iterator
bool operator==(const AnonDBs &r) const
const ScDBData * findByRange(const ScRange &rRange) const
Stores global named database ranges.
DBsType::const_iterator const_iterator
NamedDBs(ScDBCollection &rParent, ScDocument &rDoc)
iterator erase(const iterator &itr)
void initInserted(ScDBData *p)
bool insert(std::unique_ptr< ScDBData > p)
Takes ownership of p and attempts to insert it into the collection.
bool operator==(const NamedDBs &r) const
ScDBData * findByName(const OUString &rName)
ScDBData * findByIndex(sal_uInt16 nIndex)
iterator findByUpperName2(const OUString &rName)
virtual ~NamedDBs() override
DBsType::iterator iterator
ScDBData * findByUpperName(const OUString &rName)
void CopyToTable(SCTAB nOldPos, SCTAB nNewPos)
ScDBData * GetDBNearCursor(SCCOL nCol, SCROW nRow, SCTAB nTab)
Link< Timer *, void > aRefreshHandler
void DeleteOnTab(SCTAB nTab)
const ScDBData * GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const
void RefreshDirtyTableColumnNames()
std::vector< ScDBData * > GetAllDBsFromTab(SCTAB nTab)
const ScDBData * GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, ScDBDataPortion ePortion) const
bool operator==(const ScDBCollection &r) const
void UpdateMoveTab(SCTAB nOldPos, SCTAB nNewPos)
void UpdateReference(UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, SCCOL nDx, SCROW nDy, SCTAB nDz)
sal_uInt16 nEntryIndex
counter for unique indices
ScDBCollection(ScDocument &rDocument)
Container base class to provide selected access for ScDBData.
ScRangeList & GetDirtyTableColumnNames()
ScRangeList maDirtyTableColumnNames
ScDocument & GetDocument() const
std::unique_ptr< ScSortParam > mpSortParam
void GetImportParam(ScImportParam &rImportParam) const
OUString GetTableColumnName(SCCOL nCol) const
Returns table column name if nCol is within column range and name is stored, else empty string.
bool HasAutoFilter() const
SC_DLLPUBLIC void SetTableColumnAttributes(::std::vector< TableColumnAttributes > &&rAttributes)
void MoveTo(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, SCCOL nUpdateCol=-1)
SC_DLLPUBLIC bool HasQueryParam() const
ScRange GetHeaderArea() const
Returns header row range if has headers, else invalid range.
bool IsDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const
std::unique_ptr< ScImportParam > mpImportParam
bool bModified
is set/cleared for/by(?) UpdateReference
void GetFilterSelCount(SCSIZE &nSelected, SCSIZE &nTotal)
void InvalidateTableColumnNames(bool bSwapToEmptyNames)
void AdjustTableColumnAttributes(UpdateRefMode eUpdateRefMode, SCCOL nDx, SCCOL nCol1, SCCOL nOldCol1, SCCOL nOldCol2, SCCOL nNewCol1, SCCOL nNewCol2)
sal_Int32 GetColumnNameOffset(const OUString &rName) const
Finds the column named rName and returns the corresponding offset within the table.
SC_DLLPUBLIC void RefreshTableColumnNames(ScDocument *pDoc)
Refresh/update the column names with the header row's cell contents.
void GetArea(SCTAB &rTab, SCCOL &rCol1, SCROW &rRow1, SCCOL &rCol2, SCROW &rRow2) const
SC_DLLPUBLIC void SetTableColumnNames(::std::vector< OUString > &&rNames)
SC_DLLPUBLIC bool GetAdvancedQuerySource(ScRange &rSource) const
bool UpdateReference(const ScDocument *pDoc, UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, SCCOL nDx, SCROW nDy, SCTAB nDz)
void CalcSaveFilteredCount(SCSIZE nNonFilteredRowCount)
bool IsDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, ScDBDataPortion ePortion) const
bool operator==(const ScDBData &rData) const
bool bDBSelection
not in Param: if selection, block update
void SetSubTotalParam(const ScSubTotalParam &rSubTotalParam)
const OUString aName
DBParam.
ScRange aAdvSource
source range
bool bAutoFilter
AutoFilter? (not saved)
void EndTableColumnNamesListener()
virtual SC_DLLPUBLIC ~ScDBData() override
void SetImportParam(const ScImportParam &rImportParam)
SC_DLLPUBLIC void SetAdvancedQuerySource(const ScRange *pSource)
bool HasSubTotalParam() const
SC_DLLPUBLIC void GetSortParam(ScSortParam &rSortParam) const
virtual void Notify(const SfxHint &rHint) override
void StartTableColumnNamesListener()
bool HasSortParam() const
std::unique_ptr< ScSubTotalParam > mpSubTotal
void SetModified(bool bMod)
SC_DLLPUBLIC void SetSortParam(const ScSortParam &rSortParam)
bool bIsAdvanced
QueryParam.
void UpdateFromSortParam(const ScSortParam &rSortParam)
Remember some more settings of ScSortParam, only to be called at anonymous DB ranges as it at least o...
std::unique_ptr< ScQueryParam > mpQueryParam
void UpdateMoveTab(SCTAB nOldPos, SCTAB nNewPos)
bool mbTableColumnNamesDirty
OUString GetOperations() const
SC_DLLPUBLIC void GetQueryParam(ScQueryParam &rQueryParam) const
::std::vector< TableColumnAttributes > maTableColumnAttributes
attributes of table columns
sal_uInt16 nIndex
unique index formulas
ScDBData & operator=(const ScDBData &rData)
SC_DLLPUBLIC void SetQueryParam(const ScQueryParam &rQueryParam)
ScDBDataContainerBase * mpContainer
bool HasImportParam() const
::std::vector< OUString > maTableColumnNames
names of table columns
void ExtendDataArea(const ScDocument &rDoc)
void GetSubTotalParam(ScSubTotalParam &rSubTotalParam) const
OUString GetSourceString() const
void SetArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2)
SC_DLLPUBLIC ScDBData(const OUString &rName, SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, bool bByR=true, bool bHasH=true, bool bTotals=false)
SC_DLLPUBLIC SCROW MaxRow() const
void StartListeningArea(const ScRange &rRange, bool bGroupListening, SvtListener *pListener)
bool IsClipOrUndo() const
SC_DLLPUBLIC ScDBData * GetAnonymousDBData(SCTAB nTab)
SC_DLLPUBLIC void GetDataArea(SCTAB nTab, SCCOL &rStartCol, SCROW &rStartRow, SCCOL &rEndCol, SCROW &rEndRow, bool bIncludeOld, bool bOnlyDown) const
Return the smallest area containing at least all contiguous cells having data.
SC_DLLPUBLIC void SetAnonymousDBData(SCTAB nTab, std::unique_ptr< ScDBData > pDBData)
static SC_DLLPUBLIC ::utl::TransliterationWrapper & GetTransliteration()
static SC_DLLPUBLIC const CharClass & getCharClass()
SCROW GetRowCount() const
const ScAddress & GetStartAddress() const
ScRefCellValue * GetNext(SCCOL &rCol, SCROW &rRow)
void Join(const ScRange &, bool bIsInList=false)
void GetVars(SCCOL &nCol1, SCROW &nRow1, SCTAB &nTab1, SCCOL &nCol2, SCROW &nRow2, SCTAB &nTab2) 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)
ScRefreshTimer & operator=(const ScRefreshTimer &r)
sal_Int32 compareString(const OUString &rStr1, const OUString &rStr2) const
bool isEqual(const OUString &rStr1, const OUString &rStr2) const
ScDBDataPortion
Enum used to indicate which portion of the DBArea is to be considered.
@ TOP_LEFT
top left cell of area
constexpr OUStringLiteral STR_DB_GLOBAL_NONAME
#define SAL_WARN_IF(condition, area, stream)
std::unique_ptr< sal_Int32[]> pData
OUString newName(std::u16string_view aNewPrefix, std::u16string_view aOldPrefix, std::u16string_view old_Name)
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
sal_Int32 toInt32(std::u16string_view str, sal_Int16 radix=10)
@ UR_INVALID
Some part of the reference became invalid.
@ UR_NOTHING
Reference not affected, no change at all.
OUString ScResId(TranslateId aId)
bool operator()(const std::unique_ptr< ScDBData > &left, const std::unique_ptr< ScDBData > &right) const
Each instance of this struct represents a single filtering criteria.
This is very similar to ScCellValue, except that it references the original value instead of copying ...
OUString getString(const ScDocument *pDoc) const
Retrieve string value.