summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2014-02-10 18:22:27 +0100
committerEike Rathke <erack@redhat.com>2014-02-10 18:35:58 +0100
commit6c5acfbefddeca1b2336cdc4158ec6e6f2a46858 (patch)
treef801aca17f5e408027bfc9acac1f027b7992a975
parent2eea96c702a44ab009743b0d22ef639127f0b57b (diff)
do not loop 30 million cells to find a non-empty row
If for whatever reason an AutoFilter area was setup to extend down to, for example, row 1048559 but the actual last data row is 15817, with 27 columns it took ScTable::GetDataArea() to look at 27884034 cells to find the last non-empty data row ... Change-Id: Ic8cbebe7ddf9b23c8edb55c4821d8a4c69e8b75d
-rw-r--r--sc/source/core/data/table1.cxx12
1 files changed, 3 insertions, 9 deletions
diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index b3385a3ff094..22da0ae1009a 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -898,15 +898,9 @@ void ScTable::GetDataArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, S
{
if ( !bBottom && rEndRow > 0 && rStartRow < rEndRow )
{
- bool shrink = true;
- do
- {
- for ( SCCOL i = rStartCol; i<=rEndCol && shrink; i++)
- if (aCol[i].HasDataAt(rEndRow))
- shrink = false;
- if (shrink)
- --rEndRow;
- }while( shrink && rEndRow > 0 && rStartRow < rEndRow );
+ SCROW nLastDataRow = GetLastDataRow( rStartCol, rEndCol, rEndRow);
+ if (nLastDataRow >= 0 && rStartRow <= nLastDataRow && nLastDataRow < rEndRow)
+ rEndRow = nLastDataRow;
}
}
}