SHOEISHA iD

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

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

高機能JavaScriptスプレッドシート部品「SpreadJS」の活用(AD)

Excelの資産を無駄にしない──SpreadJS「レポートシート」で実現するWeb帳票とPDF出力

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

レポートシートを利用するメリット

 SpreadJSのレポートシートは、帳票をWeb上に表示するだけでなく、既存のExcel資産を活用しながら帳票業務を効率化・自動化できる強力な機能です。

 主なメリットは次のとおりです。

  1. Excel帳票をテンプレート化してそのまま再利用できる
  2. ノーコードで直感的に帳票を設計・編集できる
  3. データバインドによりWeb上で動的に帳票を表示できる
  4. 帳票システムの開発・保守の工数を大幅に削減できる
  5. そのままPDF出力や印刷もできる

 このように、SpreadJSのレポートシートは、Excel資産の活用・開発工数の削減・紙とWebのハイブリッド運用といった観点から、実務での帳票開発を力強くサポートします。

既存のExcel帳票をWebに移行する方法

 SpreadJSの「レポートシート」機能を活用すれば、既存のExcel帳票をそのままテンプレートとして読み込み、Webアプリ上で再利用することが可能です。

 ここでは、無料でダウンロードした請求書テンプレートを例に、帳票テンプレートのインポートからWeb上での表示までの手順をご紹介します。

