Kaydet (Commit) 6cb011cc authored tarafından Ahmed GHANMI's avatar Ahmed GHANMI Kaydeden (comit) Eike Rathke

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/48099Reviewed-by: 's avatarEike Rathke <erack@redhat.com>
Tested-by: 's avatarEike Rathke <erack@redhat.com>
üst d4440ce6
......@@ -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);
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment