SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

高機能JavaScriptグリッド部品「SpreadJS」の活用(AD)

ExcelライクなWebアプリを実現するJavaScriptライブラリ「SpreadJS」のはじめ方と主な機能

ASP.NET MVCとSpreadJSで業務Webアプリケーションモダン化計画 第2回

  • このエントリーをはてなブックマークに追加

基本的な使い方(4)

クライアントサイドのExcelインポート・エクスポート

  • サンプルファイル:index.excel.html

 SpreadJSでは、クライアントサイドでのExcelファイルのインポート・エクスポートにも対応しています。SpreadJSのサイトにオンラインのデモがありますので、こちらもご覧ください。

 Excelファイルのエクスポートでは、ブラウザ側でファイルをダウンロードする仕組みが必要です。本稿のサンプルでは、「window.navigator.msSaveBlob(IE用)」と「aタグのdownload属性」を使用しています。

 それでは、実装方法を紹介します。クライアントサイドExcelIOを使用するには、冒頭で挙げた必要なファイルの他に「gc.spread.excelio.9.20161.0.min.js」ファイルを配置し、参照します。

HTMLファイルに追加
<script src="/scripts/spreadjs/gc.spread.excelio.9.20161.0.min.js"></script>

 例として、次のようなExcelファイルを用意しました。

 サンプルファイルにてこのExcelファイルをインポートすると、次のようにスプレッドシートに表示されます。

 また、ここでExcelファイルのエクスポートを実行すると、次の図のようにファイルがダウンロードされます。

 インポート・エクスポートの実装部分は、次のようになっています(一部省略しています。詳細はサンプルファイルをご参照ください)。

インポート
export function ImportFile() {
    let input: any = document.getElementById("fileDemo");
    let excelFile = input.files[0];
    excelIO.open(excelFile, function (json) {
        var workbookObj = JSON.parse(json);
        workbook.fromJSON(workbookObj);
    }, e => {
        console.log(e);
    });
}
エクスポート
export function ExportFile() {
    let input: any = document.getElementById("exportFileName");
    var fileName = input.value;
    if (fileName.substr(-5, 5) !== ".xlsx") {
        fileName += ".xlsx";
    }
    let json = JSON.stringify(workbook.toJSON(null));

    excelIO.save(json, function (blob) {
        if(window.navigator.msSaveBlob) {
            window.navigator.msSaveBlob(blob, fileName);
        } else {
            var a: any= document.createElement("a");
            a.href = URL.createObjectURL(blob);
            a.target = "_blank";
            a.download = fileName;
            a.click();
            document.removeChild(a);
        }
    }, e => {
        console.log(e);
    });
}

 インポート・エクスポート機能により、Excelとスプレッドシート間で保持されるデータは、製品サンプルをご参照してください。

 また、クライアントサイドで処理されるので、大きなサイズのファイルの場合は注意しなければいけません。

テーブルスライサー

  • サンプルファイル:index.slicer.html

 Excel 2010以降では、ピボットテーブルのデータをフィルターする新しい方法としてスライサー機能が追加されています。SpreadJSにおいても、このスライサーを実現できます。

 次の図は、上がExcelにてスライサーを挿入した図、下がSpreadJSにてスライサーを実装した図です。

 スライサーの項目を選択すると、条件に合うデータが表示されます。

 テーブルスライサーを実装するには、テーブルにデータソースをバインドし、それぞれの列に対してスライサーのオブジェクトを追加します。

テーブルスライサーの例
let data = [
    { name: "安 龍吉", group: "A", math: 100, english: 95, japanese: 100 },
    { name: "多部 詩織", group: "B", math: 15, english: 85, japanese: 60 },
    { name: "榎本 恵望子", group: "C", math: 60, english: 78, japanese: 50 },
    { name: "山内 俊二", group: "A", math: 30, english: 20, japanese: 10 },
    { name: "有田 あき", group: "B", math: 40, english: 55, japanese: 50 },
    { name: "水田 勝久", group: "A", math: 85, english: 80, japanese: 60 }
];

let nameInfo = new GC.Spread.Sheets.Tables.TableColumn("name");
nameInfo.name("名前");
nameInfo.dataField("name");
let groupInfo = new GC.Spread.Sheets.Tables.TableColumn("group");
groupInfo.name("グループ");
groupInfo.dataField("group");
let mathInfo = new GC.Spread.Sheets.Tables.TableColumn("math");
mathInfo.name("数学");
mathInfo.dataField("math");
//…省略

//テーブルを追加します
let table = sheet.tables.addFromDataSource("ScoreTable", 2, 1, data, GC.Spread.Sheets.Tables.TableThemes.light1);
table.bindColumns([nameInfo, groupInfo, mathInfo, englishInfo, japaneseInfo]);

//スライサーを追加します
{
    let slicerStyle = GC.Spread.Sheets.Slicers.SlicerStyles.light1();
    let slicer =  sheet.slicers.add("slicer1", table.name(), "グループ", slicerStyle);
}
{
    let slicerStyle = GC.Spread.Sheets.Slicers.SlicerStyles.light1();
    let slicer =  sheet.slicers.add("slicer2",  table.name(), "数学", slicerStyle);
}
//…省略

 他、テーブルスライサーをカスタマイズしたり、スライサーをHTMLの要素として作成したりできます。

最後に

 以上、SpreadJSの基本的な使い方をいくつかご紹介しました。本稿により、シートやセル、テーブルの概念に触れることができたかと思います。他にもSpreadJSにはさまざまな機能があります。冒頭に記載したドキュメント等から実装方法を知ることができますので、ぜひご参照ください。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
高機能JavaScriptグリッド部品「SpreadJS」の活用連載記事一覧

もっと読む

この記事の著者

矢後 比呂加(ヤゴ ヒロカ)

 Microsoft MVP for Visual Studio and Development Technologies(https://mvp.microsoft.com/ja-jp/PublicProfile/5000246) シグマコンサルティング株式会社にて、Microsoft Azure・ASP...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9672 2016/10/03 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング