summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorNoel Power <noel.power@novell.com>2012-07-25 18:23:38 +0100
committerNoel Power <noel.power@suse.com>2012-10-30 10:16:59 +0000
commitcaf8899d6e3f06332104cdf21cba23daca17d56e (patch)
tree3b321cf294ae69e25dbdd4ed1c516b9b85e03bb9 /sc
parent47d9a8a3397ed2f4ff7e7ec1bba392da34d8519e (diff)
hopefully more successful attempt to solve fdo#50304
Change-Id: I86dfff571c14bce97d0851b4093dbc376d8b6ea4
Diffstat (limited to 'sc')
-rw-r--r--sc/source/filter/excel/xetable.cxx22
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;
+
}
// ============================================================================