Excel帳票 - 詳細表示

最終更新日: 2021年3月3日
R8 | R9

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

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

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

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

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

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

定義方法

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

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

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

Designerの設定

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

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

ワンポイント

帳票設定数の上限はありません。「+」ボタンを押下すると、設定欄が追加されます。

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

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

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

テンプレートファイルの形式

自動生成されるテンプレートファイルは次のルールに従います。

テンプレートファイルの拡張子を指定しない .xlsxファイル
テンプレートファイルの拡張子を.xlsxとする .xlsxファイル
テンプレートファイルの拡張子を.xlsとする .xlsファイル

このテンプレートファイルを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でボタン名を設定する

出力方法を変更する

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

図14 出力方法の指定

ダウンロード

ファイルをダウンロードします。

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

ブラウザで表示

ファイルをブラウザで表示します。

サーバに保存

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

図15 出力フォルダの指定

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

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

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

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

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

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

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

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

出力ファイルを変更する

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

シート名

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

  • 詳細帳票、一括帳票いずれにも反映されます。
  • プレースホルダを利用できます。
  • プレースホルダとして特殊表記 ${sheet} を利用できます。シート番号を示します。
  • 拡張子は含めないようにしてください。
  • この設定は、PDF出力では無効です。(無視されます。)
  • Excelのシート名に指定できない文字(コロン、円記号、疑問符、角カッコ、スラッシュ、アスタリスク)を含めることはできません。これらが含まれていた場合、自動的に除去されます。
  • 上のURLに記載の内容に加え、"(",")" (小括弧) を含めることはできません。
    この文字が含まれていた場合、自動的に消去するようになっています。

出力ファイル名

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

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

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

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

  • 一括でダウンロードされるファイル名は固定です。プレースホルダは適用されません。
  • 拡張子は含めないようにしてください。
  • 漢字も利用できます。
  • "ZIPファイル(1データ1Excelブック)"形式の場合、解凍後の各ファイル名のルールは上記「出力ファイル名」に準拠します。
  • "Excelファイル(1データ1Excelシート)"形式の場合、シート名のルールは上記「シート名」に準拠します。
この設定は、HTTPレスポンスヘッダの"Content-Disposition"フィールドの"filename"属性に反映されます。

定義方法

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

図16 出力ファイル名の指定(1)
図17 出力ファイル名の指定(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関数の対象となるセル範囲と合わせることで、正しく動作します。)

フォーマットの制約

接頭語 fmt: は可変長指定と併用することはできません。 この制約は R9.0.2 で解除されます。

子モデルの扱い

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

詳細画面における外部参照モデルは一覧表示用のモデルを用います。モデル名は "xxx_lp" となります。

例えば顧客モデルの子モデルにサポートモデル(support)があった場合、顧客モデル(親)の帳票テンプレートに次のプレースホルダを指定できます。末尾の数字は固定指定による方式となります。

${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.username_jshfilename:image.添字}
${jfcworkstate_lp.username_jshfilename:image:col=XX:row=XX:sx=XX:sy=XX.添字}
処理者の電子印影画像。(この設定を行った場合のみ有効)col,rowは整数値。sx,syは0から1の範囲の小数値。[画像の埋め込み範囲の設定について...] jpeg,png画像ファイル
${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 を使って実現しています。

仕様・制約

テンプレートファイル

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

テキストエリア型の扱い

テキストエリア型の項目を Excel のセルに割り当てる場合、次の設定を行なってください。

  • 当該セルの “セルを折り返して全体を表示する” を有効にする。
  • セルの高さを事前に調整する。

文字列に改行コードが含まれていた場合は、改行コードもそのまま出力されます。

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

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

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

実行環境

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

トラブルシューティング

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

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

帳票の出力結果(Excelファイル)のサイズが0バイトとなる。

  • 帳票テンプレートファイルが正しく登録されているか、確認ください。
  • ログファイル (system.log) を確認してください。ここで "org.apache.poi" ではじまるクラスがエラーを出力している場合、テンプレートに指定できない関数またはマクロが含まれている可能性があります。
WagbyのExcel帳票機能は内部で Apache POI というライブラリを利用しています。この Apache POI が未対応の関数またはマクロが含まれていた場合、出力結果が不正となります。

適用モデルの選択肢に、目的のモデルが表示されない

適用モデルの選択肢はシステムモデル "jfcmodel" を用いています。この情報が古い場合、目的のモデルが表示されません。対応方法...