[Libreoffice-commits] core.git: Branch 'libreoffice-4-2' - sc/source

Eike Rathke erack at redhat.com
Tue Feb 11 04:31:41 PST 2014


 sc/source/core/data/table1.cxx |   12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

New commits:
commit d27af82cf997df2ddfb3ea689cf943338bd3df1a
Author: Eike Rathke <erack at redhat.com>
Date:   Mon Feb 10 18:22:27 2014 +0100

    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
    (cherry picked from commit 6c5acfbefddeca1b2336cdc4158ec6e6f2a46858)
    Reviewed-on: https://gerrit.libreoffice.org/7978
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index f958927..e0eb3eb 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -904,15 +904,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;
         }
     }
 }


More information about the Libreoffice-commits mailing list