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;
295 return aBuf.makeStringAndClear();
323 if (bHeaderRangeChange)
332 if (bHeaderRangeChange)
369 if (nUpdateCol != -1)
374 if (rEntry.
nField >= nUpdateCol)
376 else if (rEntry.
nField >= nUpdateCol + nDifX2)
380 if (rEntry.
nField > nCol2)
396 SetArea( nTab, nCol1, nRow1, nCol2, nRow2 );
555 else if (nOldPos < nNewPos)
557 if (nTab > nOldPos && nTab <= nNewPos)
562 if (nTab >= nNewPos && nTab < nOldPos)
566 bool bChanged = (nTab != aRange.
aStart.
Tab());
598 GetArea( theTab1, theCol1, theRow1, theCol2, theRow2 );
600 SCCOL nOldCol1 = theCol1, nOldCol2 = theCol2;
604 nDy, nDz, theCol1, theRow1, theTab1, theCol2, theRow2, theTab2);
616 if (
HasAutoFilter() && theCol1 - nOldCol1 != theCol2 - nOldCol2)
617 MoveTo(theTab1, theCol1, theRow1, theCol2, theRow2, nCol1);
619 MoveTo( theTab1, theCol1, theRow1, theCol2, theRow2 );
629 aRangeAdvSource.
GetVars( theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 );
631 nCol1,nRow1,nTab1, nCol2,nRow2,nTab2, nDx,nDy,nDz,
632 theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 ) )
634 aRangeAdvSource.
aStart.
Set( theCol1,theRow1,theTab1 );
635 aRangeAdvSource.
aEnd.
Set( theCol2,theRow2,theTab2 );
700 SCCOL nDiff1 = nNewCol1 - nOldCol1;
701 SCCOL nDiff2 = nNewCol2 - nOldCol2;
702 if (nDiff1 == nDiff2)
705 ::std::vector<OUString> aNewNames;
706 ::std::vector<TableColumnAttributes> aNewAttributes;
715 size_t nHead =
static_cast<size_t>(::std::max( nCol1 + std::min<SCCOL>(nDx, 0) - nOldCol1, 0));
716 size_t nTail =
static_cast<size_t>(::std::max( nOldCol2 - nCol1 + 1, 0));
717 size_t n = nHead + nTail;
723 aNewAttributes.resize(
n);
725 for (
size_t i = 0;
i < nHead; ++
i)
740 "sc.core",
"ScDBData::AdjustTableColumnAttributes - invalidating column attributes/offsets");
769class TableColumnNameSearch
772 explicit TableColumnNameSearch( OUString aSearchName ) :
773 maSearchName(
std::move( aSearchName ))
777 bool operator()(
const OUString& rName )
const
783 OUString maSearchName;
790void SetTableColumnName( ::std::vector<OUString>& rVec,
size_t nIndex,
const OUString& rName,
size_t nCount )
796 aStr = rName + OUString::number( nCount);
803 if (std::none_of( rVec.begin(), rVec.end(), TableColumnNameSearch( aStr)))
815 ::std::vector<OUString> aNewNames;
817 bool bHaveEmpty =
false;
826 while ((pCell = aIter.
GetNext( nCol, nRow)) !=
nullptr)
830 const OUString& rStr = pCell->
getString( pDoc);
835 SetTableColumnName( aNewNames, nCol-
nStartCol, rStr, 0);
836 if (nLastColFilled < nCol-1)
839 nLastColFilled = nCol;
852 for (
size_t i=0,
n=aNewNames.size();
i <
n; ++
i)
854 if (aNewNames[
i].isEmpty())
860 SetTableColumnName( aNewNames,
i, rStr, 0);
869 OUString aColumn(
ScResId(STR_COLUMN));
870 for (
size_t i=0,
n=aNewNames.size();
i <
n; ++
i)
872 if (aNewNames[
i].isEmpty())
873 SetTableColumnName( aNewNames,
i, aColumn,
i+1);
908 ::std::vector<OUString>::const_iterator it(
930 if (rHint.
GetId() != SfxHintId::ScDataChanged)
932 const ScHint* pScHint =
static_cast<const ScHint*
>(&rHint);
936 assert(!
"ScDBData::Notify - how did we end up here without container?");
956 if (!aHeaderRange.
Contains( aHintAddress))
998 explicit FindByTable(
SCTAB nTab) : mnTab(nTab) {}
1000 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
1008class UpdateMoveTabFunc
1013 UpdateMoveTabFunc(
SCTAB nOld,
SCTAB nNew) : mnOldTab(nOld), mnNewTab(nNew) {}
1014 void operator() (std::unique_ptr<ScDBData>
const& p)
1016 p->UpdateMoveTab(mnOldTab, mnNewTab);
1021 std::u16string_view rOldName)
1035 size_t nLastIndex = rOldName.rfind(
'_');
1036 sal_Int32 nOldNumber = 1;
1038 if (nLastIndex != std::u16string_view::npos)
1041 std::u16string_view sLastPart(rOldName.substr(nLastIndex));
1048 if (OUString::number(nOldNumber) == sLastPart)
1049 aPrefix = rOldName.substr(0, nLastIndex);
1052 aPrefix = OUString::Concat(rOldName) +
"_";
1057 aPrefix = OUString::Concat(rOldName) +
"_";
1061 sNewName = aPrefix + OUString::number(++nOldNumber);
1062 }
while (namedDBs.
findByName(sNewName) !=
nullptr);
1074 mnCol(nCol),
mnRow(nRow), mnTab(nTab), mePortion(ePortion) {}
1076 bool operator() (std::unique_ptr<ScDBData>
const& p)
1078 return p->IsDBAtCursor(
mnCol,
mnRow, mnTab, mePortion);
1086 explicit FindByRange(
const ScRange& rRange) : mrRange(rRange) {}
1088 bool operator() (std::unique_ptr<ScDBData>
const& p)
1090 return p->IsDBAtArea(
1099 explicit FindByIndex(sal_uInt16 nIndex) :
mnIndex(
nIndex) {}
1100 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
1106class FindByUpperName
1108 const OUString& mrName;
1110 explicit FindByUpperName(
const OUString& rName) : mrName(rName) {}
1111 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
1113 return p->GetUpperName() == mrName;
1119 const OUString& mrName;
1121 explicit FindByName(
const OUString& rName) : mrName(rName) {}
1122 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
1124 return p->GetName() == mrName;
1132 explicit FindByPointer(
const ScDBData* pDBData) : mpDBData(pDBData) {}
1133 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
1135 return p.get() == mpDBData;
1158 for (
auto const& it : r.
m_DBs)
1161 std::unique_ptr<ScDBData>
pData(
p);
1173 p->SetContainer(
this);
1174 if (mrDoc.IsClipOrUndo())
1177 p->StartTableColumnNamesListener();
1178 if (!
p->AreTableColumnNamesDirty())
1184 maDirtyTableColumnNames.Join(
p->GetHeaderArea());
1190 p->RefreshTableColumnNames(
nullptr);
1196 return m_DBs.begin();
1206 return m_DBs.begin();
1216 DBsType::iterator itr = find_if(
1217 m_DBs.begin(), m_DBs.end(), FindByIndex(
nIndex));
1218 return itr == m_DBs.end() ? nullptr : itr->get();
1223 DBsType::iterator itr = find_if(
1224 m_DBs.begin(), m_DBs.end(), FindByUpperName(rName));
1225 return itr == m_DBs.end() ? nullptr : itr->get();
1231 m_DBs.begin(), m_DBs.end(), FindByUpperName(rName));
1236 DBsType::iterator itr = find_if(m_DBs.begin(), m_DBs.end(), FindByName(rName));
1237 return itr == m_DBs.end() ? nullptr : itr->get();
1243 if (!
pData->GetIndex())
1246 pair<DBsType::iterator, bool> r = m_DBs.insert(std::move(
pData));
1254 if (
p->HasImportParam() && !
p->HasImportSelection())
1256 p->SetRefreshHandler(
mrParent.GetRefreshHandler());
1257 p->SetRefreshControl(&mrDoc.GetRefreshTimerControlAddress());
1265 return m_DBs.erase(itr);
1270 return m_DBs.empty();
1275 return m_DBs.size();
1280 return ::comphelper::ContainerUniquePtrEquals(m_DBs, r.
m_DBs);
1285 return m_DBs.begin();
1295 return m_DBs.begin();
1306 DBsType::const_iterator itr = find_if(
1307 m_DBs.begin(), m_DBs.end(), FindByCursor(nCol, nRow, nTab, ePortion));
1308 return itr == m_DBs.end() ? nullptr : itr->get();
1313 DBsType::const_iterator itr = find_if(
1314 m_DBs.begin(), m_DBs.end(), FindByRange(rRange));
1315 return itr == m_DBs.end() ? nullptr : itr->get();
1320 FindByTable func(nTab);
1321 m_DBs.erase(std::remove_if(m_DBs.begin(), m_DBs.end(), func), m_DBs.end());
1330 ::std::unique_ptr<ScDBData> pNew(
new ScDBData(
1334 m_DBs.push_back(std::move(pNew));
1341 m_DBs.push_back(std::unique_ptr<ScDBData>(
p));
1346 return m_DBs.erase(itr);
1351 return m_DBs.empty();
1356 return any_of(m_DBs.begin(), m_DBs.end(), FindByPointer(
p));
1361 return ::comphelper::ContainerUniquePtrEquals(m_DBs, r.
m_DBs);
1370 m_DBs.reserve(r.
m_DBs.size());
1371 for (
auto const& it : r.
m_DBs)
1373 m_DBs.push_back(std::make_unique<ScDBData>(*it));
1381 rDoc(r.rDoc), nEntryIndex(r.nEntryIndex), maNamedDBs(r.maNamedDBs, *this), maAnonDBs(r.maAnonDBs) {}
1386 NamedDBs::DBsType::const_iterator itr = find_if(
1394 if (pNoNameData->
IsDBAtCursor(nCol,nRow,nTab,ePortion))
1410 NamedDBs::DBsType::iterator itr = find_if(
1418 if (pNoNameData->
IsDBAtCursor(nCol,nRow,nTab,ePortion))
1434 ScRange aRange(nCol1, nRow1, nTab, nCol2, nRow2, nTab);
1435 NamedDBs::DBsType::const_iterator itr = find_if(
1443 if (pNoNameData->
IsDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2))
1454 if (pNoNameData->
IsDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2))
1463 ScRange aRange(nCol1, nRow1, nTab, nCol2, nRow2, nTab);
1464 NamedDBs::DBsType::iterator itr = find_if(
1472 if (pNoNameData->
IsDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2))
1483 if (pNoNameData->
IsDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2))
1496 if (it->AreTableColumnNamesDirty())
1505 FindByTable func(nTab);
1507 ::std::vector<NamedDBs::DBsType::iterator>
v;
1510 for (; itr != itrEnd; ++itr)
1518 for (
const auto& rIter :
v)
1532 if (nTab1 == nTab2 && nDz == 0)
1535 if (
pData->UpdateReference(&
rDoc, eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2,
1536 nTab2, nDx, nDy, nDz))
1548 if (it->get()->UpdateReference(&
rDoc, eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2,
1549 nTab2, nDx, nDy, nDz))
1557 if (it->get()->UpdateReference(&
rDoc, eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2,
1558 nTab2, nDx, nDy, nDz))
1567 UpdateMoveTabFunc func(nOldPos, nNewPos);
1576 std::vector<const ScDBData*> aTemp;
1580 if (rxNamedDB->GetTab() != nOldPos)
1582 aTemp.emplace_back( rxNamedDB.get());
1584 for (
const auto& rxNamedDB : aTemp)
1586 const OUString
newName( lcl_IncrementNumberInNamedRange(
maNamedDBs, rxNamedDB->GetName()));
1587 std::unique_ptr<ScDBData> pDataCopy = std::make_unique<ScDBData>(
newName, *rxNamedDB);
1588 pDataCopy->UpdateMoveTab(nOldPos, nNewPos);
1589 pDataCopy->SetIndex(0);
1600 SCCOL nStartCol, nEndCol;
1601 SCROW nStartRow, nEndRow;
1602 rxNamedDB->
GetArea( nAreaTab, nStartCol, nStartRow, nEndCol, nEndRow );
1603 if ( nTab == nAreaTab && nCol+1 >= nStartCol && nCol <= nEndCol+1 &&
1604 nRow+1 >= nStartRow && nRow <= nEndRow+1 )
1606 if ( nCol < nStartCol || nCol > nEndCol || nRow < nStartRow || nRow > nEndRow )
1609 pNearData = rxNamedDB.get();
1612 return rxNamedDB.get();
1622 std::vector<ScDBData*> pTabData;
1625 if (rxNamedDB->GetTab() == nTab)
1626 pTabData.emplace_back(rxNamedDB.get());
1630 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.