sc/source/filter/excel/xetable.cxx | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-)
New commits: commit caf8899d6e3f06332104cdf21cba23daca17d56e Author: Noel Power <noel.po...@novell.com> Date: Wed Jul 25 18:23:38 2012 +0100 hopefully more successful attempt to solve fdo#50304 Change-Id: I86dfff571c14bce97d0851b4093dbc376d8b6ea4 diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx index e3967f2..d611077 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; + } // ============================================================================ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits