サポート > リポジトリ > 帳票 > Excel帳票 - 詳細表示

詳細帳票データをExcelファイルとして出力します。Excelを用いてプリンタに印刷することができます。

Excel帳票機能を設定した顧客モデルの詳細表示画面を開きます。図1に示すように「帳票」ボタンが用意されています。

図1 詳細画面に用意された帳票ボタン

このボタンを押下すると、Excel形式のファイルがダウンロードされます。(図2)

図2 Excelファイルがダウンロードされる

Excelでファイルを開きます。この顧客の詳細情報がレイアウトされていることがわかります。これをプリンタで印刷することで帳票出力を行います。

図3 Excelに埋め込まれた詳細情報

Excel帳票の定義は、次の手順で行います。

  1. Designerによるボタン設定とビルド。
  2. ビルドによって得られたExcelテンプレートファイルのレイアウト設計
  3. (ビルドした)Wagbyアプリケーションで行う「帳票テンプレート」の設定

ここでは、それぞれの手順の詳細を説明します。

Designerの設定

「画面>帳票出力」タブを開きます。帳票出力設定欄で、次の設定を行います。

設定項目 説明 入力例
テンプレートファイル名 後述する「帳票テンプレート」の識別子になります。重複しない名前を英数字の組み合わせで決めてください。拡張子 (.xls や .xlsx) は含めません。 printCustomer1
表示画面 詳細表示を選択します。 詳細表示
出力方式 Excelを選択します。 Excel
利用ライブラリ 出力方式に Excel を指定した場合、どのライブラリを使うのかという組み合わせが提示されますので、一つを選択します。通常、Excelを使う場合は(ライブラリとして)POIを指定します。 POI
表示する この欄をチェックすると、帳票出力が有効になります。 -
表示条件 ボタンの表示条件式を記述することができます。「画面機能>ボタン名と表示条件のカスタマイズ」で説明しています。 (中略)
ボタン名 ボタン名を指定します。省略時は「"帳票" + 連番」となります。式を使ってボタン名を決定することもできます。 -
図4 帳票出力の設定
帳票設定数の上限はありません。「+」ボタンを押下すると、設定欄が追加されます。

Excelテンプレートファイルのレイアウト設計

図4の設定後にビルドすると、Wagbyインストールフォルダ内のwork/reportフォルダ内に、テンプレートファイル名で指定したExcelファイルが自動生成されます。(図5)

図5 自動生成されたテンプレートファイル

このテンプレートファイルをExcelで開くと、図6のようになっています。レイアウト設計なしで、項目名とプレースホルダが列挙されています。

図6 項目名とプレースホルダが埋め込まれたExcelファイル

ここで "${" ではじまり、"}" で終わる部分をプレースホルダと呼びます。プレースホルダの構造は次のとおりです。

${モデル名_p.項目名}

プレースホルダには、実際の値が設定されます。プレースホルダの記述ルールの詳細は"プレースホルダ"をお読みください。

このプレースホルダ表記を残しつつ、帳票レイアウト設計を行います。図7にレイアウトの例を示します。

図7 帳票レイアウトを行った例

帳票テンプレートの設定

ビルドしたアプリケーションにシステム管理者でログオンします。モデルと、図7の帳票ファイルを紐付けるために「帳票テンプレート」の設定を行います。(図8)

図8 帳票テンプレートメニュー

新しい帳票テンプレートを作成します。(図9)

図9 帳票テンプレートの新規登録を行う

ID項目は、Designerに設定した帳票テンプレートID(図4)を指定します。拡張子 (.xls や .xlsx) は含めません。

ここでは適用モデルを "顧客" とします。説明欄は自由に設定してください。

テンプレートファイルとして、図7を保存したExcelファイルを指定します。(図10,図11)

図10 帳票テンプレートの設定
図11 帳票テンプレートを登録した
ここで登録したテンプレートファイルは、upload_dir フォルダ以下に保存されます。詳細は"文字列 > ファイル > 仕様 > 内部の構造"をお読みください。

詳細表示画面に用意される帳票用ボタン名を "Excel印刷" に変更した例を図12に示します。

