トッカンソフトウェア

Jspreadsheet CE

Jspreadsheet CEはテーブル表示のライブラリです。
Jspreadsheet CEはMIT ライセンス(無償)、Jspreadsheet Proは有償になります。

Version 5でworksheets対応が行われ、jspreadsheet定義にworksheetsが必須になりました。

テーブル表示


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Jspreadsheet CE のテストページ</title>
    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
</head>

<body>
    <div id="spreadsheet"></div>
    <script>
        var data = [
            ['text1', 'aaa'],
            ['text2', 'bbb'],
        ];

        var table = jspreadsheet(document.getElementById('spreadsheet'), {
            worksheets: [{
                data: data,
                columns: [
                    {
                        type: 'text',
                        title: 'title1',
                    },
                    {
                        type: 'dropdown',
                        title: 'title2',
                        source: [
                            "aaa",
                            "bbb",
                            "ccc",
                        ]
                    },
                ]
            }]
        });

    </script>
</body>

</html>
実行結果



スタイル


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Jspreadsheet CE のテストページ</title>
    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
</head>

<body>
    <div id="spreadsheet"></div>
    <script>
        var data = [
            ['text1', 'aaa'],
            ['text2', 'bbb'],
        ];

        var table = jspreadsheet(document.getElementById('spreadsheet'), {
            worksheets: [{
                data: data,
                columns: [
                    {
                        type: 'text',
                        title: 'title1',
                        width: '100px',
                    },
                    {
                        type: 'text',
                        title: 'title2',
                    }
                ],
                style: {
                    A1: 'background-color: yellow;text-align: left;'
                },
            }]
        });

        table[0].setStyle('A2', 'background-color', 'green');
        table[0].getCell(1, 0).style.backgroundColor = 'orange'; 
    </script>
</body>

</html>
スタイルの行、列指定はJspreadsheet CEではできません。Jspreadsheet Proならできます。

実行結果

読み込み専用


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Jspreadsheet CE のテストページ</title>
    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
</head>

<body>
    <div id="spreadsheet"></div>
    <script>
        var data = [
            ['text1', 'aaa'],
            ['text2', 'bbb'],
        ];

        var table = jspreadsheet(document.getElementById('spreadsheet'), {
            worksheets: [{
                data: data,
                columns: [
                    {
                        type: 'text',
                        title: 'title1',
                    },
                    {
                        type: 'text',
                        title: 'title2',
                        readOnly: true,
                    }
                ],
            }]
        });

    </script>
</body>

</html>
実行結果

マージセル


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Jspreadsheet CE のテストページ</title>
    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
</head>

<body>
    <div id="spreadsheet"></div>
    <script>
        var data = [
            ['text1', 'aaa'],
            ['text2', 'bbb'],
        ];

        var table = jspreadsheet(document.getElementById('spreadsheet'), {
            worksheets: [{
                data: data,
                columns: [
                    {
                        type: 'text',
                        title: 'title1',
                    },
                    {
                        type: 'text',
                        title: 'title2',
                    },
                ],
                mergeCells: {
                    A1: [2, 1]
                },
            }]
        });

        table[0].setMerge('A2', 2, 1);
    </script>
</body>

</html>
実行結果

入力


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Jspreadsheet CE のテストページ</title>
    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
</head>

<body>
    <div id="spreadsheet"></div>
    <script>
        var data = [
            ['text1', 'aaa'],
            ['text2', 'bbb'],
        ];

        var table = jspreadsheet(document.getElementById('spreadsheet'), {
            worksheets: [{
                data: data,
                columns: [
                    { type: 'text', title: 'text' },
                    { type: 'dropdown', title: 'dropdown', width: 100, source: ["abc", "bcd", "cde"] },
                    { type: 'dropdown', title: 'autocomplete', width: 120, source: ["abc", "bcd", "cde"], autocomplete: true },
                    { type: 'dropdown', title: 'multiple', width: 100, source: ["abc", "bcd", "cde"], multiple: true },
                    { type: 'calendar', title: 'calendar', width: 100, options: { format: 'YYYY/MM/DD' } },
                    { type: 'checkbox', title: 'checkbox', width: 100, },
                    { type: 'numeric', title: 'numeric', width: 100, mask: '#,##', },
                ],
            }]
        });

    </script>
</body>

</html>
実行結果

列固定

遅延読み込み


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Jspreadsheet CE のテストページ</title>
    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
</head>

<body>
    <div id="spreadsheet"></div>
    <script>
        let columns = [];
        for (let x = 0; x < 20; x++) {
            columns.push({
                type: 'text',
                title: 'title' + x,
                width: '100px',
            });
        }

        var datas = [];
        for (let y = 0; y < 500; y++) {
            var data = [];
            for (let x = 0; x < columns.length; x++) {
                data.push("data_" + y + "_" + x);
            }
            datas.push(data);
        }

        var table = jspreadsheet(document.getElementById('spreadsheet'), {
            worksheets: [{
                data: datas,
                columns: columns,
                tableOverflow: true,
                lazyLoading: true,
                tableWidth: '400px',
                tableHeight: '400px',
                freezeColumns: 2,
            }]
        });

    </script>
</body>

</html>
実行結果


行固定はJspreadsheet CEでは出来ませんでした。Jspreadsheet Proではできるみたいです。
(2023/09/19 時点)

ページネーション

検索


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Jspreadsheet CE のテストページ</title>
    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
</head>

<body>
    <div id="spreadsheet"></div>
    <script>
        let columns = [];
        for (let x = 0; x < 20; x++) {
            columns.push({
                type: 'text',
                title: 'title' + x,
                width: '100px',
            });
        }

        var datas = [];
        for (let y = 0; y < 500; y++) {
            var data = [];
            for (let x = 0; x < columns.length; x++) {
                data.push("data_" + y + "_" + x);
            }
            datas.push(data);
        }

        var table = jspreadsheet(document.getElementById('spreadsheet'), {
            worksheets: [{
                data: datas,
                columns: columns,
                search: true,
                pagination: 10,
            }]
        });

    </script>
</body>

</html>
実行結果

データゲット、セット、戻す


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Jspreadsheet CE のテストページ</title>
    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
</head>

<body>
    <div id="spreadsheet"></div>
    <br />
    <button onclick="getData()">getData</button>
    <button onclick="getRowData()">getRowData</button>
    <button onclick="getColumnData()">getColumnData</button>
    <button onclick="getValue()">getValue</button>
    <button onclick="getValueFromCoords()">getValueFromCoords</button>
    <br />
    <button onclick="setData()">setData</button>
    <button onclick="setRowData()">setRowData</button>
    <button onclick="setColumnData()">setColumnData</button>
    <button onclick="setValue()">setValue</button>
    <button onclick="setValueFromCoords()">setValueFromCoords</button>
    <br />
    <button onclick="undo()">undo</button>
    <button onclick="redo()">redo</button>
    <script>
        var data = [
            ['text1', 'aaa'],
            ['text2', 'bbb'],
        ];

        var table = jspreadsheet(document.getElementById('spreadsheet'), {
            worksheets: [{
                data: data,
                columns: [
                    {
                        type: 'text',
                        title: 'title1',
                    },
                    {
                        type: 'text',
                        title: 'title2',
                    },
                ]
            }]
        });

        function getData() {

            table[0].updateSelectionFromCoords(0, 0, 1, 0);
            alert(table[0].getData(true));

            alert(table[0].getData(false));

            alert(JSON.stringify(table[0].getData({ asJson: true })));
        }
        function getRowData() {
            alert(table[0].getRowData(0));
        }
        function getColumnData() {
            alert(table[0].getColumnData(0));
        }
        function getValue() {
            alert(table[0].getValue("A1"));
        }
        function getValueFromCoords() {
            alert(table[0].getValueFromCoords(0, 0));
        }

        function setData() {
            table[0].setData([["a", "b"], ["c", "d"]]);
        }
        function setRowData() {
            table[0].setRowData(0, ["e", "f"]);
        }
        function setColumnData() {
            table[0].setColumnData(0, ["g", "h"]);
        }
        function setValue() {
            table[0].setValue("A1", "i", true);
        }
        function setValueFromCoords() {
            table[0].setValueFromCoords(0, 0, "j", true);
        }
        function undo() {
            table[0].undo();
        }
        function redo() {
            table[0].redo();
        }

    </script>
</body>

</html>
実行結果




イベント


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Jspreadsheet CE のテストページ</title>
    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
</head>

<body>
    <div id="spreadsheet"></div>
    <select id="sel1" size="10" multiple></select>
    <script>
        var data = [
            ['text1', 'aaa'],
            ['text2', 'bbb'],
        ];

        function debug(val) {
            var option = document.createElement("option");
            option.text = val;
            var obj = document.getElementById("sel1");
            obj.add(option, 0);
        }

        var table = jspreadsheet(document.getElementById('spreadsheet'), {
            worksheets: [{
                data: data,
                columns: [
                    {
                        type: 'text',
                        title: 'title1',
                    },
                    {
                        type: 'dropdown',
                        title: 'title2',
                        source: [
                            "aaa",
                            "bbb",
                            "ccc",
                        ]
                    },
                ]
            }],
            onchange: function (el, cell, x, y, newValue, oldValue) {
                debug("onchange:" + x + ":" + y + ":" + oldValue + "-" + newValue);

                cell.style.backgroundColor = 'orange';
                // こちらでも動作します
                // table[0].getCell(Number(x), Number(y)).style.backgroundColor = 'blue';

			},
            onselection: function (el, px, py, ux, uy, origin) {
                debug("onselection:" + px + ":" + py + ":" + ux + ":" + uy);
            },
            onblur: function (el) {
                debug("onblur");
            },
            onbeforepaste: function (el, data, x, y) {

                debug("onbeforepaste:" + x + ":" + y + ":" + data.length);

                if (data.length != 1) {
                    // return falseで貼り付けの取り消し
                    return false;
                }
            }
        });

    </script>
</body>

</html>
上記例はイベントの一部です。他のイベントは公式ページを参照して下さい。

実行結果

ワークシート


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Jspreadsheet CE のテストページ</title>
    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
</head>

<body>
    <div id="spreadsheet"></div>
    <input type="button" value="Add" id="btn1" />
    <script>
        var data = [
            ['text1', 'aaa'],
            ['text2', 'bbb'],
        ];

        var table = jspreadsheet(document.getElementById('spreadsheet'), {
            tabs: true,
            worksheets: [{
                data: data,
                worksheetName: 'default',
                columns: [
                    {
                        type: 'text',
                        title: 'title1',
                    },
                    {
                        type: 'text',
                        title: 'title2',
                    },
                ]
            }]
        });

        document.getElementById("btn1").onclick = function () {

            table[0].createWorksheet({

                minDimensions: [2, 2],
                worksheetName: 'from Button',
            });
        }

    </script>
</body>

</html>
実行結果

初期設定


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Jspreadsheet CE のテストページ</title>
    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />
</head>

<body>
    <div id="spreadsheet"></div>
    <script>
        var data = [
            ['text1', 'aaa'],
            ['text2', 'bbb'],
        ];

        var table = jspreadsheet(document.getElementById('spreadsheet'), {
            // 右クリックメニューを表示させない
            contextMenu: function () {
                return false;
            },
            worksheets: [{
                // 行を追加させない
                allowInsertRow: false,
                // 列を追加させない
                allowInsertColumn: false,
                // 編集させない
                //editable: false,
                data: data,
                columns: [
                    {
                        type: 'text',
                        title: 'title1',
                    },
                    {
                        type: 'text',
                        title: 'title2',
                    },
                ]
            }]
        });

    </script>
</body>

</html>
上記例は初期設定の一部です。他の初期設定は公式ページ(v4)を参照して下さい。

実行結果

ライブラリ取得

URLで指定

Jspreadsheet CEを使用する場合、以下を指定します。

    <script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css"
        type="text/css" />
    <script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" type="text/css" />

入手したライブラリを指定

ライブラリをローカル環境等に置いて動作させる場合は以下を取得します。
https://github.com/jspreadsheet/ceにアクセスして、以下をダウンロードします。

解凍してdistフォルダに対象ファイルが入っています。
https://github.com/jsuites/jsuitesからも同じようにダウンロードします。

ファイルを環境に置いた後、URLを以下のように変更します。

<script src="../jspreadsheet-ce/index.js"></script>
<script src="../jspreadsheet-ce/jsuites.js"></script>
<link rel="stylesheet" href="../jspreadsheet-ce/jspreadsheet.css" type="text/css" />
<link rel="stylesheet" href="../jspreadsheet-ce/jsuites.css" type="text/css" />


ページのトップへ戻る