ChartJS

The =CHART method is deprecated from version 12. Please consider using the Chart Extension.

Examples

Embed charts on your data grid

Integrating charts in your online spreadsheets. See this example implemented using React Data Grid.

<html>
<script src="https://jspreadsheet.com/v11/jspreadsheet.js"></script>
<script src="https://jsuites.net/v5/jsuites.js"></script>
<link rel="stylesheet" href="https://jsuites.net/v5/jsuites.css" type="text/css" />
<link rel="stylesheet" href="https://jspreadsheet.com/v11/jspreadsheet.css" type="text/css" />

<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />

<script src="https://cdn.jsdelivr.net/npm/@jspreadsheet/formula-charts/dist/index.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.js"></script>

<div id="spreadsheet"></div>

<script>
jspreadsheet(document.getElementById('spreadsheet'), {
    worksheets: [{
        csv: '/jspreadsheet/sales.csv',
        csvHeaders: false,
        columns: [
            { width:'150px' },
        ],
        defaultColWidth: '50px',
        mergeCells: {
            B1: [3, 1],
            E1: [10, 1]
        },
        rows: {
            0: { height:'300px' }
        },
        style: {
            'A1': 4,
            'N3': 3,
            'A3:M3': 0,
            'A4:M6': 1,
            'N4:N6': 4,
        }
    }],
    style: [
        'border-bottom:2px solid black;font-weight:bold;font-size:0.8em',
        'border-bottom:2px solid black;font-weight:bold;font-size:0.8em;background-color: #e0eaff',
        'border-bottom:1px solid black;font-size:0.8em',
        'border-bottom:1px solid black;font-size:0.8em;background-color: #e0eaff',
        'background-color: #e0eaff',
    ],
});
</script>
</html>
import React, { useRef } from "react";
import { Spreadsheet, Worksheet, jspreadsheet } from "@jspreadsheet/react";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";

import "@jspreadsheet/formula-charts";

// Set the license
const license = 'MjJkN2I5MTRjYTZhMjUwY2ViMTA2NWZlYjllMjA4OGUzNzk1YWMwYWY0NWM4ZDFhOGFlZTk5MzgxMDI3Mzk5YWQ2Njk5Yzg1YjQ1ZWE0NTJiZmEwMGRiOWJlZWM2NzlhMzcxNWIyNDljMTE4Yzc5NDE4YWM5ZGNkMDVmODdhZjksZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZek9EWTJOamd4TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5';

// Create the react data grid
export default function App() {
    const spreadsheet = useRef();
    // Global style definitions
    const gridStyle = [
        'border-bottom:2px solid black;font-weight:bold;font-size:0.8em',
        'border-bottom:2px solid black;font-weight:bold;font-size:0.8em;background-color: #e0eaff',
        'border-bottom:1px solid black;font-size:0.8em',
        'border-bottom:1px solid black;font-size:0.8em;background-color: #e0eaff',
        'background-color: #e0eaff',
    ];
    // Columns
    const columns = [
        { width:'150px' },
    ];
    // Style with ranges and the position of the style string in the globalStyle array
    const style = {
        'A1': 4,
        'N3': 3,
        'A3:M3': 0,
        'A4:M6': 1,
        'N4:N6': 4,
    };
    // Merged cells
    const mergeCells = { B1: [3, 1], E1: [10, 1] };
    // Rows
    const rows = { 0: height: '300px' };

    // Render data grid component
    return (
        <Spreadsheet ref={spreadsheet} license={license} style={gridStyle}>
            <Worksheet csv={"/jspreadsheet/sales.csv"}
                columns={columns}
                csvHeaders={"false"}
                defaultColWidth={"50px"}
                mergeCells={mergeCells}
                style={style}
                rows={rows}
            />
        </Spreadsheet>
    );
}
<template>
  <Spreadsheet ref="spreadsheet" :license="license" :styles="gridStyle">
    <Worksheet
      csv="./sales.csv"
      :columns="columns"
      :csvHeaders="false"
      defaultColWidth="50px"
      :mergeCells="mergeCells"
      :style="style"
      :rows="rows"
    />
  </Spreadsheet>
