diff options
author | Noel Power <noel.power@novell.com> | 2012-07-25 18:23:38 +0100 |
---|---|---|
committer | Noel Power <noel.power@suse.com> | 2012-10-30 10:16:59 +0000 |
commit | caf8899d6e3f06332104cdf21cba23daca17d56e (patch) | |
tree | 3b321cf294ae69e25dbdd4ed1c516b9b85e03bb9 /sc/source/filter | |
parent | 47d9a8a3397ed2f4ff7e7ec1bba392da34d8519e (diff) |
hopefully more successful attempt to solve fdo#50304
Change-Id: I86dfff571c14bce97d0851b4093dbc376d8b6ea4
Diffstat (limited to 'sc/source/filter')
-rw-r--r-- | sc/source/filter/excel/xetable.cxx | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx index e3967f2bc561..d611077744fb 100644 --- a/sc/source/filter/excel/xetable.cxx +++ b/sc/source/filter/excel/xetable.cxx @@ -2146,14 +2146,26 @@ 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(); + ScDocument& rDoc = GetRoot().GetDoc(); + SCTAB nScTab = GetRoot().GetCurrScTab(); + 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() ) + { + // only create RowMap entries for rows that differ from previous, + // or if it is the desired row + if ( !nFrom || ( nFrom == nXclRow ) || ( nFrom && ( rDoc.GetRowHeight(nFrom, nScTab, false) != rDoc.GetRowHeight(nFrom-1, nScTab, false) ) ) ) + { + RowRef p(new XclExpRow(GetRoot(), nFrom, maOutlineBfr, bRowAlwaysEmpty)); + maRowMap.insert(RowMap::value_type(nFrom, p)); + } + } } + itr = maRowMap.find(nXclRow); return *itr->second; + } // ============================================================================ |