tdf#79049 speed up OOXML workbook load (3)

Exit this loop early if we aren't going to make progress
anyhow.
This takes the load time from 40s to 34s for me.

Change-Id: I31887442cde6e3fc05f1fce10bb3dde9c2b88bf2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114942
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/sc/source/core/data/attarray.cxx b/sc/source/core/data/attarray.cxx
index da8490b..d7683b6 100644
--- a/sc/source/core/data/attarray.cxx
+++ b/sc/source/core/data/attarray.cxx
@@ -1959,17 +1959,21 @@ bool ScAttrArray::GetLastVisibleAttr( SCROW& rLastRow, SCROW nLastData ) const
    Search( nLastData, nPos );
    while ( nPos < mvData.size() )
    {
        SCROW nAttrStartRow = ( nPos > 0 ) ? ( mvData[nPos-1].nEndRow + 1 ) : 0;
        if ( nAttrStartRow <= nLastData )
            nAttrStartRow = nLastData + 1;
        // find range of visually equal formats
        SCSIZE nEndPos = nPos;
        while ( nEndPos < mvData.size()-1 &&
                mvData[nEndPos].pPattern->IsVisibleEqual( *mvData[nEndPos+1].pPattern))
        {
            if ( (mvData[nEndPos].nEndRow + 1 - nAttrStartRow) >= SC_VISATTR_STOP )
                return false; // ignore this range and below
            ++nEndPos;
        SCROW nAttrStartRow = ( nPos > 0 ) ? ( mvData[nPos-1].nEndRow + 1 ) : 0;
        if ( nAttrStartRow <= nLastData )
            nAttrStartRow = nLastData + 1;
        }
        SCROW nAttrSize = mvData[nEndPos].nEndRow + 1 - nAttrStartRow;
        if ( nAttrSize >= SC_VISATTR_STOP )
            break;  // while, ignore this range and below
            return false; // ignore this range and below
        else if ( mvData[nEndPos].pPattern->IsVisible() )
        {
            rLastRow = mvData[nEndPos].nEndRow;