HTML Editor

JSpreadsheet data grid provides an HTML editor. This editor enables users to enter formatted content in cells. With a customizable toolbar, users can apply various fonts, sizes, colors, and text alignment.

Documentation

HTML Editor Options

Parameter Description
height: String Height of the HTML editor. Default: '300px'
allowToolbar: Boolean Enable or disable the toolbar. Default: true
toolbar: Array Custom toolbar configuration with formatting controls.
placeholder: String Placeholder text for the HTML editor input.

Toolbar Configuration

The toolbar accepts an array of objects with the following properties:

Property Description
type: String Type of control ('select', 'button', etc.)
width: String Width of the toolbar element.
content: String Icon or text content for the element.
options: Array Available options for select-type controls.
render: Function Custom render function for displaying options.

Examples

Basic HTML Editor

This example demonstrates a basic HTML editor implementation with initial data.

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

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

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

<script>
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('OTlhOTc5ZGIyYjllMWFjYzUwYThkZjRhZGVhYTBkNmFkOTIzMWFkNTkyMWM0NmVjYTJiMDJjNzc3OGNmNjFjOGNlNzBhMWYwNDU4ODlkYzE4YzE4ZmVkZmI1M2U3NDJlMDE4MmVhZDVmMzBhZDBhNTk0OGU3YzdmOTEzZTA4NzgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZeU5EZzFOak0wTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

// Create the spreadsheet with HTML content
jspreadsheet(document.getElementById('spreadsheet'), {
    worksheets: [{
        minDimensions: [4, 4],
        data: [
            [ '<h3>Product Description</h3><p>High-quality product with <strong>excellent</strong> features.</p>' ],
            [ '<p>Standard product with <em>good</em> value for money.</p>' ],
            [ '<p>Premium product with <span style="color: blue;">special</span> characteristics.</p>' ],
        ],
        columns: [
            {
                type: 'html',
                title: 'Content',
                width: 400,
                options: {
                    height: '200px',
                    allowToolbar: true
                }
            }
        ]
    }],
});
</script>
</html>
import React, {useRef} from "react";
import {Spreadsheet, Worksheet} from "@jspreadsheet/react";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";

// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('OTlhOTc5ZGIyYjllMWFjYzUwYThkZjRhZGVhYTBkNmFkOTIzMWFkNTkyMWM0NmVjYTJiMDJjNzc3OGNmNjFjOGNlNzBhMWYwNDU4ODlkYzE4YzE4ZmVkZmI1M2U3NDJlMDE4MmVhZDVmMzBhZDBhNTk0OGU3YzdmOTEzZTA4NzgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZeU5EZzFOak0wTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

export default function App() {
    // Spreadsheet array of worksheets
    const spreadsheet = useRef();
    // Data
    const data = [
        [ '<h3>Product Description</h3><p>High-quality product with <strong>excellent</strong> features.</p>' ],
        [ '<p>Standard product with <em>good</em> value for money.</p>' ],
        [ '<p>Premium product with <span style="color: blue;">special</span> characteristics.</p>' ],
    ];
    // Columns
    const columns = [
        {
            type: 'html',
            title: 'Content',
            width: 400,
            options: {
                height: '200px',
                allowToolbar: true
            }
        }
    ];
    // Render data grid component
    return (
        <Spreadsheet ref={spreadsheet}>
            <Worksheet data={data} columns={columns} minDimensions={[4, 4]}/>
        </Spreadsheet>
    );
}
<template>
    <Spreadsheet ref="spreadsheet">
        <Worksheet :data="data" :columns="columns" :minDimensions="[4, 4]" />
    </Spreadsheet>
</template>

<script>
import { Spreadsheet, Worksheet } from "@jspreadsheet/vue";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";

// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('OTlhOTc5ZGIyYjllMWFjYzUwYThkZjRhZGVhYTBkNmFkOTIzMWFkNTkyMWM0NmVjYTJiMDJjNzc3OGNmNjFjOGNlNzBhMWYwNDU4ODlkYzE4YzE4ZmVkZmI1M2U3NDJlMDE4MmVhZDVmMzBhZDBhNTk0OGU3YzdmOTEzZTA4NzgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZeU5EZzFOak0wTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

export default {
    components: {
        Spreadsheet,
        Worksheet,
    },
    data() {
        // Data
        const data = [
            [ '<h3>Product Description</h3><p>High-quality product with <strong>excellent</strong> features.</p>' ],
            [ '<p>Standard product with <em>good</em> value for money.</p>' ],
            [ '<p>Premium product with <span style="color: blue;">special</span> characteristics.</p>' ],
        ];
        // Columns
        const columns = [
            {
                type: 'html',
                title: 'Content',
                width: 400,
                options: {
                    height: '200px',
                    allowToolbar: true
                }
            }
        ];

        return {
            data,
            columns,
        };
    }
}
</script>
import { Component, ViewChild, ElementRef, AfterViewInit } from "@angular/core";
import jspreadsheet from "jspreadsheet";
import "jspreadsheet/dist/jspreadsheet.css";
import "jsuites/dist/jsuites.css";

// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('OTlhOTc5ZGIyYjllMWFjYzUwYThkZjRhZGVhYTBkNmFkOTIzMWFkNTkyMWM0NmVjYTJiMDJjNzc3OGNmNjFjOGNlNzBhMWYwNDU4ODlkYzE4YzE4ZmVkZmI1M2U3NDJlMDE4MmVhZDVmMzBhZDBhNTk0OGU3YzdmOTEzZTA4NzgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZeU5EZzFOak0wTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

// Create component
@Component({
    standalone: true,
    selector: "app-root",
    template: `<div #spreadsheet></div>`,
})
export class AppComponent implements AfterViewInit {
    @ViewChild("spreadsheet") spreadsheet: ElementRef;
    // Worksheets
    worksheets: jspreadsheet.worksheetInstance[];
    // Create a new data grid
    ngAfterViewInit() {
        // Create spreadsheet
        this.worksheets = jspreadsheet(this.spreadsheet.nativeElement, {
            worksheets: [{
                minDimensions: [4, 4],
                data: [
                    [ '<h3>Product Description</h3><p>High-quality product with <strong>excellent</strong> features.</p>' ],
                    [ '<p>Standard product with <em>good</em> value for money.</p>' ],
                    [ '<p>Premium product with <span style="color: blue;">special</span> characteristics.</p>' ],
                ],
                columns: [
                    {
                        type: 'html',
                        title: 'Content',
                        width: 400,
                        options: {
                            height: '200px',
                            allowToolbar: true
                        }
                    }
                ]
            }]
        });
    }
}

Customized HTML Editor Toolbar

This example demonstrates how to customize the HTML toolbar with font selection, size options, and text alignment controls.

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

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

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

<script>
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('OTlhOTc5ZGIyYjllMWFjYzUwYThkZjRhZGVhYTBkNmFkOTIzMWFkNTkyMWM0NmVjYTJiMDJjNzc3OGNmNjFjOGNlNzBhMWYwNDU4ODlkYzE4YzE4ZmVkZmI1M2U3NDJlMDE4MmVhZDVmMzBhZDBhNTk0OGU3YzdmOTEzZTA4NzgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZeU5EZzFOak0wTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

// Customize the HTML editor
const options = {
    height: '140px',
    allowToolbar: true,
    toolbar: [{
        type:'select',
        width: '160px',
        options: [ 'Verdana', 'Arial', 'Courier New' ],
        bottom: true,
        render: function(e) {
            return '<span style="font-family:' + e + '">' + e + '</span>';
        },
        onchange: function(a,b,c,d) {
            document.execCommand('fontName', false, d);
        }
    },
        {
            type: 'select',
            width: '48px',
            content: 'format_size',
            options: ['X-small','Small','Medium','Large','X-large'],
            bottom: true,
            render: function(e) {
                return '<span style="font-size:' + e + '">' + e + '</span>';
            },
            onchange: function(a,b,c,d,e) {
                document.execCommand('fontSize', false, e+1);
            }
        },
        {
            type: 'select',
            width: '50px',
            options: ['format_align_left','format_align_center','format_align_right','format_align_justify'],
            bottom: true,
            render: function(e) {
                return '<i class="material-icons">' + e + '</i>';
            },
            onchange: function(a,b,c,d) {
                if (d == 'format_align_left') {
                    document.execCommand('justifyLeft');
                } else if (d === 'format_align_center') {
                    document.execCommand('justifyCenter');
                } else if (d === 'format_align_right') {
                    document.execCommand('justifyRight');
                } else if (d === 'format_align_justify') {
                    document.execCommand('justifyFull');
                }
            }
        }
    ]
}

// Create the spreadsheet
jspreadsheet(document.getElementById('spreadsheet'), {
    tabs: true,
    toolbar: true,
    worksheets: [{
        minDimensions: [6,6],
        columns: [
            {
                type: 'html', options: options
            }
        ]
    }],
});
</script>
</html>
import React, {useRef} from "react";
import {Spreadsheet, Worksheet} from "@jspreadsheet/react";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";

// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('OTlhOTc5ZGIyYjllMWFjYzUwYThkZjRhZGVhYTBkNmFkOTIzMWFkNTkyMWM0NmVjYTJiMDJjNzc3OGNmNjFjOGNlNzBhMWYwNDU4ODlkYzE4YzE4ZmVkZmI1M2U3NDJlMDE4MmVhZDVmMzBhZDBhNTk0OGU3YzdmOTEzZTA4NzgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZeU5EZzFOak0wTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

export default function App() {
    // Spreadsheet array of worksheets
    const spreadsheet = useRef();

    // Customize the HTML editor
    const options = {
        height: '140px',
        allowToolbar: true,
        toolbar: [{
            type:'select',
            width: '160px',
            options: [ 'Verdana', 'Arial', 'Courier New' ],
            bottom: true,
            render: function(e) {
                return '<span style="font-family:' + e + '">' + e + '</span>';
            },
            onchange: function(a,b,c,d) {
                document.execCommand('fontName', false, d);
            }
        },
        {
            type: 'select',
            width: '48px',
            content: 'format_size',
            options: ['X-small','Small','Medium','Large','X-large'],
            bottom: true,
            render: function(e) {
                return '<span style="font-size:' + e + '">' + e + '</span>';
            },
            onchange: function(a,b,c,d,e) {
                document.execCommand('fontSize', false, e+1);
            }
        },
        {
            type: 'select',
            width: '50px',
            options: ['format_align_left','format_align_center','format_align_right','format_align_justify'],
            bottom: true,
            render: function(e) {
                return '<i class="material-icons">' + e + '</i>';
            },
            onchange: function(a,b,c,d) {
                if (d == 'format_align_left') {
                    document.execCommand('justifyLeft');
                } else if (d === 'format_align_center') {
                    document.execCommand('justifyCenter');
                } else if (d === 'format_align_right') {
                    document.execCommand('justifyRight');
                } else if (d === 'format_align_justify') {
                    document.execCommand('justifyFull');
                }
            }
        }]
    };

    // Columns
    const columns = [
        { type: 'html', options: options }
    ];

    // Render data grid component
    return (
        <Spreadsheet ref={spreadsheet} tabs={true} toolbar={true}>
            <Worksheet columns={columns} minDimensions={[6, 6]}/>
        </Spreadsheet>
    );
}
<template>
    <Spreadsheet ref="spreadsheet" :tabs="true" :toolbar="true">
        <Worksheet :columns="columns" :minDimensions="[6, 6]" />
    </Spreadsheet>
</template>

<script>
import { Spreadsheet, Worksheet } from "@jspreadsheet/vue";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";

// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('OTlhOTc5ZGIyYjllMWFjYzUwYThkZjRhZGVhYTBkNmFkOTIzMWFkNTkyMWM0NmVjYTJiMDJjNzc3OGNmNjFjOGNlNzBhMWYwNDU4ODlkYzE4YzE4ZmVkZmI1M2U3NDJlMDE4MmVhZDVmMzBhZDBhNTk0OGU3YzdmOTEzZTA4NzgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZeU5EZzFOak0wTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

export default {
    components: {
        Spreadsheet,
        Worksheet,
    },
    data() {
        // Customize the HTML editor
        const options = {
            height: '140px',
            allowToolbar: true,
            toolbar: [{
                type:'select',
                width: '160px',
                options: [ 'Verdana', 'Arial', 'Courier New' ],
                bottom: true,
                render: function(e) {
                    return '<span style="font-family:' + e + '">' + e + '</span>';
                },
                onchange: function(a,b,c,d) {
                    document.execCommand('fontName', false, d);
                }
            },
            {
                type: 'select',
                width: '48px',
                content: 'format_size',
                options: ['X-small','Small','Medium','Large','X-large'],
                bottom: true,
                render: function(e) {
                    return '<span style="font-size:' + e + '">' + e + '</span>';
                },
                onchange: function(a,b,c,d,e) {
                    document.execCommand('fontSize', false, e+1);
                }
            },
            {
                type: 'select',
                width: '50px',
                options: ['format_align_left','format_align_center','format_align_right','format_align_justify'],
                bottom: true,
                render: function(e) {
                    return '<i class="material-icons">' + e + '</i>';
                },
                onchange: function(a,b,c,d) {
                    if (d == 'format_align_left') {
                        document.execCommand('justifyLeft');
                    } else if (d === 'format_align_center') {
                        document.execCommand('justifyCenter');
                    } else if (d === 'format_align_right') {
                        document.execCommand('justifyRight');
                    } else if (d === 'format_align_justify') {
                        document.execCommand('justifyFull');
                    }
                }
            }]
        };

        // Columns
        const columns = [
            { type: 'html', options: options }
        ];

        return {
            columns,
        };
    }
}
</script>
import { Component, ViewChild, ElementRef, AfterViewInit } from "@angular/core";
import jspreadsheet from "jspreadsheet";
import "jspreadsheet/dist/jspreadsheet.css";
import "jsuites/dist/jsuites.css";

// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('OTlhOTc5ZGIyYjllMWFjYzUwYThkZjRhZGVhYTBkNmFkOTIzMWFkNTkyMWM0NmVjYTJiMDJjNzc3OGNmNjFjOGNlNzBhMWYwNDU4ODlkYzE4YzE4ZmVkZmI1M2U3NDJlMDE4MmVhZDVmMzBhZDBhNTk0OGU3YzdmOTEzZTA4NzgsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZeU5EZzFOak0wTENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

// Create component
@Component({
    standalone: true,
    selector: "app-root",
    template: `<div #spreadsheet></div>`,
})
export class AppComponent implements AfterViewInit {
    @ViewChild("spreadsheet") spreadsheet: ElementRef;
    // Worksheets
    worksheets: jspreadsheet.worksheetInstance[];
    // Create a new data grid
    ngAfterViewInit() {
        // Customize the HTML editor
        const options = {
            height: '140px',
            allowToolbar: true,
            toolbar: [{
                type:'select',
                width: '160px',
                options: [ 'Verdana', 'Arial', 'Courier New' ],
                bottom: true,
                render: function(e: any) {
                    return '<span style="font-family:' + e + '">' + e + '</span>';
                },
                onchange: function(a: any,b: any,c: any,d: any) {
                    document.execCommand('fontName', false, d);
                }
            },
            {
                type: 'select',
                width: '48px',
                content: 'format_size',
                options: ['X-small','Small','Medium','Large','X-large'],
                bottom: true,
                render: function(e: any) {
                    return '<span style="font-size:' + e + '">' + e + '</span>';
                },
                onchange: function(a: any,b: any,c: any,d: any,e: any) {
                    document.execCommand('fontSize', false, e+1);
                }
            },
            {
                type: 'select',
                width: '50px',
                options: ['format_align_left','format_align_center','format_align_right','format_align_justify'],
                bottom: true,
                render: function(e: any) {
                    return '<i class="material-icons">' + e + '</i>';
                },
                onchange: function(a: any,b: any,c: any,d: any) {
                    if (d == 'format_align_left') {
                        document.execCommand('justifyLeft');
                    } else if (d === 'format_align_center') {
                        document.execCommand('justifyCenter');
                    } else if (d === 'format_align_right') {
                        document.execCommand('justifyRight');
                    } else if (d === 'format_align_justify') {
                        document.execCommand('justifyFull');
                    }
                }
            }]
        };

        // Create spreadsheet
        this.worksheets = jspreadsheet(this.spreadsheet.nativeElement, {
            tabs: true,
            toolbar: true,
            worksheets: [{
                minDimensions: [6, 6],
                columns: [
                    { type: 'html', options: options }
                ]
            }]
        });
    }
}

Related content

  • Custom Editors - Learn how to create custom editors for your spreadsheet cells.
  • Column Types - Explore all available column types in Jspreadsheet.