図12 帳票ボタン名の変更

定義方法

Designer側でボタン名を指定します。

図13 Designerでボタン名を設定する

帳票テンプレートで、出力方法を指定することもできます。空白時は "ブラウザで表示" となります。

図16 出力方法の指定

ブラウザで表示 [非推奨]

この設定は、HTTPレスポンスヘッダの"Content-Disposition"フィールドに相当します。"ブラウザで表示" は "inline" となります。

本設定は Wagby R6 との互換性のために残っていましたが、最新のブラウザでは動作しなくなっています。これはブラウザのセキュリティ対策強化によるものです。そのため "ブラウザで表示" 設定は非推奨となっています。

ダウンロード

この設定は、HTTPレスポンスヘッダの"Content-Disposition"フィールドに相当します。"ダウンロード" は "attachment" となります。

Internet Explorer 利用時、出力方法に "ダウンロード" を指定した場合にダイアログが二重に表示されることがありますが、動作に支障はありません。

サーバに保存

帳票ファイルを(Wagbyアプリケーションが稼動している)サーバ上の指定フォルダに書き込みます。この設定を行ったとき、「出力フォルダ」をあわせて指定してください。サーバ上のフォルダを指定します。

図17 出力フォルダの指定

"サーバに保存(上書きする)"を選択した場合、すでに同名の帳票が出力済みの場合、ファイルを上書きします。

"サーバに保存(上書きしない)"を選択した場合、すでに同名の帳票が出力済みの場合、ファイル名に "_1" "_2" ... を付与します。(*)

ファイルを保存したあと、画面にメッセージを表示します。保存に失敗すると、画面にエラーメッセージを表示します。

同名のファイルを見つけると、ファイル名に "_1" を付与します。もし "_1" も存在すれば、数字を増加させます。この仕組みのため、飛び番号にはなりません。最大の数字が付与されたファイルが最新のファイルです。

ファイル名に用いるプレースホルダ

帳票テンプレートのファイル名に次の書式を用いることができます。

プレースホルダ 説明
${username} ログオンアカウント ${username}.xls
${createdatestr} 出力日付時刻を表す文字列。yyyyMMddHHmmss形式。 ${createdatestr}.xls

プレースホルダは組み合わせることができます。例えば ${username}${createdatestr}.xls と指定することができます。

帳票テンプレート設定で、出力ファイル名を指定することができます。固定値を設定します。

シート名7.10

出力される Excel のシート名になります。

出力ファイル名

出力される Excel のファイル名になります。また、一括帳票を展開したときの各Excelファイルのファイル名になります。

  • ファイル名にはプレースホルダ利用できます。
  • ファイル名には拡張子を含めてください。(.xlsまたは.xlsx)
この設定は、HTTPレスポンスヘッダの"Content-Disposition"フィールドの"filename"属性に反映されます。

出力ファイル名(一括帳票用)7.10

複数データの帳票を一度に出力するときのファイル名になります。

  • 拡張子は含めないようにしてください。
  • 漢字も利用できます。
この設定は、HTTPレスポンスヘッダの"Content-Disposition"フィールドの"filename"属性に反映されます。

定義方法

プレースホルダを指定することができます。ファイル名は、拡張子も含めて指定してください。例を示します。

図14 出力ファイル名の指定 (1)
図15 出力ファイル名の指定 (2)
顧客情報.xls
顧客情報${customer_p.customerid}.xls

出力ファイル名が空欄の場合、テンプレートファイル名が使われます。

出力ファイル名に利用するプレースホルダは、モデル名も含めるようにしてください。また、式の記述はできません。("+"などの文字列演算を行うことはできません。)
(誤)${name}+"_"+${currenttime}+"_"+${userid}+".xls"
(正)${customer_p.name}_${customer_p.currenttime}_${customer_p.userid}.xls

出力ファイル名を計算式によって決めたい場合、出力ファイル名という項目をモデル定義内に用意するとよいでしょう。その項目名を、本設定欄に記載します。例 ${customer_p.generatedfilename}
テンプレートファイルが .xls 形式ファイルだが、出力ファイル名を .xlsx とする、といったことはできません。出力ファイル名を指定するときは、テンプレートファイルの拡張子を使ってください。

