SHOEISHA iD

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

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

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

実践! SpreadJSとASP.NET MVCで帳票Webアプリを作成してみよう

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

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

既存のExcelファイルをSpreadJSに適用する

 はじめに、帳票のデザインをSpreadJSで表示するにはどのようにしたらよいでしょうか。例えば、サンプルの請求書のデザインをSpreadJSに設定したいとします。

 SpreadJSのデザインはJavaScriptの実装より行うことができますが、コード量が多くなり複雑になる可能性があります。そこで、すでにデザインされたExcelファイルを利用し、SpreadJSをあらかじめシリアル化しておくことで、アプリケーションの主となるロジックと区別することができます。

 本稿のサンプルでは、製品ヘルプの「Excelのインポート機能」と「SpreadJSのシリアル化・逆シリアル化」を利用し、次の方法を選択しました。

  1. デザインされたExcelファイルをSpreadJSに読み込む。
  2. SpreadJSをシリアル化したJSONデータを「*.json」ファイルとして出力する。
  3. 作成した「*.json」ファイルをサーバー側に配置する。
  4. ブラウザ側で、初期表示に「*.json」ファイルの内容をSpreadJSに読み込む。

 まず、(1)のExcelファイルをSpreadJSに読み込むための、クライアント側のTypeScriptの記述です。

// Excelファイルをインポートします
export function ImportExcelFile() {
    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); });
}

 このクライアント側のExcelインポート機能については、連載第2回の「クライアントサイドのExcelインポート・エクスポート」でも紹介しておりますのでご参照ください。

 次に、(2)のSpreadJS全体の設定をJSONデータとしてシリアル化するTypeScriptの記述です。

//SpreadJSの初期化
var workbook = new GC.Spread.Sheets.Workbook(document.getElementById("spreadjs-container"), {
            sheetCount: 1
        });
//JSONデータとして出力する
let json = JSON.stringify(workbook.toJSON({ includeBindingSource: false }));

 詳細は、チュートリアルデモの「JSONによる初期化と保存」をご覧ください。

 SpreadJSのシリアル化されたJSONデータは次のようになっています(一部のみ記載しています)。

{
    "version": "9.20161.0",
    "sheets": {
        "Sheet1": {
            "name": "Sheet1",
            "frozenRowCount": 10,
            "frozenTrailingRowCount": 12,
            "rowCount": 33,
            "columnCount": 4,
            "activeRow": 4,
            "activeCol": 2,
            "spans": [
                {
                    "row": 32,
                    "rowCount": 1,
                    "col": 0,
                    "colCount": 4
                },
//..続く

 以上の手順で取得したJSONデータを「*.json」ファイルとして出力し、サーバー側のASP.NET MVCプロジェクトの「App_Data/spread」フォルダ配下に配置します。

 この「*.json」ファイルは、初期表示の際にサーバー側のAPIを通してクライアント側で取得し、SpreadJSに読み込みます。

 「*.json」ファイルの中身を返すASP.NET Web APIの実装は次のようになります。

/// はじめに表示するSpreadJSのコンテンツを取得します
[HttpGet]
public HttpResponseMessage ReadSpread()
{
    string fileName = "initialSpread.json";
    string filePath = Path.Combine(spreadFolder, fileName);

    var response = new HttpResponseMessage(HttpStatusCode.OK);
    var fileStream = new FileStream(filePath, FileMode.Open);  
    response.Content = new StreamContent(fileStream);
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

    return response;
}

 ASP.NET Web APIで提供するAPIではなく、直接Webサーバー側のファイルを取得する方法でも構いません。ただし、*.jsonファイルが外部に公開されることに注意してください。またIISでは、規定では「*.json」ファイルの送信は許可されていませんので、MIMEマッピングを追加する必要があります。

 クライアント側でAPIリクエストを送信し、「*.json」ファイルの中身を読み込み、SpreadJSに適用します。

function LoadWorkbook() {
        
    //初期表示のSpreadJSを読み込みます
    $.ajax({
        url: "/api/spread/",
        datatype: "json",
        cache: false,
        success: (data) => {
            workbook.suspendPaint();
            workbook.fromJSON(data);
            let sheet = workbook.getSheet(0);
            //シートに対してセットアップを行います。
            SetupSheet(sheet);
            workbook.resumePaint();
        },
        error: (ex) => {
            console.log(ex);
        }
    } as JQueryAjaxSettings);
}

 以上で、デザインされたExcelファイルをSpreadJSに適用できます。作成したExcelファイルはサンプル内にありますのでご参照ください。

次のページ
データを保存する(1)

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

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

もっと読む

この記事の著者

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

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング