Demo - FlexGrid

HTML

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.grapecity.com/wijmo/5.latest/styles/wijmo.min.css">
<script src="https://cdn.grapecity.com/wijmo/5.latest/controls/wijmo.min.js"></script>
<script src="https://cdn.grapecity.com/wijmo/5.latest/controls/wijmo.grid.min.js"></script>
<script src="https://cdn.grapecity.com/wijmo/5.latest/controls/wijmo.input.min.js"></script>
<script src="https://cdn.grapecity.com/wijmo/5.latest/controls/wijmo.grid.filter.min.js"></script>
<script src="https://cdn.grapecity.com/wijmo/5.latest/controls/wijmo.grid.sheet.min.js"></script>
<div id="sheet">
</div>

CSS

body {
    margin: 40px;
}

.wj-flexsheet {
    width: 700px;
    height: 400px;
}

JavaScript

onload = function() {
    var formatSheet = new wijmo.grid.sheet.FlexSheet('#sheet');
    var sheet = new wijmo.grid.sheet.Sheet(formatSheet, null, 'Number', 20, 8);
    formatSheet.sheets.push(sheet);

    sheet.itemsSource = getData();
    
    var row = new wijmo.grid.GroupRow();
    formatSheet.columnFooters.rows.push(row);
    formatSheet.bottomLeftCells.setCellData(0, 0, '\u03A3');
    formatSheet.columnFooters.setCellData(0, 6, formatSheet.evaluate(`=sum(g2:g202)`));
    
    formatSheet.cellEditEnded.addHandler((s, e) => {
    	formatSheet.columnFooters.setCellData(0, 6, formatSheet.evaluate(`=sum(g2:g202)`));
    });
    
    formatSheet.columns.forEach(col => {
    	var binding = col.binding;
    	if(binding == 'downloads' || binding == 'sales' || binding == 'expenses') {
        	col.aggregate = 'Sum';
        }
    });
    
    function getData() {
        var countries = 'US,Germany,UK,Japan,Italy,Greece'.split(','),
            data = [];
        for (var i = 0; i < 200; i++) {
            data.push({
                id: i,
                country: countries[i % countries.length],
                active: i % 5 != 0,
                downloads: Math.round(Math.random() * 200000),
                sales: Math.random() * 100000,
                expenses: Math.random() * 50000,
                subtotal: `=sum(d${i + 2}:f${i + 2})`
            });
        }
        return data;
    }
}