SumOverNestedRows
HTML
<div>
<div id="example-nestedRows" class="hot handsontable htRowHeaders htColumnHeaders"></div>
</div>
CSS
</style><!-- Ugly Hack due to jsFiddle issue -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/handsontable.full.min.js"></script>
<link type="text/css" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/handsontable.full.min.css">
JavaScript
var container = document.getElementById('example-nestedRows');
var hot8 = new Handsontable(container, {
data: [
{
value: null,
__children: [
{value: 5},
{value: 6},
{value: 7},
]
},
{
__children: [
{value: 15},
{value: 16},
{value: 17},
]
}
],
columns: [
{data: 'value'}
],
nestedRows: true,
rowHeaders: true,
colHeaders: ['sum', 'min', 'max', 'count', 'average'],
columnSummary: function() {
var endpoints = [];
var nestedRowsPlugin = this.hot.getPlugin('nestedRows');
var getRowIndex = nestedRowsPlugin.dataManager.getRowIndex.bind(nestedRowsPlugin.dataManager);
var nestedRowsCache = null;
var tempEndpoint = null;
var resultColumn = 0;
if (nestedRowsPlugin.isEnabled()) {
nestedRowsCache = this.hot.getPlugin('nestedRows').dataManager.cache;
} else {
return;
}
for (var i = 0; i < nestedRowsCache.levels[0].length; i++) {
tempEndpoint = {};
if (!nestedRowsCache.levels[0][i].__children || nestedRowsCache.levels[0][i].__children.length === 0) {
continue;
}
tempEndpoint.destinationColumn = resultColumn;
tempEndpoint.destinationRow = getRowIndex(nestedRowsCache.levels[0][i]);
tempEndpoint.type = 'sum';
tempEndpoint.forceNumeric = true;
tempEndpoint.ranges = [];
tempEndpoint.ranges.push([
getRowIndex(nestedRowsCache.levels[0][i].__children[0]),
getRowIndex(nestedRowsCache.levels[0][i].__children[nestedRowsCache.levels[0][i].__children.length - 1])
]);
endpoints.push(tempEndpoint);
tempEndpoint = null;
}
return endpoints;
}
});