図8:サンプルの帳票テンプレート(出典:ビジネステンプレート)
図8:サンプルの帳票テンプレート(出典:ビジネステンプレート

1. Excelファイルをインポート

 レポートシートを開いた状態で、上部メニューから「デザイン」→「テンプレートをインポート」を選択し、インポート対象となるExcelファイルを読み込みます。

 インポート後、SpreadJSデザイナ上に元のExcel帳票と同じレイアウトが表示されれば、取り込みは成功です。

図9:Excel帳票をインポートしたSpreadJS Designerの画面
図9:Excel帳票をインポートしたSpreadJSデザイナの画面

 元のExcelファイルに含まれる数式や関数も、SpreadJSのレポートシート上でそのまま利用可能です。明細行の2行目以降(計算式やサンプルデータを含む部分)は、テンプレートとして利用する際に不要なため、削除しておきましょう。

2. データソースの定義とバインド

 帳票に差し込むデータは、あらかじめJSON形式で用意します。今回は請求明細データを10件含む「invoices.json」を作成し、json-serverを使ってローカルAPIとして提供できるようにします。

invoices.json
{
  "invoices": [
    {
      "ID": 1,
      "CustomerID": 1,
      "CustomerName": "ABC株式会社",
      "InvoiceNo": "1001",
      "InvoiceDate": "2024/04/30",
      "Subject": "ライティング案件(メディアA)",
      "Description": "コラム記事執筆(SEO対応)",
      "Quantity": 1,
      "Unit": "式",
      "UnitPrice": 8882
    },
    {
      "ID": 2,
      "CustomerID": 1,
      "CustomerName": "ABC株式会社",
      "InvoiceNo": "1001",
      "InvoiceDate": "2024/04/30",
      "Subject": "ライティング案件(メディアA)",
      "Description": "軽微なWebデザイン調整",
      "Quantity": 3,
      "Unit": "本",
      "UnitPrice": 18657
    },
    {
      "ID": 3,
      "CustomerID": 1,
      "CustomerName": "ABC株式会社",
      "InvoiceNo": "1001",
      "InvoiceDate": "2024/04/30",
      "Subject": "ライティング案件(メディアA)",
      "Description": "サービス紹介ページのテキスト作成",
      "Quantity": 2,
      "Unit": "件",
      "UnitPrice": 18424
    },
    {
      "ID": 4,
      "CustomerID": 1,
      "CustomerName": "ABC株式会社",
      "InvoiceNo": "1001",
      "InvoiceDate": "2024/04/30",
      "Subject": "ライティング案件(メディアA)",
      "Description": "バナー文言提案",
      "Quantity": 3,
      "Unit": "件",
      "UnitPrice": 18988
    },
    {
      "ID": 5,
      "CustomerID": 1,
      "CustomerName": "ABC株式会社",
      "InvoiceNo": "1001",
      "InvoiceDate": "2024/04/30",
      "Subject": "ライティング案件(メディアA)",
      "Description": "LP原稿作成(構成案込み)",
      "Quantity": 2,
      "Unit": "本",
      "UnitPrice": 14717
    },
    {
      "ID": 6,
      "CustomerID": 2,
      "CustomerName": "テックワークス合同会社",
      "InvoiceNo": "1002",
      "InvoiceDate": "2024/05/10",
      "Subject": "Webコンテンツ制作案件",
      "Description": "軽微なWebデザイン調整",
      "Quantity": 1,
      "Unit": "本",
      "UnitPrice": 12020
    },
    {
      "ID": 7,
      "CustomerID": 2,
      "CustomerName": "テックワークス合同会社",
      "InvoiceNo": "1002",
      "InvoiceDate": "2024/05/10",
      "Subject": "Webコンテンツ制作案件",
      "Description": "コラム記事執筆(SEO対応)",
      "Quantity": 1,
      "Unit": "本",
      "UnitPrice": 9154
    },
    {
      "ID": 8,
      "CustomerID": 2,
      "CustomerName": "テックワークス合同会社",
      "InvoiceNo": "1002",
      "InvoiceDate": "2024/05/10",
      "Subject": "Webコンテンツ制作案件",
      "Description": "バナー文言提案",
      "Quantity": 1,
      "Unit": "件",
      "UnitPrice": 11616
    },
    {
      "ID": 9,
      "CustomerID": 2,
      "CustomerName": "テックワークス合同会社",
      "InvoiceNo": "1002",
      "InvoiceDate": "2024/05/10",
      "Subject": "Webコンテンツ制作案件",
      "Description": "コラム記事執筆(SEO対応)",
      "Quantity": 1,
      "Unit": "件",
      "UnitPrice": 10135
    },
    {
      "ID": 10,
      "CustomerID": 2,
      "CustomerName": "テックワークス合同会社",
      "InvoiceNo": "1002",
      "InvoiceDate": "2024/05/10",
      "Subject": "Webコンテンツ制作案件",
      "Description": "軽微なWebデザイン調整",
      "Quantity": 2,
      "Unit": "本",
      "UnitPrice": 18132
    }
  ]
}

 次のコマンドでローカルサーバを起動してください。

json-server invoices.json -p 3000

 ブラウザで「http://localhost:3000/invoices」にアクセスし、JSONデータが表示されれば準備完了です。

 次に、SpreadJSデザイナを開き、レポートシートにデータソースを設定します。左側の「データソース」パネルから「テーブルの追加」を選び、以下の情報を入力してください。

  • テーブル名:invoices
  • 取得方法:GET(そのまま)
  • URL:http://localhost:3000/invoices

 設定が完了すると、データ項目をシート上にドラッグ&ドロップできるようになります。明細行にあたる表部分のセルを選択し、右ペインの「セル型」を「リスト」に設定してください。これにより、複数行のデータを繰り返し表示できるようになります。

 さらに、帳票レイアウトが固定行の明細表である場合は、「スピル時に上書きする」にもチェックを入れておきます。これでデータが流し込まれたときにレイアウトが伸長することなく、固定行の明細表を作成することができます。

図10:明細行には「スピル時に上書きする」設定を適用
図10:明細行には「スピル時に上書きする」設定を適用

 各セルには、前半で作成した社員リストと同じ感覚で、データソースのパネルからDescription、Quantity、Unit、UnitPriceのフィールドをドラッグ&ドロップしてデータバインドします。

 最後に、1ページ単位で帳票を出力するため、コンテキスト(キー項目)を設定します。伝票番号を表示するセルを選び、右ペインの「拡張」タブから「コンテキスト」を「ユーザー設定」に変更し、「InvoiceNo」が入力されているセルを指定してください。

図11:コンテキストの設定
図11:コンテキストの設定

 この設定により、請求書番号ごとに1ページとして帳票が生成され、複数の取引先への一括出力にも対応できます。

3. プレビューで確認して保存

 レイアウトとデータバインドが完了したら、「デザイン」メニューの「プレビュー」ボタンで帳票の表示内容を確認します。請求書ごとにページが分かれ、明細やヘッダー、金額の計算式などが正しく表示されていればOKです。

図12:SpreadJS Designerのプレビュー画面
図12:SpreadJSデザイナのプレビュー画面

 問題がなければ、テンプレートを 「.sjs形式」で保存しておきましょう。

4. Webアプリ用ファイルを準備してWebで表示

 作成した帳票テンプレート(.sjsファイル)をWebページ上に表示するには、プロジェクトファイル一式を準備する必要があります。

 具体的な手順やファイル構成については、Page1「4.Webで表示準備」および技術記事を参照してください。また、サンプルが公式のGitHubでも公開されています。ページングや印刷、PDF出力などの実装方法もこちらをご参考ください。

 準備が整ったら、index.html を右クリックして「Open with Live Server」を選択します。帳票テンプレートとJSONデータが正しくバインドされていれば、Webページ上に帳票が表示されます。

図13:SpreadJSで表示された請求書帳票の例
図13:SpreadJSで表示された請求書帳票の例

 複数の請求書データがある場合は、コンテキスト設定に従ってページごとに分割表示されていれば成功です。

次のページ
Web表示した帳票をPDFで出力する方法

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

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

もっと読む

この記事の著者

水無瀬 あずさ(ミナセ アズサ)

 現役エンジニア兼フリーランスライター。PHPで社内開発を行う傍ら、オウンドメディアコンテンツを執筆しています。得意ジャンルはIT・転職・教育。個人ゲーム開発に興味があり、最近になってUnity(C#)の勉強を始めました。おでんのコンニャクが主役のゲームを作るのが目標です。

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

提供:メシウス株式会社

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング