diff options
author | Ahmed GHANMI <aghanmi@linagora.com> | 2018-01-18 10:40:50 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2018-01-19 08:03:16 +0100 |
commit | 7c0e7e7fbcd90f739b9b8534aa19b39bf1a15c7b (patch) | |
tree | 552f7065790b2d6b64d2f146388da1c8ef9a9890 | |
parent | 8f909506404b8a1d02152ebe78c44492abbbda6d (diff) |
tdf#114720: Fix subtotal crash
A condition was added in order to not make subtotal
functions if category was not checked.
Change-Id: I56f11330fa16bf0d3199576ce2545cbc8d13e864
Reviewed-on: https://gerrit.libreoffice.org/48099
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
(cherry picked from commit 6cb011cc644d8f2e189ce5b8e5de7ff297969840)
Reviewed-on: https://gerrit.libreoffice.org/48163
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Reviewed-by: Andras Timar <andras.timar@collabora.com>
Tested-by: Andras Timar <andras.timar@collabora.com>
-rw-r--r-- | sc/source/core/data/table3.cxx | 75 |
1 files changed, 39 insertions, 36 deletions
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx index b973dd8fd6bc..f4b63f4f1eaf 100644 --- a/sc/source/core/data/table3.cxx +++ b/sc/source/core/data/table3.cxx @@ -2139,48 +2139,51 @@ bool ScTable::DoSubTotals( ScSubTotalParam& rParam ) } } - // generate global total - SCROW nGlobalStartRow = aRowVector[0].nSubStartRow; - SCROW nGlobalStartFunc = aRowVector[0].nFuncStart; - SCROW nGlobalEndRow = 0; - SCROW nGlobalEndFunc = 0; - for ( ::std::vector< RowEntry >::const_iterator iEntry( aRowVector.begin()); - iEntry != aRowVector.end(); ++iEntry) - { - nGlobalEndRow = (nGlobalEndRow < iEntry->nDestRow) ? iEntry->nDestRow : nGlobalEndRow; - nGlobalEndFunc = (nGlobalEndFunc < iEntry->nFuncEnd) ? iEntry->nFuncEnd : nGlobalEndRow; - } - - for (sal_uInt16 nLevel=0; nLevel<nLevelCount; nLevel++) + if (aRowVector.size() > 0) { - // increment end row - nGlobalEndRow++; + // generate global total + SCROW nGlobalStartRow = aRowVector[0].nSubStartRow; + SCROW nGlobalStartFunc = aRowVector[0].nFuncStart; + SCROW nGlobalEndRow = 0; + SCROW nGlobalEndFunc = 0; + for (::std::vector< RowEntry >::const_iterator iEntry(aRowVector.begin()); + iEntry != aRowVector.end(); ++iEntry) + { + nGlobalEndRow = (nGlobalEndRow < iEntry->nDestRow) ? iEntry->nDestRow : nGlobalEndRow; + nGlobalEndFunc = (nGlobalEndFunc < iEntry->nFuncEnd) ? iEntry->nFuncEnd : nGlobalEndRow; + } - // add row entry for formula - aRowEntry.nGroupNo = nLevelCount-nLevel-1; - aRowEntry.nSubStartRow = nGlobalStartRow; - aRowEntry.nFuncStart = nGlobalStartFunc; - aRowEntry.nDestRow = nGlobalEndRow; - aRowEntry.nFuncEnd = nGlobalEndFunc; + for (sal_uInt16 nLevel = 0; nLevel<nLevelCount; nLevel++) + { + // increment end row + nGlobalEndRow++; - // increment row - nGlobalEndFunc++; + // add row entry for formula + aRowEntry.nGroupNo = nLevelCount - nLevel - 1; + aRowEntry.nSubStartRow = nGlobalStartRow; + aRowEntry.nFuncStart = nGlobalStartFunc; + aRowEntry.nDestRow = nGlobalEndRow; + aRowEntry.nFuncEnd = nGlobalEndFunc; - bSpaceLeft = pDocument->InsertRow( 0, nTab, MAXCOL, nTab, aRowEntry.nDestRow, 1 ); + // increment row + nGlobalEndFunc++; - if (bSpaceLeft) - { - aRowVector.push_back( aRowEntry ); - nEndRow++; - DBShowRow(aRowEntry.nDestRow, true); + bSpaceLeft = pDocument->InsertRow(0, nTab, MAXCOL, nTab, aRowEntry.nDestRow, 1); - // insert label - ScSubTotalFunc* eResFunc = rParam.pFunctions[aRowEntry.nGroupNo]; - OUString label = ScGlobal::GetRscString( STR_TABLE_GRAND ); - label += " "; - label += ScGlobal::GetRscString(lcl_GetSubTotalStrId(eResFunc[0])); - SetString( nGroupCol[aRowEntry.nGroupNo], aRowEntry.nDestRow, nTab, label ); - ApplyStyle( nGroupCol[aRowEntry.nGroupNo], aRowEntry.nDestRow, pStyle ); + if (bSpaceLeft) + { + aRowVector.push_back(aRowEntry); + nEndRow++; + DBShowRow(aRowEntry.nDestRow, true); + + // insert label + ScSubTotalFunc* eResFunc = rParam.pFunctions[aRowEntry.nGroupNo]; + OUString label = ScGlobal::GetRscString(STR_TABLE_GRAND); + label += " "; + label += ScGlobal::GetRscString(lcl_GetSubTotalStrId(eResFunc[0])); + SetString(nGroupCol[aRowEntry.nGroupNo], aRowEntry.nDestRow, nTab, label); + ApplyStyle(nGroupCol[aRowEntry.nGroupNo], aRowEntry.nDestRow, pStyle); + } } } |