26#include <osl/diagnose.h>
30#include <document.hxx>
38#include <progress.hxx>
40#include <printopt.hxx>
68 if (nTotalCount < 1000)
77 return pOuterProgress;
86void GetOptimalHeightsInColumn(
90 assert(nStartRow <= nEndRow);
102 sal_uInt16 nMinHeight = rHeights.
GetValue(nEndRow);
107 if (aRangeData.maValue < nMinHeight)
109 nPos = std::max<SCSIZE>(0, aRangeData.mnRow1);
116 for (
SCCOL nCol=0; nCol<maxCol; nCol++)
118 rCol[nCol].GetOptimalHeight(rCxt, nStartRow, nEndRow, nMinHeight, nMinStart);
122 nWeightedCount += rCol[nCol].GetWeightedCount(nStartRow, nEndRow);
123 pProgress->
SetState( nWeightedCount );
128struct OptimalHeightsFuncObjBase
130 virtual ~OptimalHeightsFuncObjBase() {}
131 virtual bool operator() (
SCROW nStartRow,
SCROW nEndRow, sal_uInt16 nHeight,
bool bApi) = 0;
134struct SetRowHeightOnlyFunc :
public OptimalHeightsFuncObjBase
137 explicit SetRowHeightOnlyFunc(
ScTable* pTab) :
141 virtual bool operator() (
SCROW nStartRow,
SCROW nEndRow, sal_uInt16 nHeight,
bool )
override
148struct SetRowHeightRangeFunc :
public OptimalHeightsFuncObjBase
158 virtual bool operator() (
SCROW nStartRow,
SCROW nEndRow, sal_uInt16 nHeight,
bool bApi)
override
164bool SetOptimalHeightsToRows(
166 OptimalHeightsFuncObjBase& rFuncObj,
170 bool bChanged =
false;
173 sal_uInt16 nLast = 0;
180 if ( nRegionEndRow > nEndRow )
181 nRegionEndRow = nEndRow;
182 SCSIZE nMoreRows = nRegionEndRow -
i;
195 for (
SCSIZE nInner = i; nInner <=
i + nMoreRows; ++nInner)
202 if (nRangeValue + nExtraHeight == nLast)
204 nRngEnd = std::min<SCSIZE>(i + nMoreRows, nRangeRowEnd);
205 nInner = nRangeRowEnd;
209 bChanged |= rFuncObj(nRngStart, nRngEnd, nLast, bApi);
224 bChanged |= rFuncObj(nRngStart, nRngEnd, nLast, bApi);
230 bChanged |= rFuncObj(nRngStart, nRngEnd, nLast, bApi);
238 bool bColInfo,
bool bRowInfo ) :
241 aCodeName( rNewName ),
242 nLinkRefreshDelay( 0 ),
244 aPageStyle(
ScResId(STR_STYLENAME_STANDARD) ),
249 mbCellAreaDirty( true ),
250 mbCellAreaEmpty( true ),
253 mnOptimalMinRowHeight(0),
261 nTableAreaVisibleX( 0 ),
262 nTableAreaVisibleY( 0 ),
265 pSortCollator( nullptr ),
271 maLOKFreezeCell(-1, -1, nNewTab),
275 bPageSizeValid(false),
276 bTableAreaValid(false),
277 bTableAreaVisibleValid(false),
279 bPendingRowHeights(false),
280 bCalcNotification(false),
281 bGlobalKeepQuery(false),
282 bPrintEntireSheet(true),
283 bActiveScenario(false),
284 mbPageBreaksValid(false),
285 mbForceBreaks(false),
331 aCol[nCol].FreeNotes();
356 return sal::static_int_cast<sal_Int64>(
reinterpret_cast<sal_IntPtr
>(
this));
421 const OUString& rDoc,
const OUString& rFlt,
const OUString& rOpt,
422 const OUString& rTab,
sal_uLong nRefreshDelay )
443 return aCol[nCol].GetOptimalColWidth( pDev,
nPPTX,
nPPTY, rZoomX, rZoomY,
451 bool bWidth,
bool bTotalSize,
bool bInPrintTwips )
460 return aCol[nCol].GetNeededSize
461 ( nRow, pDev,
nPPTX,
nPPTY, rZoomX, rZoomY, bWidth, aOptions,
nullptr, bInPrintTwips );
466 ScProgress* pOuterProgress, sal_uInt64 nProgressStart )
468 assert(nStartRow <= nEndRow);
471 "automatic OptimalHeight with Extra" );
484 GetOptimalHeightsInColumn(rCxt,
aCol, nStartRow, nEndRow, pProgress, nProgressStart);
486 SetRowHeightRangeFunc aFunc(
this, rCxt.
getPPTY());
487 bool bChanged = SetOptimalHeightsToRows(rCxt, aFunc,
pRowFlags.get(), nStartRow, nEndRow, bApi);
489 if ( pProgress != pOuterProgress )
499 ScProgress* pOuterProgress, sal_uInt64 nProgressStart )
502 "automatic OptimalHeight with Extra" );
511 GetOptimalHeightsInColumn(rCxt,
aCol, nStartRow, nEndRow, pProgress, nProgressStart);
513 SetRowHeightOnlyFunc aFunc(
this);
515 SetOptimalHeightsToRows(rCxt, aFunc,
pRowFlags.get(), nStartRow, nEndRow,
true);
517 if ( pProgress != pOuterProgress )
543 if (
aCol[
i].HasCellNotes() )
545 SCROW maxNoteRow =
aCol[
i].GetCellNotesMaxRow();
546 if (maxNoteRow >= nMaxY)
557 if (
aCol[
i].HasSparklines())
559 SCROW maxSparklineRow =
aCol[
i].GetSparklinesMaxRow();
560 if (maxSparklineRow >= nMaxY)
563 nMaxY = maxSparklineRow;
615 bool bSkipEmpty =
SC_MOD()->GetPrintOptions().GetSkipEmpty();
630 if (bNotes &&
aCol[
i].HasCellNotes() )
632 SCROW maxNoteRow =
aCol[
i].GetCellNotesMaxRow();
633 if (maxNoteRow >= nMaxY)
644 if (
aCol[
i].HasSparklines())
646 SCROW maxSparklineRow =
aCol[
i].GetSparklinesMaxRow();
647 if (maxSparklineRow >= nMaxY)
650 nMaxY = maxSparklineRow;
661 SCCOL nMaxDataX = nMaxX;
668 if (
aCol[
i].GetLastVisibleAttr( nLastRow, bSkipEmpty ))
672 if (nLastRow > nMaxY)
685 if ( nMaxX < nMaxDataX )
689 else if ( nMaxX > nMaxDataX )
691 SCCOL nAttrStartX = nMaxDataX + 1;
692 while ( nAttrStartX < (
aCol.
size()-1) )
694 SCCOL nAttrEndX = nAttrStartX;
700 nMaxX = nAttrStartX - 1;
704 while ( nMaxX > nMaxDataX && !
aCol[nMaxX].GetLastVisibleAttr( nDummyRow, bSkipEmpty ) )
708 nAttrStartX = nAttrEndX + 1;
718 SCCOL& rEndCol )
const
726 if (
aCol[
i].HasVisibleAttrIn( nStartRow, nEndRow ))
736 while ( nMaxX>0 &&
aCol[nMaxX].IsVisibleAttrEqual(
aCol[nMaxX+1], nStartRow, nEndRow) )
748 else if (
aCol[
i].HasSparklines())
763 SCROW& rEndRow,
bool bNotes )
const
769 bool bSkipEmpty =
SC_MOD()->GetPrintOptions().GetSkipEmpty();
774 if (
aCol[
i].GetLastVisibleAttr( nLastRow, bSkipEmpty ))
777 if (nLastRow > nMaxY)
791 if (bNotes &&
aCol[
i].HasCellNotes() )
793 SCROW maxNoteRow =
aCol[
i].GetCellNotesMaxRow();
794 if (maxNoteRow > nMaxY)
800 if (
aCol[
i].HasSparklines())
802 SCROW maxNoteRow =
aCol[
i].GetSparklinesMaxRow();
803 if (maxNoteRow > nMaxY)
825 if (
aCol[
i].GetFirstVisibleAttr( nFirstRow ))
830 if (nFirstRow < nMinY)
845 bool bDatFound =
false;
850 if (!bDatFound &&
i<nMinX)
852 bFound = bDatFound =
true;
857 if (
aCol[
i].HasCellNotes() )
859 SCROW minNoteRow =
aCol[
i].GetCellNotesMinRow();
860 if (minNoteRow <= nMinY)
871 if (
aCol[
i].HasSparklines())
873 SCROW minSparkline =
aCol[
i].GetSparklinesMinRow();
874 if (minSparkline <= nMinY)
877 nMinY = minSparkline;
892 bool bIncludeOld,
bool bOnlyDown )
const
902 rStartCol = std::min<SCCOL>( rStartCol,
aCol.
size()-1 );
903 rEndCol = std::min<SCCOL>( rEndCol,
aCol.
size()-1 );
908 bool bBottom =
false;
909 bool bChanged =
false;
912 std::vector< sc::ColumnBlockConstPosition > blockPos( rEndCol + 1 );
913 for(
SCCOL i = 0;
i <= rEndCol; ++
i )
914 aCol[
i ].InitBlockPosition( blockPos[
i ] );
922 SCROW nStart = rStartRow;
923 SCROW nEnd = rEndRow;
924 if (nStart>0) --nStart;
930 assert(
int( blockPos.size()) == rEndCol + 1 );
932 blockPos.resize( blockPos.size() + 1 );
933 aCol[ rEndCol ].InitBlockPosition( blockPos[ rEndCol ] );
948 SCROW nTest = rStartRow-1;
949 bool needExtend =
false;
950 for (
SCCOL i = rStartCol;
i<=rEndCol && !needExtend;
i++)
951 if (
aCol[
i].HasDataAt(blockPos[
i], nTest))
964 SCROW nTest = rEndRow+1;
965 bool needExtend =
false;
966 for (
SCCOL i = rStartCol;
i<=rEndCol && !needExtend;
i++)
967 if (
aCol[
i].HasDataAt(blockPos[
i ], nTest))
979 if ( !bIncludeOld && !bOnlyDown )
982 while ( rStartCol < rEndCol && rStartCol < (
aCol.
size()-1) &&
aCol[rStartCol].IsEmptyData(rStartRow,rEndRow) )
986 while ( rEndCol > 0 && rStartCol < rEndCol &&
aCol[rEndCol].
IsEmptyData(rStartRow,rEndRow) )
994 for (
SCCOL i = rStartCol;
i<=rEndCol && bShrink;
i++)
995 if (
aCol[
i].HasDataAt(rStartRow))
999 }
while (bShrink && rStartRow <
rDocument.
MaxRow() && rStartRow < rEndRow);
1005 if ( !bBottom && rEndRow > 0 && rStartRow < rEndRow )
1008 if (nLastDataRow < rEndRow)
1009 rEndRow = std::max( rStartRow, nLastDataRow);
1021 nCol2 = std::min<SCCOL>( nCol2,
aCol.
size()-1 );
1025 SCCOL nFirstNonEmptyCol = -1, nLastNonEmptyCol = -1;
1026 SCROW nRowStart = nRow2, nRowEnd = nRow1;
1028 for (
SCCOL nCol = nCol1; nCol <= nCol2; ++nCol )
1030 SCROW nRowStartThis = nRow1, nRowEndThis = nRow2;
1031 bool bTrimmed =
aCol[nCol].TrimEmptyBlocks(nRowStartThis, nRowEndThis);
1034 if ( nFirstNonEmptyCol == -1 )
1035 nFirstNonEmptyCol = nCol;
1036 nLastNonEmptyCol = nCol;
1038 nRowStart = std::min<SCROW>(nRowStart, nRowStartThis);
1039 nRowEnd = std::max<SCROW>(nRowEnd, nRowEndThis);
1043 if ( nFirstNonEmptyCol == -1 )
1046 assert(nFirstNonEmptyCol <= nLastNonEmptyCol);
1047 assert(nRowStart <= nRowEnd);
1056 SCCOL& rEndCol,
SCROW& rEndRow,
bool bColumnsOnly,
bool bStickyTopRow,
bool bStickyLeftCol,
1059 rStartCol = std::min<SCCOL>( rStartCol,
aCol.
size()-1 );
1087 while (rStartCol < rEndCol)
1091 if (pDataAreaExtras && pDataAreaExtras->
mnEndCol < rEndCol)
1095 &&
aCol[rEndCol].GetPatternCount( rStartRow, rEndRow) > 1
1096 &&
aCol[rEndCol].HasVisibleAttrIn( rStartRow, rEndRow)) ||
1098 && !
aCol[rEndCol].IsNotesEmptyBlock( rStartRow, rEndRow)) ||
1100 && !
aCol[rEndCol].IsDrawObjectsEmptyBlock( rStartRow, rEndRow)))
1101 pDataAreaExtras->
mnEndCol = rEndCol;
1111 if (!bStickyLeftCol)
1113 while (rStartCol < rEndCol)
1117 if (pDataAreaExtras && pDataAreaExtras->
mnStartCol > rStartCol)
1121 &&
aCol[rStartCol].GetPatternCount( rStartRow, rEndRow) > 1
1122 &&
aCol[rStartCol].HasVisibleAttrIn( rStartRow, rEndRow)) ||
1124 && !
aCol[rStartCol].IsNotesEmptyBlock( rStartRow, rEndRow)) ||
1126 && !
aCol[rStartCol].IsDrawObjectsEmptyBlock( rStartRow, rEndRow)))
1140 while (rStartRow < rEndRow)
1143 if (0 <= nLastDataRow && nLastDataRow < rEndRow)
1145 rEndRow = std::max( rStartRow, nLastDataRow);
1154 while (rStartRow < rEndRow)
1156 bool bFound =
false;
1157 for (
SCCOL i=rStartCol;
i<=rEndCol && !bFound;
i++)
1159 if (
aCol[
i].HasDataAt(rStartRow, pDataAreaExtras))
1173 return rStartCol != rEndCol || (bColumnsOnly ?
1174 !
aCol[rStartCol].IsEmptyData( rStartRow, rEndRow) :
1175 (rStartRow != rEndRow ||
1176 aCol[rStartCol].HasDataAt( rStartRow, pDataAreaExtras)));
1184 nCol2 = std::min<SCCOL>( nCol2,
aCol.
size() - 1 );
1186 SCROW nNewLastRow = 0;
1187 for (
SCCOL i = nCol1;
i <= nCol2; ++
i)
1189 SCROW nThis =
aCol[
i].GetLastDataPos(nLastRow, pDataAreaExtras);
1190 if (nNewLastRow < nThis)
1191 nNewLastRow = nThis;
1209 SCCOL nStartColOrig = nStartCol;
1210 SCCOL nEndColOrig = nEndCol;
1211 nStartCol = std::min<SCCOL>( nStartCol,
aCol.
size()-1 );
1212 nEndCol = std::min<SCCOL>( nEndCol,
aCol.
size()-1 );
1215 if ( nStartColOrig != nStartCol )
1217 static_cast<SCSIZE>(nEndRow - nStartRow + 1) :
1218 static_cast<SCSIZE>(nEndColOrig - nStartColOrig + 1) );
1220 SCSIZE nGapRight =
static_cast<SCSIZE>(nEndColOrig - nEndCol);
1226 for (nCol = nStartCol; nCol <= nEndCol; nCol++)
1232 while ((nCol >= nStartCol) &&
1233 aCol[nCol].IsEmptyData(nStartRow, nEndRow))
1243 while ((nCol <= nEndCol) &&
aCol[nCol].IsEmptyData(nStartRow, nEndRow))
1251 if ( nCol > nEndCol )
1263 nEndCol = std::min<SCCOL>( nEndCol,
aCol.
size()-1 );
1265 for (
SCCOL i=nStartCol;
i<=nEndCol;
i++)
1266 if (
aCol[
i].HasDataAt(nRow))
1273 rStartCol = std::min<SCCOL>( rStartCol,
aCol.
size()-1 );
1274 rEndCol = std::min<SCCOL>( rEndCol,
aCol.
size()-1 );
1276 while ( rStartCol<rEndCol &&
aCol[rStartCol].
IsEmptyData(rStartRow,rEndRow) )
1279 while ( rStartCol<rEndCol &&
aCol[rEndCol].
IsEmptyData(rStartRow,rEndRow) )
1282 while ( rStartRow<rEndRow &&
IsEmptyLine(rStartRow, rStartCol, rEndCol) )
1287 SCROW lastDataPos = 0;
1288 for (
SCCOL i=rStartCol;
i<=rEndCol;
i++)
1291 rEndRow = std::min(rEndRow, lastDataPos);
1293 rEndRow = std::max(rStartRow, rEndRow);
1316 return std::max<SCCOL>(0, nCol);
1327 if(nCol >= nLastCol)
1344 if(
aCol[nCol].HasVisibleDataAt(nRow))
1347 while(nCol < nLastCol);
1359 if ( nCol > nLastCol )
1360 nCol = nLastCol + 1;
1369 nCol = nStartCol -1;
1374 if(
aCol[nCol].HasVisibleDataAt(nRow))
1389 SCCOL nNewCol = rCol;
1390 bool bThere = ( nNewCol <= nLastCol ) &&
aCol[nNewCol].HasVisibleDataAt(rRow);
1401 if( nNextCol <= nLastCol &&
aCol[nNextCol].HasVisibleDataAt(rRow) )
1403 bool bFound =
false;
1408 if( nNextCol <= nLastCol &&
aCol[nNextCol].HasVisibleDataAt(rRow) )
1433 if ( rCol <= nLastCol )
1446 bool bMarked,
bool bUnprotected )
const
1464 if (bMarked || bUnprotected)
1483 const bool bMarked,
const bool bSheetProtected )
const
1490 if ( rRow > nUsedY )
1505 if ( bRowHidden || bOverlapped )
1519 bool bMarked,
bool bUnprotected,
const ScMarkData& rMark,
SCCOL nTabStartCol )
const
1526 if ( bUnprotected && !bSheetProtected )
1527 bUnprotected =
false;
1529 SCCOL nCol = rCol + nMovX;
1530 SCROW nRow = rRow + nMovY;
1532 SCCOL nStartCol, nEndCol;
1533 SCROW nStartRow, nEndRow;
1556 else if (bUnprotected)
1584 rCol = nTabStartCol;
1589 if ( nMovY && (bMarked || bUnprotected))
1593 const bool bUp = (nMovY < 0);
1594 const SCCOL nColAdd = (bUp ? -1 : 1);
1615 nCol = nTabStartCol;
1619 while (
SkipRow( nCol, nRow, nMovY, rMark, bUp, nEndRow, bMarked, bSheetProtected ))
1622 sal_uInt16 nWrap = 0;
1623 while ( nRow < nStartRow || nRow > nEndRow )
1627 while (nStartCol <= nCol && nCol <= nEndCol &&
ValidCol(nCol) &&
ColHidden(nCol))
1630 if (nCol < nStartCol)
1637 else if (nCol > nEndCol)
1644 if (nRow < nStartRow)
1646 else if (nRow > nEndRow)
1652 while (
SkipRow( nCol, nRow, nMovY, rMark, bUp, nEndRow, bMarked, bSheetProtected ))
1658 if ( nMovX && ( bMarked || bUnprotected ) )
1661 if (nCol < nStartCol)
1665 if (nRow < nStartRow)
1676 if ( !
ValidNextPos(nCol, nRow, rMark, bMarked, bUnprotected) )
1678 const SCCOL nColCount = nEndCol - nStartCol + 1;
1679 std::unique_ptr<SCROW[]> pNextRows(
new SCROW[nColCount]);
1681 const bool bUp = (nMovX < 0);
1682 const SCROW nRowAdd = (bUp ? -1 : 1);
1683 sal_uInt16 nWrap = 0;
1687 for (
SCCOL i = 0;
i < nColCount; ++
i)
1688 pNextRows[
i] = (
i + nStartCol > nCol) ? (nRow + nRowAdd) : nRow;
1692 for (
SCCOL i = 0;
i < nColCount; ++
i)
1693 pNextRows[
i] = (
i + nStartCol < nCol) ? (nRow + nRowAdd) : nRow;
1697 SCROW nNextRow = pNextRows[nCol - nStartCol] + nRowAdd;
1701 nNextRow = ( nCol <= nLastCol ) ?
aCol[nCol].GetNextUnprotected( nNextRow, bUp ) :
1703 pNextRows[nCol - nStartCol] = nNextRow;
1707 SCROW nMaxRow = nStartRow - 1;
1708 for (
SCCOL i = 0;
i < nColCount; ++
i)
1710 if (pNextRows[
i] >= nMaxRow)
1712 nMaxRow = pNextRows[
i];
1713 nCol =
i + nStartCol;
1718 if ( nRow < nStartRow )
1724 for (
SCCOL i = 0;
i < nColCount; ++
i)
1725 pNextRows[
i] = nEndRow;
1730 SCROW nMinRow = nEndRow + 1;
1731 for (
SCCOL i = 0;
i < nColCount; ++
i)
1733 if (pNextRows[
i] < nMinRow)
1735 nMinRow = pNextRows[
i];
1736 nCol =
i + nStartCol;
1741 if ( nRow > nEndRow )
1747 for (
SCCOL i = 0;
i < nColCount; ++
i)
1748 pNextRows[
i] = nStartRow;
1752 while ( !
ValidNextPos(nCol, nRow, rMark, bMarked, bUnprotected) );
1778 std::pair<sc::CellStoreType::const_iterator,size_t> aPos = rCells.position(nStart);
1779 sc::CellStoreType::const_iterator it = aPos.first;
1780 SCROW nTestRow = nStart;
1784 nTestRow += it->
size - aPos.second;
1786 if (it == rCells.end())
1794 if (nTestRow <= nEnd)
1819 if ( !(
nTab >= nTab1 &&
nTab <= nTab2 && nDz == 0) )
1823 if ( eUpdateRefMode !=
URM_COPY && pDrawLayer )
1827 nCol1 = sal::static_int_cast<SCCOL>( nCol1 - nDx );
1828 nRow1 = sal::static_int_cast<SCROW>( nRow1 - nDy );
1829 nCol2 = sal::static_int_cast<SCCOL>( nCol2 - nDx );
1830 nRow2 = sal::static_int_cast<SCROW>( nRow2 - nDy );
1832 pDrawLayer->
MoveArea(
nTab, nCol1,nRow1, nCol2,nRow2, nDx,nDy,
1833 (eUpdateRefMode ==
URM_INSDEL), bUpdateNoteCaptionPos );
1840 bool bUpdated =
false;
1856 bUpdated |=
aCol[
col].UpdateReference(rCxt, pUndoDoc);
1861 bUpdated |=
aCol[
col].UpdateReference(rCxt, pUndoDoc);
1868 UpdateDrawRef( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz, bUpdateNoteCaptionPos );
1870 if (
nTab >= nTab1 &&
nTab <= nTab2 && nDz == 0 )
1878 bool bRecalcPages =
false;
1882 nSCol = rPrintRange.aStart.Col();
1883 nSRow = rPrintRange.aStart.Row();
1884 nECol = rPrintRange.aEnd.Col();
1885 nERow = rPrintRange.aEnd.Row();
1889 nCol1,nRow1,
nTab, nCol2,nRow2,
nTab,
1891 nSCol,nSRow,nSTab, nECol,nERow,nETab ) )
1893 rPrintRange =
ScRange( nSCol, nSRow, 0, nECol, nERow, 0 );
1894 bRecalcPages =
true;
1907 nCol1,nRow1,
nTab, nCol2,nRow2,
nTab,
1909 nSCol,nSRow,nSTab, nECol,nERow,nETab ) )
1912 bRecalcPages =
true;
1927 nCol1,nRow1,
nTab, nCol2,nRow2,
nTab,
1929 nSCol,nSRow,nSTab, nECol,nERow,nETab ) )
1932 bRecalcPages =
true;
1960 for (
auto const & rpCol :
aCol)
1961 rpCol->UpdateTranspose( rSource, rDest, pUndoDoc );
1966 for (
auto const & rpCol :
aCol)
1967 rpCol->UpdateGrow( rArea, nGrowX, nGrowY );
2048 aCol[
i].UpdateMoveTab(rCxt, nTabNo);
2060 aCol[
i].UpdateCompile( bForceIfNameInUse );
2083 OSL_FAIL(
"ExtendPrintArea: No ColInfo or RowInfo");
2088 double nPPTX = aPix1000.
X() / 1000.0;
2089 double nPPTY = aPix1000.
Y() / 1000.0;
2106 for (
SCCOL j =
i; j <= nLastCol; ++j)
2122 for (
SCCOL nCol = rEndCol; nCol >= 0; --nCol)
2136 for (
SCCOL nDataCol = nCol; 0 <= nDataCol && nDataCol >= aColData.
mnCol1; --nDataCol)
2138 SCCOL nPrintCol = nDataCol;
2147 SCCOL nNewCol = nDataCol;
2154 if (nNewCol > nPrintCol)
2155 nPrintCol = nNewCol;
2156 aCell = aIter.
next();
2159 if (nPrintCol > rEndCol)
2161 rEndCol = nPrintCol;
2198 nRow, pDev,
nPPTX,
nPPTY, aZoom, aZoom,
true, aOptions,
nullptr );
2216 if ( eHorJust == SvxCellHorJustify::Center )
2221 bool bRight = ( eHorJust == SvxCellHorJustify::Right );
2229 SCCOL nNewCol = rCol;
2232 auto nNextCol = nNewCol + 1;
2233 bool bNextEmpty =
true;
2237 bNextEmpty = aNextCell.
isEmpty();
2256 explicit SetTableIndex(
SCTAB nTab) : mnTab(nTab) {}
2258 void operator() (
ScRange& rRange)
const
2366 mrRowSegs(rRowSegs),
2368 mnCurRow(ROW_NOT_FOUND),
2369 mnUBound(ROW_NOT_FOUND)
2375 if (nRow > mrDocument.MaxRow())
2377 mnCurRow = ROW_NOT_FOUND;
2382 if (!mrRowSegs.getRangeData(nRow,
aData))
2384 mnCurRow = ROW_NOT_FOUND;
2392 mnUBound =
aData.mnRow2;
2398 mnCurRow =
aData.mnRow2 + 1;
2399 mnUBound = mnCurRow;
2400 if (mnCurRow > mrDocument.MaxRow())
2403 mnCurRow = ROW_NOT_FOUND;
2408 maCell = mrColumn.GetCellValue(mnCurRow);
2409 if (!maCell.isEmpty())
2419 if (mnCurRow == ROW_NOT_FOUND)
2422 while (mrColumn.GetNextDataPos(mnCurRow))
2424 if (mnCurRow > mnUBound)
2428 if (!mrRowSegs.getRangeData(mnCurRow,
aData))
2430 mnCurRow = ROW_NOT_FOUND;
2438 mnCurRow = mnUBound =
aData.mnRow2;
2443 mnUBound =
aData.mnRow2;
2446 maCell = mrColumn.GetCellValue(mnCurRow);
2447 if (!maCell.isEmpty())
2451 mnCurRow = ROW_NOT_FOUND;
2467 pNew->SetKey(nMax+1);
2476 return SvtScriptType::NONE;
2478 return aCol[nCol].GetScriptType(nRow);
2493 return SvtScriptType::NONE;
2495 sc::CellStoreType::iterator itr =
aCol[nCol].maCells.
begin();
2506 return aCol[nCol].ResolveStaticReference(nRow);
2511 if (nCol2 < nCol1 || nRow2 < nRow1)
2524 for (
SCCOL nCol = nCol1; nCol <= nMaxCol; ++nCol)
2542 return aCol[nCol].FetchVectorRefArray(nRow1, nRow2);
2548 assert( nRow2 >= nRow1 );
2550 return aCol[nCol].AssertNoInterpretNeeded(nRow1, nRow2);
2567 return aCol[nCol].HandleRefArrayForParallelism(nRow1, nRow2, mxGroup);
2575 return aCol[nCol].GetCellValue(nRow);
2583 return aCol[nCol].GetCellValue(rBlockPos, nRow);
2591 return aCol[nCol].GetBroadcaster(nRow);
2600 aCol[nCol].DeleteBroadcasters(rBlockPos, nRow1, nRow2);
2606 col->DeleteEmptyBroadcasters();
2613 for (
SCCOL nCol = nCol1; nCol <= nCol2; ++nCol, ++nMatCol)
2620 for (
SCCOL nCol = nCol1; nCol <= nCol2; ++nCol)
2627 bool allInterpreted =
true;
2628 for (
SCCOL nCol = nCol1; nCol <= nCol2; ++nCol)
2630 allInterpreted =
false;
2631 return allInterpreted;
2639 aCol[nCol].SetFormulaResults(nRow, pResults, nLen);
2645 unsigned nThisThread,
unsigned nThreadsTotal)
2650 size_t nLen = nRowEnd - nRowStart + 1;
2652 for (
SCCOL nCurrCol = nColStart; nCurrCol <= nColEnd; ++nCurrCol)
2654 aCol[nCurrCol].CalculateInThread( rContext, nRowStart, nLen, nOffset, nThisThread, nThreadsTotal );
2664 for (
SCCOL nCurrCol = nColStart; nCurrCol <= nColEnd; ++nCurrCol)
2668#if DUMP_COLUMN_STORAGE
2674 aCol[nCol].DumpColumnStorage();
2683 return aCol[nCol].GetBroadcaster(nRow);
2712 if (nColEnd < nColBegin)
2714 assert( nColEnd >= 0 && nColEnd <=
GetDoc().MaxCol());
2732 if (nColEnd < nColBegin)
2734 assert( nColBegin >= 0 && nColBegin <=
GetDoc().MaxCol());
2735 assert( nColEnd >= 0 && nColEnd <=
GetDoc().MaxCol());
2748 for (
SCCOL i = aOldColSize;
i <= nScCol;
i++)
const SCROW SCROW_REPEAT_NONE
const SCCOL SCCOL_REPEAT_NONE
const SCCOL INITIALCOLCOUNT
const SCCOL SC_TABSTART_NONE
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)
OUString uppercase(const OUString &rStr, sal_Int32 nPos, sal_Int32 nCount) const
SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point &rLogicPt) const
constexpr tools::Long Y() const
constexpr tools::Long X() const
void Set(SCCOL nCol, SCROW nRow, SCTAB nTab)
The data type represents bits, manageable by bitwise operations.
ScColumnVector::const_iterator begin() const
const ScColumn & back() const
void resize(ScSheetLimits const &, const size_t aNewSize)
void DeleteRow(SCROW nStartRow, SCSIZE nSize)
void InitAttrArray(ScAttrArray *attrArray)
SCROW GetNextUnprotected(SCROW nRow, bool bUp) const
Including current, may return -1.
void GetOptimalHeight(sc::RowHeightContext &rCxt, SCROW nStartRow, SCROW nEndRow, sal_uInt16 nMinHeight, SCROW nMinStart)
sal_uInt64 GetWeightedCount() const
tools::Long GetNeededSize(SCROW nRow, OutputDevice *pDev, double nPPTX, double nPPTY, const Fraction &rZoomX, const Fraction &rZoomY, bool bWidth, const ScNeededSizeOptions &rOptions, const ScPatternAttr **pPatternChange, bool bInPrintTwips=false) const
ScRefCellValue GetCellValue(SCROW nRow) const
void SetTextWidth(SCROW nRow, sal_uInt16 nWidth)
sal_uInt16 GetTextWidth(SCROW nRow) const
RangeData GetRangeData(A nPos) const
Get range data for a row, i.e.
void SetValue(A nPos, const D &rValue)
const D & GetValue(A nPos) const
ScSheetLimits & GetSheetLimits() const
bool IsStreamValidLocked() const
SC_DLLPUBLIC SCCOL MaxCol() const
SC_DLLPUBLIC SCROW MaxRow() const
bool IsAdjustHeightLocked() const
void RepaintRange(const ScRange &rRange)
SC_DLLPUBLIC ScDrawLayer * GetDrawLayer()
SC_DLLPUBLIC bool HasAttrib(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, HasAttrFlags nMask) const
SfxObjectShell * GetDocumentShell() const
SC_DLLPUBLIC bool IsDocVisible() const
SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL *pFirstCol=nullptr, SCCOL *pLastCol=nullptr) const
bool IsInDtorClear() const
SC_DLLPUBLIC bool GetPrintArea(SCTAB nTab, SCCOL &rEndCol, SCROW &rEndRow, bool bNotes=true) const
SC_DLLPUBLIC const SfxItemSet * GetCondResult(SCCOL nCol, SCROW nRow, SCTAB nTab, ScRefCellValue *pCell=nullptr) const
void MoveArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, SCCOL nDx, SCROW nDy, bool bInsDel, bool bUpdateNoteCaptionPos)
void ScRenamePage(SCTAB nTab, const OUString &rNewName)
void SetPageSize(sal_uInt16 nPageNo, const Size &rSize, bool bUpdateNoteCaptionPos, const ScObjectHandling eObjectHandling=ScObjectHandling::RecalcPosMode)
bool ScAddPage(SCTAB nTab)
void ScRemovePage(SCTAB nTab)
bool setFalse(SCCOL nCol1, SCCOL nCol2)
bool setTrue(SCCOL nCol1, SCCOL nCol2)
bool getRangeData(SCCOL nCol, RangeData &rData)
static bool IsSystemRTL()
static SC_DLLPUBLIC const CharClass & getCharClass()
This is a rather odd datastructure.
SCROW GetNextMarked(SCROW nRow, bool bUp) const
Including current row, may return -1 if bUp and not found.
SCROW GetMarkEnd(SCROW nRow, bool bUp) const
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
const ScRange & GetMultiMarkArea() const
const ScRange & GetMarkArea() const
SCROW GetNextMarked(SCCOL nCol, SCROW nRow, bool bUp) const
May return -1.
bool IsMultiMarked() const
bool IsCellMarked(SCCOL nCol, SCROW nRow, bool bNoSimple=false) const
ScMarkArray GetMarkArray(SCCOL nCol) const
Matrix data type that can store values of mixed types.
const SfxPoolItem & GetItem(sal_uInt16 nWhichP) const
const std::optional< ScRange > & GetRepeatCol() const
bool IsEntireSheet() const
const std::optional< ScRange > & GetRepeatRow() const
const ScRangeVec & GetPrintRanges() const
void SetRepeat(std::optional< ScRange > oCol, std::optional< ScRange > oRow)
void SetAreas(ScRangeVec &&rRanges, bool bEntireSheet)
sal_uInt64 GetState() const
void SetState(sal_uInt64 nVal, sal_uInt64 nNewRange=0)
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)
Use this to iterate through non-empty visible cells in a single column.
VisibleDataCellIterator(const ScDocument &rDoc, ScFlatBoolRowSegments &rRowSegs, ScColumn &rColumn)
ScRefCellValue next()
Find the next visible data cell position.
SCROW getRow() const
Get the current row position.
ScRefCellValue reset(SCROW nRow)
Set the start row position.
std::unique_ptr< ScFlatBoolColSegments > mpHiddenCols
bool bTableAreaVisibleValid
bool ValidCol(SCCOL nCol) const
void UpdateInsertTab(sc::RefUpdateInsertTabContext &rCxt)
SCCOL FindNextVisibleCol(SCCOL nCol, bool bRight) const
void UpdateDrawRef(UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, SCCOL nDx, SCROW nDy, SCTAB nDz, bool bUpdateNoteCaptionPos=true)
bool SkipRow(const SCCOL rCol, SCROW &rRow, const SCROW nMovY, const ScMarkData &rMark, const bool bUp, const SCROW nUsedY, const bool bMarked, const bool bSheetProtected) const
void FillMatrix(ScMatrix &rMat, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, svl::SharedStringPool *pPool) const
void AssertNoInterpretNeeded(SCCOL nCol, SCROW nRow1, SCROW nRow2)
std::unique_ptr< ScFlatBoolRowSegments > mpFilteredRows
ScRefCellValue GetRefCellValue(SCCOL nCol, SCROW nRow)
ScColumnsRange GetAllocatedColumnsRange(SCCOL begin, SCCOL end) const
const OUString & GetUpperName() const
void UpdateDeleteTab(sc::RefUpdateDeleteTabContext &rCxt)
void UpdateGrow(const ScRange &rArea, SCCOL nGrowX, SCROW nGrowY)
ScColumnsRange GetColumnsRange(SCCOL begin, SCCOL end) const
bool GetPrintAreaHor(SCROW nStartRow, SCROW nEndRow, SCCOL &rEndCol) const
bool GetCellArea(SCCOL &rEndCol, SCROW &rEndRow)
void SetLink(ScLinkMode nMode, const OUString &rDoc, const OUString &rFlt, const OUString &rOpt, const OUString &rTab, sal_uLong nRefreshDelay)
std::unique_ptr< ScDBData > pDBDataNoName
std::unique_ptr< ScConditionalFormatList > mpCondFormatList
void SetTabBgColor(const Color &rColor)
void InvalidatePageBreaks()
bool InterpretCellsIfNeeded(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2)
~ScTable() COVERITY_NOEXCEPT_FALSE
sal_uInt16 GetColWidth(SCCOL nCol, bool bHiddenAsZero=true) const
bool ValidColRow(SCCOL nCol, SCROW nRow) const
std::unique_ptr< ScBitMaskCompressedArray< SCROW, CRFlags > > pRowFlags
void SetLoadingRTL(bool bSet)
bool HandleRefArrayForParallelism(SCCOL nCol, SCROW nRow1, SCROW nRow2, const ScFormulaCellGroupRef &mxGroup)
void FillPrintSaver(ScPrintSaverTab &rSaveTab) const
ScColumn & CreateColumnIfNotExists(const SCCOL nScCol)
bool IsEmptyLine(SCROW nRow, SCCOL nStartCol, SCCOL nEndCol) const
bool GetDataStart(SCCOL &rStartCol, SCROW &rStartRow) const
bool IsColValid(const SCCOL nScCol) const
std::unique_ptr< ScBitMaskCompressedArray< SCCOL, CRFlags > > mpColFlags
void SetStreamValid(bool bSet, bool bIgnoreLock=false)
void GetDataArea(SCCOL &rStartCol, SCROW &rStartRow, SCCOL &rEndCol, SCROW &rEndRow, bool bIncludeOld, bool bOnlyDown) const
sal_uInt64 GetWeightedCount() const
sal_uLong nLinkRefreshDelay
void CalculateInColumnInThread(ScInterpreterContext &rContext, SCCOL nColStart, SCCOL nColEnd, SCROW nRowStart, SCROW nRowEnd, unsigned nThisThread, unsigned nThreadsTotal)
std::optional< ScRange > moRepeatRowRange
std::unique_ptr< ScFlatBoolColSegments > mpFilteredCols
void FindAreaPos(SCCOL &rCol, SCROW &rRow, ScMoveDirection eDirection) const
void SetCondFormList(ScConditionalFormatList *pList)
void RestorePrintRanges(const ScPrintSaverTab &rSaveTab)
void CreateColumnIfNotExistsImpl(const SCCOL nScCol)
void SetScriptType(SCCOL nCol, SCROW nRow, SvtScriptType nType)
void AddPrintRange(const ScRange &rNew)
Adds a new print ranges.
bool GetPrintArea(SCCOL &rEndCol, SCROW &rEndRow, bool bNotes, bool bCalcHiddens=false) const
void UpdateTranspose(const ScRange &rSource, const ScAddress &rDest, ScDocument *pUndoDoc)
void DeleteConditionalFormat(sal_uLong nOldIndex)
bool ColHidden(SCCOL nCol, SCCOL *pFirstCol=nullptr, SCCOL *pLastCol=nullptr) const
void UpdateReference(sc::RefUpdateContext &rCxt, ScDocument *pUndoDoc=nullptr, bool bIncludeDraw=true, bool bUpdateNoteCaptionPos=true)
std::unique_ptr< ScRangeList > pScenarioRanges
bool GetPrintAreaVer(SCCOL nStartCol, SCCOL nEndCol, SCROW &rEndRow, bool bNotes) const
std::unique_ptr< ScOutlineTable > pOutlineTable
sal_uInt16 GetPrintRangeCount() const
formula::VectorRefArray FetchVectorRefArray(SCCOL nCol, SCROW nRow1, SCROW nRow2)
void DumpColumnStorage(SCCOL nCol) const
void InterpretDirtyCells(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2)
void UpdateMoveTab(sc::RefUpdateMoveTabContext &rCxt, SCTAB nTabNo, ScProgress *pProgress)
void DestroySortCollator()
bool IsColRowValid(const SCCOL nScCol, const SCROW nScRow) const
void SetRepeatColRange(std::optional< ScRange > oNew)
void SetFormulaResults(SCCOL nCol, SCROW nRow, const double *pResults, size_t nLen)
void LimitChartArea(SCCOL &rStartCol, SCROW &rStartRow, SCCOL &rEndCol, SCROW &rEndRow) const
void MaybeAddExtraColumn(SCCOL &rCol, SCROW nRow, OutputDevice *pDev, double nPPTX, double nPPTY)
In case the cell text goes beyond the column width, move the max column position to the right.
void GetLastDataPos(SCCOL &rCol, SCROW &rRow) const
sal_uInt16 GetOptimalColWidth(SCCOL nCol, OutputDevice *pDev, double nPPTX, double nPPTY, const Fraction &rZoomX, const Fraction &rZoomY, bool bFormula, const ScMarkData *pMarkData, const ScColWidthParam *pParam)
bool GetTableArea(SCCOL &rEndCol, SCROW &rEndRow, bool bCalcHiddens=false) const
tools::Long GetNeededSize(SCCOL nCol, SCROW nRow, OutputDevice *pDev, double nPPTX, double nPPTY, const Fraction &rZoomX, const Fraction &rZoomY, bool bWidth, bool bTotalSize, bool bInPrintTwips=false)
void HandleStuffAfterParallelCalculation(SCCOL nColStart, SCCOL nColEnd, SCROW nRow, size_t nLen, ScInterpreter *pInterpreter)
ScTable(ScDocument &rDoc, SCTAB nNewTab, const OUString &rNewName, bool bColInfo=true, bool bRowInfo=true)
void UpdateCompile(bool bForceIfNameInUse=false)
ScColumnData aDefaultColData
ScColumnsRange GetWritableColumnsRange(SCCOL begin, SCCOL end)
ScConditionalFormatList * GetCondFormList()
bool SetRowHeightRange(SCROW nStartRow, SCROW nEndRow, sal_uInt16 nNewHeight, double nPPTY, bool bApi)
formula::FormulaTokenRef ResolveStaticReference(SCCOL nCol, SCROW nRow)
bool RowHidden(SCROW nRow, SCROW *pFirstRow=nullptr, SCROW *pLastRow=nullptr) const
bool IsEmptyData(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow) const
SCSIZE GetEmptyLinesInBlock(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, ScDirection eDir) const
sal_uInt16 GetOptimalMinRowHeight() const
void SetAnonymousDBData(std::unique_ptr< ScDBData > pDBData)
void SetPendingRowHeights(bool bSet)
std::unique_ptr< ScCompressedArray< SCCOL, sal_uInt16 > > mpColWidth
bool ShrinkToUsedDataArea(bool &o_bShrunk, SCCOL &rStartCol, SCROW &rStartRow, SCCOL &rEndCol, SCROW &rEndRow, bool bColumnsOnly, bool bStickyTopRow, bool bStickyLeftCol, ScDataAreaExtras *pDataAreaExtras) const
SCCOL GetAllocatedColumnsCount() const
void SetVisible(bool bVis)
sal_Int64 GetHashCode() const
bool GetDataAreaSubrange(ScRange &rRange) const
void SetOptimalHeightOnly(sc::RowHeightContext &rCxt, SCROW nStartRow, SCROW nEndRow, ScProgress *pOuterProgress=nullptr, sal_uInt64 nProgressStart=0)
void ExtendPrintArea(OutputDevice *pDev, SCCOL nStartCol, SCROW nStartRow, SCCOL &rEndCol, SCROW nEndRow)
void SetLayoutRTL(bool bSet)
sal_uLong AddCondFormat(std::unique_ptr< ScConditionalFormat > pNew)
void SetRowHeightOnly(SCROW nStartRow, SCROW nEndRow, sal_uInt16 nNewHeight)
Set specified row height to specified ranges.
void UpdatePageBreaks(const ScRange *pUserArea)
std::unique_ptr< ScFlatBoolRowSegments > mpHiddenRows
std::unique_ptr< ScFlatUInt16RowSegments > mpRowHeights
bool GetNextMarkedCell(SCCOL &rCol, SCROW &rRow, const ScMarkData &rMark) const
std::unique_ptr< ScRangeName > mpRangeName
SvtScriptType GetRangeScriptType(sc::ColumnBlockPosition &rBlockPos, SCCOL nCol, SCROW nRow1, SCROW nRow2)
SvtBroadcaster * GetBroadcaster(SCCOL nCol, SCROW nRow)
const ScPatternAttr * GetPattern(SCCOL nCol, SCROW nRow) const
bool SetOptimalHeight(sc::RowHeightContext &rCxt, SCROW nStartRow, SCROW nEndRow, bool bApi, ScProgress *pOuterProgress=nullptr, sal_uInt64 nProgressStart=0)
void FindRangeNamesInUse(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, sc::UpdatedRangeNames &rIndexes) const
void SetScenario(bool bFlag)
bool IsPrintEntireSheet() const
Returns true, if the sheet is always printed.
void CopyPrintRange(const ScTable &rTable)
void SetPrintEntireSheet()
Marks the specified sheet to be printed completely.
SCCOL ClampToAllocatedColumns(SCCOL nCol) const
sal_uInt64 GetCellCount() const
SCCOL FindNextVisibleColWithContent(SCCOL nCol, bool bRight, SCROW nRow) const
SvtScriptType GetScriptType(SCCOL nCol, SCROW nRow) const
bool ValidNextPos(SCCOL nCol, SCROW nRow, const ScMarkData &rMark, bool bMarked, bool bUnprotected) const
void GetNextPos(SCCOL &rCol, SCROW &rRow, SCCOL nMovX, SCROW nMovY, bool bMarked, bool bUnprotected, const ScMarkData &rMark, SCCOL nTabStartCol) const
SCROW GetLastDataRow(SCCOL nCol1, SCCOL nCol2, SCROW nLastRow, ScDataAreaExtras *pDataAreaExtras=nullptr) const
const ScRange * GetPrintRange(sal_uInt16 nPos) const
void SetName(const OUString &rNewName)
void DeleteBroadcasters(sc::ColumnBlockPosition &rBlockPos, SCCOL nCol, SCROW nRow1, SCROW nRow2)
std::unique_ptr< ScTableProtection > pTabProtection
std::optional< ScRange > moRepeatColRange
void SetTabNo(SCTAB nNewTab)
std::atomic< bool > bStreamValid
this is touched from formula group threading context
void DeleteEmptyBroadcasters()
std::unique_ptr< utl::TextSearch > pSearchText
void ClearPrintRanges()
Removes all print ranges.
std::unique_ptr< ScSheetEvents > pSheetEvents
bool ValidRow(SCROW nRow) const
void SetRepeatRowRange(std::optional< ScRange > oNew)
RowHeightsArray & getHeightArray()
sal_uInt16 getExtraHeight() const
bool isForceAutoSize() const
Keep track of all named expressions that have been updated during reference update.
constexpr ::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
constexpr ::Color COL_LIGHTGRAY(0xC0, 0xC0, 0xC0)
constexpr sal_Int32 STD_EXTRA_WIDTH
constexpr sal_Int32 STD_COL_WIDTH
RttiCompleteObjectLocator col
constexpr OUStringLiteral aData
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
constexpr Point convert(const Point &rPoint, o3tl::Length eFrom, o3tl::Length eTo)
mdds::mtv::soa::multi_type_vector< CellStoreTraits > CellStoreType
Cell container.
const mdds::mtv::element_t element_type_empty
OUString ScResId(TranslateId aId)
constexpr TypedWhichId< SvxHorJustifyItem > ATTR_HOR_JUSTIFY(129)
This is very similar to ScCellValue, except that it references the original value instead of copying ...
Store position data for column array storage.
CellTextAttrStoreType::iterator miCellTextAttrPos
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.
const SCCOL SC_COLUMNS_STOP
::boost::intrusive_ptr< ScFormulaCellGroup > ScFormulaCellGroupRef
::boost::intrusive_ptr< ScMatrix > ScMatrixRef