sc/source/filter/excel/xetable.cxx |   53 ++++++++++++++++++++++++++-----------
 1 file changed, 38 insertions(+), 15 deletions(-)

New commits:
commit 9746c6de3a05fe9284d6d6bb2f636bfe912733cd
Author: Noel Power <noel.po...@novell.com>
Date:   Thu May 24 12:44:19 2012 +0100

    fix excel row height export problems ( I hope ) fdo#50304
    
    Change-Id: I43ddb32ecba36107f5973fa5dcf2499cd1330668

diff --git a/sc/source/filter/excel/xetable.cxx 
b/sc/source/filter/excel/xetable.cxx
index e569426..5656b71 100644
--- a/sc/source/filter/excel/xetable.cxx
+++ b/sc/source/filter/excel/xetable.cxx
@@ -2029,22 +2029,41 @@ void XclExpRowBuffer::Finalize( XclExpDefaultRowData& 
rDefRowData, const ScfUInt
     XclExpDefaultRowData aMaxDefData;
     size_t nMaxDefCount = 0;
     // only look for default format in existing rows, if there are more than 
unused
-    for (itr = itrBeg; itr != itrEnd; ++itr)
+    bool bSearchExisting = ( maRowMap.size() >= (  GetMaxPos().Row() - 
maRowMap.size() ) );
+    if ( bSearchExisting )
     {
-        const RowRef& rRow = itr->second;
-        if (rRow->IsDefaultable())
+        for (itr = itrBeg; itr != itrEnd; ++itr)
         {
-            XclExpDefaultRowData aDefData( *rRow );
-            size_t& rnDefCount = aDefRowMap[ aDefData ];
-            ++rnDefCount;
-            if( rnDefCount > nMaxDefCount )
+            const RowRef& rRow = itr->second;
+            if (rRow->IsDefaultable())
             {
-                nMaxDefCount = rnDefCount;
-                aMaxDefData = aDefData;
+                XclExpDefaultRowData aDefData( *rRow );
+                size_t& rnDefCount = aDefRowMap[ aDefData ];
+                ++rnDefCount;
+                if( rnDefCount > nMaxDefCount )
+                {
+                    nMaxDefCount = rnDefCount;
+                    aMaxDefData = aDefData;
+                }
+            }
+        }
+    }
+    else
+    {
+        // find a suitable unused row to get the default height from,
+        // searching backwards from max row
+        for ( SCROW nRow = GetMaxPos().Row(); nRow >= 0; --nRow )
+        {
+            if ( maRowMap.find( nRow ) == maRowMap.end() )
+            {
+                // use first encountered unused row height as default
+                // I wonder should we do this always ( and abandon the search
+                // of exising rows )
+                aMaxDefData.mnHeight = GetDoc().GetRowHeight(nRow, 
GetCurrScTab(), false);
+                break;
             }
         }
     }
-
     // return the default row format to caller
     rDefRowData = aMaxDefData;
 
@@ -2146,13 +2165,17 @@ XclExpDimensions* XclExpRowBuffer::GetDimensions()
 
 XclExpRow& XclExpRowBuffer::GetOrCreateRow( sal_uInt32 nXclRow, bool 
bRowAlwaysEmpty )
 {
-    RowMap::iterator itr = maRowMap.find(nXclRow);
-    if (itr == maRowMap.end())
+    RowMap::iterator itr = maRowMap.begin();
+    for ( size_t nFrom = maRowMap.size(); nFrom <= nXclRow; ++nFrom )
     {
-        RowRef p(new XclExpRow(GetRoot(), nXclRow, maOutlineBfr, 
bRowAlwaysEmpty));
-        ::std::pair<RowMap::iterator, bool> r = 
maRowMap.insert(RowMap::value_type(nXclRow, p));
-        itr = r.first;
+        itr = maRowMap.find(nFrom);
+        if ( itr == maRowMap.end() )
+        {
+            RowRef p(new XclExpRow(GetRoot(), nFrom, maOutlineBfr, 
bRowAlwaysEmpty));
+            maRowMap.insert(RowMap::value_type(nFrom, p));
+        }
     }
+    itr = maRowMap.find(nXclRow);
     return *itr->second;
 }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to