詳細帳票テンプレートにおいて、繰り返し項目(コンテナを含む)や外部キー子モデルの項目は、テンプレートに記述した分だけ出力されます。

例を示します。下図のテンプレートにおいて、商談履歴の項目は繰り返しコンテナ項目となっています。

図18 顧客情報の詳細帳票用テンプレート

この繰り返しコンテナ項目には ${customer_p.report.0.rid} の行から ${customer_p.report.7.rid} の行までがプレースホルダとして指定されています。

図19 テンプレートの商談履歴部分 - 固定長指定

DB上にレコードが1個しかない場合は、${customer_p.report.0.rid} の行はレコードの値が挿入され、${customer_p.report.1.rid} の行以降は空白に置換されます。

一方、DB上にレコードが9個以上ある場合は、最初のレコードから8個目までは帳票に出力されますが、9個目以降は出力されません。この場合は、あらかじめテンプレートの行数を増やし、プレースホルダも同じく追加することで対応してください。

繰り返し項目(コンテナ含む)のデータ数によって表示レイアウトを伸縮させる方法を説明します。

プレースホルダに次のような表記を行います。

${モデル名_p.コンテナ名.#.項目名}

例えば ${customer_p.report.#.rid} や ${customer_p.report.#.mdate} と記述します。これを一行にまとめて記述します。(複数行にまたがって記述することはできません。)

図20 テンプレートの商談履歴部分 - 可変長指定

一つのテンプレートに複数の繰り返しコンテナを指定することもできます。出力する数に応じて帳票イメージが伸縮します。

セル結合の制約

繰り返しコンテナが一つも登録されていないデータの帳票出力でもセル結合がずれないように、コンテナ部に空のデータ行が1件、表示されます。(これによってセル結合が動作します。)

本方式を用いた場合、繰り返しコンテナのある値の合計を求めるために、セル中に (Excelの) =SUM(D4:D5) などと記載することができません。SUM関数のセル範囲は固定で指定されているためです。(この部分を伸縮させることには対応できていません。)
このような場合は別途、Wagby側で合計を求めておき、それをExcel帳票に転記するようにしてください。
もしくは繰り返しコンテナを固定長として利用してください。(SUM関数の対象となるセル範囲と合わせることで、正しく動作します。)

詳細帳票テンプレートに「外部参照されているデータ」(外部キーを利用したデータ)を表示させる場合も、繰り返し項目と同様に指定した数だけ表示されます。

外部参照データの場合、プレースホルダは外部参照のモデル名となります。
また、詳細画面における外部参照モデルは一覧表示用のモデルを用います。モデル名は "xxx_lp" となります。

例えば顧客モデルにサポートモデルを外部キーで関連付けている場合、次の表記となります。末尾の数字は固定指定による方式となります。

${support_lp.xxx.添字}
添字は 0 から開始してください。
図21 顧客の詳細帳票内に「サポート」という外部キー連携のモデルの内容を表示させる

自動生成されるテンプレートファイル

詳細帳票(親側のモデル)に含まれる、外部キー子モデルのテンプレートファイルは showList<子>LpIn<親>.xls という命名規則で生成されます。図5に示す work/report フォルダに用意されます。

このファイルのテンプレート部分(図22)をコピーし、親側のモデルのテンプレートに貼り付けることで、図21のようなレイアウトを作成することができます。

図22 詳細帳票に含めるための、外部キー子モデルのテンプレートファイル

モデルの詳細画面の下部に表示される「申請状況」の実体は「フローイベント」というものです。これは管理処理メニューから「ワークフロー > フローイベント検索」を開くことで確認できます。

図23 フローイベント一覧

詳細帳票に、このフローイベントを含むことができます。プレースホルダは次の通りです。

プレースホルダ 説明
${jfcworkstate_lp.id.添字} フローイベントの主キー 1000
${jfcworkstate_lp.modelname.添字} モデル名(日本語) 年休申請
${jfcworkstate_lp.modelpkey.添字} 対象モデルの主キー。 1000
${jfcworkstate_lp.username.添字} 処理者のアカウント user1
${jfcworkstate_lp.processed_layerid.添字} フローの階層 0,1,2,..
${jfcworkstate_lp.event.添字} イベント Start,Application,...
${jfcworkstate_lp.comment.添字} ユーザが入力したコメント "よろしくお願いします。"
${jfcworkstate_lp.insert_date.添字} 処理日 (日付時刻) 2017-09-01 10:00:00
添字は 0 から開始してください。可変表記には未対応のため、予想される最大行まで出力欄を用意してください。(例 .0 から .9 までの 10行を用意する)これは「外部キー連携モデルの扱い」と同じルールです。

「帳票出力 > 表示画面」の選択肢で "新規登録", "コピー登録", "更新" を指定することができます。登録や更新画面に帳票出力ボタンが用意されます。

図24 帳票出力>表示画面の設定 (1)
図25 帳票出力>表示画面の設定 (2)

登録画面や更新画面に用意された帳票出力ボタンは次の動作となります。

  • データベースに保存されている値ではなく、画面上の(変更途中の)値が帳票出力されます。
  • ボタン押下後は、自画面(登録画面や更新画面)に戻ります。
図26 登録画面に帳票出力ボタンを用意する

Excel帳票出力機能は、オープンソースのExcel生成ライブラリである Apache POI または JExcelAPI を使って実現しています。

通常は "POI" を選択してください。"JExcelAPI" は Wagby R6 との互換性のために残していますが、非推奨(サポート対象外)です。将来の Wagby では廃止される予定です。

テンプレートファイル

  • テンプレートファイルとして用いるExcelファイルの拡張子は ".xls" または ".xlsx" となります。[注意点...]
  • テンプレートファイルのファイル名は半角英数字のみとしてください。日本語文字は指定できません。
  • テンプレートの Excel ファイルでは、以下の機能を利用することはできません。
    • ピボットテーブル
    • ドロップダウンリスト
    • パスワード保護
  • テンプレートの Excel ファイルにマクロを設定した場合、正しく出力されないことがあります。この場合はマクロの内容を変えるなどして調整してください。
  • 帳票(Excel)側の "表示形式" を、Wagby定義ファイルで指定することはできません。帳票へ出力する"型"は定義ファイルの型の設定に準じます。帳票データの表示形式は、帳票テンプレートファイル(Excel)の"セルの書式設定"で行ってください。
  • 書式設定を指定したにも関わらず、有効にならない場合があります。その場合は、データ出力用のセルまたはシートと、帳票テンプレートの部分と分け、テンプレートでは出力されたデータを参照するよう設定を行ってみてください。詳細は"テンプレートファイル作成のポイント"をお読みください。データ出力用シートと、帳票テンプレートのシートを分ける方法を紹介しています。
  • うまく印刷されない場合、帳票テンプレートの最初のシートに印刷領域が設定されているかどうかを確認ください。
  • 帳票テンプレートの「印刷範囲」にマクロなどの式を設定することはできません。(設定しても Wagby では式の実行ができないため、無視されます。)
  • プレースホルダから1つのセルに値をセットする場合、R7.10.3までは文字数の上限が1024文字です。R7.11以降は上限が32,767文字となります。

テンプレートファイルに .xlsx を利用した場合

拡張子 ".xlsx" 利用時には次の制約があります。

  • テンプレートファイルにセルコメントを含めることができません。

実行環境

  • Wagby アプリケーションを稼働させるサーバ機に Excel をインストールする必要はありません。サーバ機のメモリ上で直接 Excel ファイルを生成します。そのため出力処理中は一時的に多くのメモリを消費します。同時接続数が多い環境で、帳票出力が集中するような運用環境では、メモリを多めに搭載するようにしてください。
  • Excel ファイルを開くために、各利用者の PC (端末) には Excel または OpenOffice が必要です。

IE11利用時、ダウンロード時の保存、ファイルを開くボタンを素早く押すと"ファイルが移動または削除された可能性があります"というダイアログが表示される。

"CSV・Excel入出力 > ダウンロード > トラブルシューティング"をお読みください。

Wagby Developer Day 2017