New to Kendo UI for jQuery? Download free 30-day trial

Bind Charts to Spreadsheet Data

Environment

Product Progress® Kendo UI® Spreadsheet for jQuery
Operating System Windows 10 64bit
Visual Studio Version Visual Studio 2017
Preferred Language JavaScript

Description

How can I extract data from the Kendo UI for jQuery Spreadsheet and render it in a chart?

Solution

The following example demonstrates how to extract the Spreadsheet data and populate a Kendo UI Chart with it. The Chart is updated on sheet upon a change event.

<style>
    #spreadsheet, #chart {
        height: 500px;
        float: left;
    }

    #spreadsheet {
        width: 350px;
    }

    #chart {
        width: 550px;
    }
</style>
<div id="spreadsheet"></div>
<div id="chart"></div>
<script>
    $("#spreadsheet").kendoSpreadsheet({
        toolbar: false,
        sheetsbar: false
    });

    $("#chart").kendoChart({
        dataSource: {
            // Produce series for each region
            group: {
                field: "Region",
                dir: "asc"
            }
        },
        series: [{
            // Notice the syntax for fields
            // that are not valid JS identifiers
            field: "['GDP Growth']",
            categoryField: "Year",
            type: "column"
        }],
        dataBound: function(e) {
            // Sort categories (years) as grouping
            var axis = e.sender.options.categoryAxis;
            if (axis.categories) {
                axis.categories.sort();
            }
        },
        valueAxis: {
            labels: {
                // Percents
                format: "P"
            }
        },
        legend: {
            position: "bottom"
        },
        transitions: false
    });

    var spreadsheet = $("#spreadsheet").data("kendoSpreadsheet");
    var chart = $("#chart").data("kendoChart");
    var sheet = spreadsheet.sheetByIndex(0);
    var range = sheet.range("A1:C100");

    // Implementation below
    populateData(sheet);
    bindChart(chart, sheet, range);


    function bindChart(chart, sheet, range) {
        // Change will fire when the sheet data changes
        // https://docs.telerik.com/kendo-ui/api/javascript/spreadsheet/sheet/events/change
        sheet.bind("change", function(e) {
            if (e.recalc) {
               update();
            }
        });

        // Populate chart immediately
        update();

        function update() {
            chart.dataSource.data(fetchData());
        }

        function fetchData() {
            var values = range.values();
            var headers = [];
            var data = [];

            // Iterate range rows and cells and extract data
            for (var row = 0; row < values.length; row++) {
                var dataItem = {};

                for(var cell = 0; cell < values[row].length; cell++) {
                    var value = values[row][cell];
                    if (!value) {
                        continue;
                    }

                    if (row > 0) {
                        // Data cell
                        dataItem[headers[cell]] = value;
                    } else {
                        // Header cell
                        headers.push(value);
                    }
                }

                // Make sure we have all required fields
                if (row > 0 && dataItem.Year && dataItem.Region) {
                    data.push(dataItem);
                }
            }

            return data;
        }
    }

    function populateData(sheet) {
        sheet.fromJSON({
          "rows": [
            {
              "index": 29,
              "height": 20.078125,
              "cells": [
                {
                  "value": 2009,
                  "index": 0
                },
                {
                  "value": "India",
                  "index": 1
                },
                {
                  "value": 0.08238,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 40,
              "height": 20.078125,
              "cells": [
                {
                  "value": 2011,
                  "index": 0
                },
                {
                  "value": "World",
                  "index": 1
                },
                {
                  "value": 0.02727,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 0,
              "cells": [
                {
                  "value": "Year",
                  "bold": true,
                  "textAlign": "center",
                  "index": 0
                },
                {
                  "value": "Region",
                  "bold": true,
                  "textAlign": "center",
                  "index": 1
                },
                {
                  "value": "GDP Growth",
                  "bold": true,
                  "textAlign": "center",
                  "index": 2
                }
              ]
            },
            {
              "index": 1,
              "cells": [
                {
                  "value": 2002,
                  "index": 0
                },
                {
                  "value": "India",
                  "index": 1
                },
                {
                  "value": 0.0391,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 2,
              "cells": [
                {
                  "value": 2002,
                  "index": 0
                },
                {
                  "value": "Russian Federation",
                  "index": 1
                },
                {
                  "value": 0.04743,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 3,
              "cells": [
                {
                  "value": 2002,
                  "index": 0
                },
                {
                  "value": "Germany",
                  "index": 1
                },
                {
                  "value": 0.0001,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 4,
              "cells": [
                {
                  "value": 2002,
                  "index": 0
                },
                {
                  "value": "World",
                  "index": 1
                },
                {
                  "value": 0.01988,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 5,
              "cells": [
                {
                  "value": 2003,
                  "index": 0
                },
                {
                  "value": "India",
                  "index": 1
                },
                {
                  "value": 0.0794,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 6,
              "cells": [
                {
                  "value": 2003,
                  "index": 0
                },
                {
                  "value": "Russian Federation",
                  "index": 1
                },
                {
                  "value": 0.07295,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 7,
              "cells": [
                {
                  "value": 2003,
                  "index": 0
                },
                {
                  "value": "Germany",
                  "index": 1
                },
                {
                  "value": -0.00375,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 8,
              "cells": [
                {
                  "value": 2003,
                  "index": 0
                },
                {
                  "value": "World",
                  "index": 1
                },
                {
                  "value": 0.02733,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 9,
              "cells": [
                {
                  "value": 2004,
                  "index": 0
                },
                {
                  "value": "India",
                  "index": 1
                },
                {
                  "value": 0.07848,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 10,
              "cells": [
                {
                  "value": 2004,
                  "index": 0
                },
                {
                  "value": "Russian Federation",
                  "index": 1
                },
                {
                  "value": 0.07175,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 11,
              "cells": [
                {
                  "value": 2004,
                  "index": 0
                },
                {
                  "value": "Germany",
                  "index": 1
                },
                {
                  "value": 0.01161,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 12,
              "cells": [
                {
                  "value": 2004,
                  "index": 0
                },
                {
                  "value": "World",
                  "index": 1
                },
                {
                  "value": 0.03994,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 13,
              "cells": [
                {
                  "value": 2005,
                  "index": 0
                },
                {
                  "value": "India",
                  "index": 1
                },
                {
                  "value": 0.09284,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 14,
              "cells": [
                {
                  "value": 2005,
                  "index": 0
                },
                {
                  "value": "Russian Federation",
                  "index": 1
                },
                {
                  "value": 0.06376,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 15,
              "cells": [
                {
                  "value": 2005,
                  "index": 0
                },
                {
                  "value": "Germany",
                  "index": 1
                },
                {
                  "value": 0.00684,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 16,
              "cells": [
                {
                  "value": 2005,
                  "index": 0
                },
                {
                  "value": "World",
                  "index": 1
                },
                {
                  "value": 0.03464,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 17,
              "cells": [
                {
                  "value": 2006,
                  "index": 0
                },
                {
                  "value": "India",
                  "index": 1
                },
                {
                  "value": 0.09263,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 18,
              "cells": [
                {
                  "value": 2006,
                  "index": 0
                },
                {
                  "value": "Russian Federation",
                  "index": 1
                },
                {
                  "value": 0.08153,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 19,
              "cells": [
                {
                  "value": 2006,
                  "index": 0
                },
                {
                  "value": "Germany",
                  "index": 1
                },
                {
                  "value": 0.037,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 20,
              "cells": [
                {
                  "value": 2006,
                  "index": 0
                },
                {
                  "value": "World",
                  "index": 1
                },
                {
                  "value": 0.04001,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 21,
              "cells": [
                {
                  "value": 2007,
                  "index": 0
                },
                {
                  "value": "India",
                  "index": 1
                },
                {
                  "value": 0.09801,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 22,
              "cells": [
                {
                  "value": 2007,
                  "index": 0
                },
                {
                  "value": "Russian Federation",
                  "index": 1
                },
                {
                  "value": 0.08535,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 23,
              "cells": [
                {
                  "value": 2007,
                  "index": 0
                },
                {
                  "value": "Germany",
                  "index": 1
                },
                {
                  "value": 0.03269,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 24,
              "cells": [
                {
                  "value": 2007,
                  "index": 0
                },
                {
                  "value": "World",
                  "index": 1
                },
                {
                  "value": 0.03939,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 25,
              "cells": [
                {
                  "value": 2008,
                  "index": 0
                },
                {
                  "value": "India",
                  "index": 1
                },
                {
                  "value": 0.0389,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 26,
              "cells": [
                {
                  "value": 2008,
                  "index": 0
                },
                {
                  "value": "Russian Federation",
                  "index": 1
                },
                {
                  "value": 0.05247,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 27,
              "cells": [
                {
                  "value": 2008,
                  "index": 0
                },
                {
                  "value": "Germany",
                  "index": 1
                },
                {
                  "value": 0.01083,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 28,
              "cells": [
                {
                  "value": 2008,
                  "wrap": true,
                  "index": 0
                },
                {
                  "value": "World",
                  "index": 1
                },
                {
                  "value": 0.01333,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 30,
              "cells": [
                {
                  "value": 2009,
                  "index": 0
                },
                {
                  "value": "Russian Federation",
                  "index": 1
                },
                {
                  "value": -0.07832,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 31,
              "cells": [
                {
                  "value": 2009,
                  "index": 0
                },
                {
                  "value": "Germany",
                  "index": 1
                },
                {
                  "value": -0.05127,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 32,
              "cells": [
                {
                  "value": 2009,
                  "index": 0
                },
                {
                  "value": "World",
                  "index": 1
                },
                {
                  "value": -0.02245,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 33,
              "cells": [
                {
                  "value": 2010,
                  "index": 0
                },
                {
                  "value": "India",
                  "index": 1
                },
                {
                  "value": 0.09552,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 34,
              "cells": [
                {
                  "value": 2010,
                  "index": 0
                },
                {
                  "value": "Russian Federation",
                  "index": 1
                },
                {
                  "value": 0.043,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 35,
              "cells": [
                {
                  "value": 2010,
                  "index": 0
                },
                {
                  "value": "Germany",
                  "index": 1
                },
                {
                  "value": 0.0369,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 36,
              "cells": [
                {
                  "value": 2010,
                  "index": 0
                },
                {
                  "value": "World",
                  "index": 1
                },
                {
                  "value": 0.04339,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 37,
              "cells": [
                {
                  "value": 2011,
                  "index": 0
                },
                {
                  "value": "India",
                  "index": 1
                },
                {
                  "value": 0.06855,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 38,
              "cells": [
                {
                  "value": 2011,
                  "index": 0
                },
                {
                  "value": "Russian Federation",
                  "index": 1
                },
                {
                  "value": 0.043,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            },
            {
              "index": 39,
              "cells": [
                {
                  "value": 2011,
                  "index": 0
                },
                {
                  "value": "Germany",
                  "index": 1
                },
                {
                  "value": 0.02995,
                  "format": "0.00%",
                  "index": 2
                }
              ]
            }
          ],
          "columns": [
            {
              "index": 1,
              "width": 122
            },
            {
              "index": 2,
              "width": 103
            }
          ]
        });
    }
</script>

See Also

In this article