</template>
 
<script>
import { Spreadsheet, Worksheet } from "@jspreadsheet/vue";
import "@jspreadsheet/formula-charts";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
 
const license = 'MjJkN2I5MTRjYTZhMjUwY2ViMTA2NWZlYjllMjA4OGUzNzk1YWMwYWY0NWM4ZDFhOGFlZTk5MzgxMDI3Mzk5YWQ2Njk5Yzg1YjQ1ZWE0NTJiZmEwMGRiOWJlZWM2NzlhMzcxNWIyNDljMTE4Yzc5NDE4YWM5ZGNkMDVmODdhZjksZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZek9EWTJOamd4TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5';
 
export default {
  components: {
    Spreadsheet,
    Worksheet,
  },
  data() {
    return {
      columns: [{ width: "150px" }],
      rows: { 0: { height: "300px" } },
      mergeCells: {
        B1: [3, 1],
        E1: [10, 1],
      },
      gridStyle: [
        "border-bottom:2px solid black;font-weight:bold;font-size:0.8em",
        "border-bottom:2px solid black;font-weight:bold;font-size:0.8em;background-color: #e0eaff",
        "border-bottom:1px solid black;font-size:0.8em",
        "border-bottom:1px solid black;font-size:0.8em;background-color: #e0eaff",
        "background-color: #e0eaff",
      ],
      style: { A1: 4, N3: 3, "A3:M3": 0, "A4:M6": 1, "N4:N6": 4 },
      license,
    };
  },
};
</script>
import { Component, ViewChild, ElementRef } from "@angular/core";
import jspreadsheet from "jspreadsheet";

import "jspreadsheet/dist/jspreadsheet.css"
import "jsuites/dist/jsuites.css"

import "@jspreadsheet/formula-charts";

// Set the license
jspreadsheet.setLicense('MjJkN2I5MTRjYTZhMjUwY2ViMTA2NWZlYjllMjA4OGUzNzk1YWMwYWY0NWM4ZDFhOGFlZTk5MzgxMDI3Mzk5YWQ2Njk5Yzg1YjQ1ZWE0NTJiZmEwMGRiOWJlZWM2NzlhMzcxNWIyNDljMTE4Yzc5NDE4YWM5ZGNkMDVmODdhZjksZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZek9EWTJOamd4TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

// Create the data grid component
@Component({
    angular: true,
    selector: "app-root",
    template: `<div #spreadsheet></div>`,
})
export class AppComponent {
    @ViewChild("spreadsheet") spreadsheet: ElementRef;
    // Worksheets
    worksheets: jspreadsheet.worksheetInstance[];
    // Create a new data grid
    ngAfterViewInit() {
        // Create summary spreadsheet
        jspreadsheet(this.spreadsheet.nativeElement, {
            worksheets: [{
                csv: '/jspreadsheet/sales.csv',
                csvHeaders: false,
                columns: [
                    { width:'150px' },
                ],
                defaultColWidth: '50px',
                mergeCells: {
                    B1: [3, 1],
                    E1: [10, 1]
                },
                rows: {
                    0: { height:'300px' }
                },
                style: {
                    'A1': 4,
                    'N3': 3,
                    'A3:M3': 0,
                    'A4:M6': 1,
                    'N4:N6': 4,
                }
            }],
            style: [
                'border-bottom:2px solid black;font-weight:bold;font-size:0.8em',
                'border-bottom:2px solid black;font-weight:bold;font-size:0.8em;background-color: #e0eaff',
                'border-bottom:1px solid black;font-size:0.8em',
                'border-bottom:1px solid black;font-size:0.8em;background-color: #e0eaff',
                'background-color: #e0eaff',
            ],
        });
    }
}

More examples and documentation

To learn much more about ChartJS extensions for Jspreadsheet: