diff options
author | Noel Power <noel.power@novell.com> | 2012-05-24 12:44:19 +0100 |
---|---|---|
committer | Fridrich Štrba <fridrich.strba@bluewin.ch> | 2012-06-11 12:16:43 +0200 |
commit | c9749c917e67a70a0cb283e180fd1c05f0cf3c2a (patch) | |
tree | 53de80393371a799d2b2c7b8fb6bf7f51063fcf2 /sc | |
parent | 21f43fb084c4c468c3f5722058325903a8e3daf9 (diff) |
fix excel row height export problems ( I hope ) fdo#50304
Change-Id: I43ddb32ecba36107f5973fa5dcf2499cd1330668
Signed-off-by: Fridrich Štrba <fridrich.strba@bluewin.ch>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/filter/excel/xetable.cxx | 53 |
1 files changed, 38 insertions, 15 deletions
diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx index b3166181d427..d77c1e408a29 100644 --- a/sc/source/filter/excel/xetable.cxx +++ b/sc/source/filter/excel/xetable.cxx @@ -2031,22 +2031,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; @@ -2148,13 +2167,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; } |