MS-Excelの読み書き (Excel Input/Output)
最終更新日: 2022年8月30日
Excelで作成した見積書の雛形を示します。Wagbyアプリケーションで、新規登録時および更新時に、このExcelファイルに値を書き込むようにします。
Wagbyで作成した見積モデルの新規登録画面です。
各項目に値を入力します。ここで「読み書きExcel」項目に、見積書の雛形ファイル(図1)を登録します。
データを登録しました。このタイミングで、見積書雛形に値が書き込まれます。
Excelファイルをクリックするとダウンロードできます。このファイルを開いて内容を確認できます。
このモデルはアドオンギャラリーから「見積」をインストールすると自動的に用意されます。
2つのモデル「見積」と「見積内訳」を用意します。見積内訳は子モデルとなり、明細部を管理します。
見積モデルに用意した項目は次の通りです。「読み書きExcel」項目は、Excel操作ブロックで利用する対象項目です。
見積モデルの画面レイアウト設計(詳細、登録、更新画面)を示します。
もう一つの、子モデル部となる見積内訳モデルに用意した項目は次の通りです。親子モデル同時更新画面機能を使い、見積モデルと同時に登録や更新を行います。
外部キー項目「親見積ID」は、親モデル(ここでは「見積」)を指定します。
同じく外部キー設定として、親の主キー(ID)と "等しい" 条件で紐づくものとします。
見積内訳モデルは一覧画面のレイアウトを設定します。ここでは1つのデータを2行にまたがって表示するレイアウトとしています。
今回は見積データの登録時に、用意したExcelの見積書へデータを書き込むとします。
「外部連携」ブロック群に用意された「Excel」ブロックを使います。
登録時のタイミングで、指定したファイル項目(今回は「読み書きExcel」項目)に添付されたファイルへの書き込みを指定します。
「外部連携」ブロック群に用意された「マッピング」ブロックを使います。
Excelブロックのマッピング位置に、マッピングブロックを配置します。
マッピングブロックは「項目」をどの「シート」のどの「セル」と対応づけるか、を指定します。
このマッピングは複数指定できます。右クリックで複製操作を行います。
子モデルのマッピングは書き込みのみ対応しています。(読み込みでは子モデルを指定することはできません。)
子モデル「見積内訳」のマッピングを行うこともできます。Excelブロック群から「子モデル」ブロックを選びます。
Excelブロックの子モデル部に配置します。
子モデルのマッピングは必須ではありません。未セットの場合は、子モデルのマッピングは行いません。
子モデルデータの部分に、対象の子モデルのデータ取得ブロックを配置します。文字列ブロックを使ってシート名も指定します。
さらに子モデルが開始される(Excelの)開始行を、数値ブロックを使って指定します。
1データの行数を指定することもできます。未指定時は
子モデルのマッピングを行う「項目」ブロックを選びます。
マッピング位置にブロックを配置します。
モデルブロック群から子モデルを指定するブロックを選びます。
子モデルのブロックと、対応するセルを関連づけます。
ブロックを複製し、複数の対応ルールを設定できます。
親モデル「見積」に関するマッピングルールを設定しました。
子モデル「見積内訳」に関するマッピングルールを設定しました。
全体の構造を示します。
見積モデルの更新のタイミングでも、同じブロックを用意します。これによって登録時と更新時に Excel ファイルを更新します。
図5でテンプレートのExcelファイル「見積書雛形.xlsx」を登録していますが、保存時に、このファイル名を変更することもできます。ファイル型項目に変更したいファイル名をセットしてください。
次の例は "(見積No).xls" としたものです。
Excelブロックを "読込む" とすると、添付された Excel ファイルの内容から Wagby のデータを生成します。
登録画面で利用者が入力していた値は、Excel ファイルの内容に上書きされます。
読み込み処理は、子モデルには対応していません。今回の例では、見積モデル部分のみ読み込みできます。(見積内訳部分は読み込まれません。)子モデルマッピングの部分は空白としてください。
Excelに出力する項目が「他モデル参照」項目である場合、アプリケーション画面では内容が表示されますが、Excelには主キー値が出力されます。
Excel出力時にも内容(ここでは「社名」)を表示するには、追加の設定が必要になります。 上記の例は、次のようなモデル構成です。 他モデル参照項目では主キー値を保持するため、内容部を取得したい場合はルックアップ機能を利用します。 「案件」モデルの「取引先」項目は他モデル参照で、「会社」モデルの会社名を参照します。
「見積」モデルに「プロジェクト名」と「社名」項目を追加し、「社名」をルックアップ項目としています。 見積モデルで使用する会社と案件のデータを下図の通り登録します。 見積登録画面でデータを入力し、登録します。追加した項目は隠し項目としたため、アプリケーション上の見た目の変化はありません。 出力されたExcelファイルを開くと、会社名がセットされています。
見積モデルに「社名(Excel出力用)」項目を文字列型として用意します。
スクリプトを使って、「社名(Excel出力用)」項目に値をセットすることができます。
見積モデルが持つ「プロジェクト名」の実体は、参照先である案件モデルの主キーの値です。そこでデータ取得ブロックを使って、主キーに対応した「案件」データを1件取得し、会社IDを得ます。(「会社ID」という変数を事前に作成してください。)
さらにもう一度、データ取得ブロックを使って、今度は会社IDに対応した「会社」データを1件取得します。これで会社名を得ることができました。
この値を見積モデルの「社名(Excel出力用)」にセットします。
(1) は複数のモデル間でルックアップ項目を連携させる方法です。(2) は複数モデルで連携するルックアップを行わず、代わりにスクリプトを使います。
(2) のスクリプトは、案件モデルの「取引先名」が必ずセットされていることを前提としています。(1) では取引先名が未設定のとき、社名は空白になります。
書き込み
ダウンロード
実行例
モデルの設計
アドオンギャラリー
スクリプト
子モデルのマッピング
注意
子モデルのマッピングは行わない
1
になります。今回使うExcelの雛形ファイルは、子モデル部は2行で1データとなっているため、ここに2
を指定します。
このとき、:1
を付与することで次の行のデータを指定できます。これは「指定セルの1行下」を意味します。(X:0はXと同じ)
指定できるのは0以上の数値です。
Excelのファイル名を変更する
読み込み
子モデルは未対応
他モデル参照項目の出力
対応方法 (1) ルックアップ項目の連携
「社名」は「案件」モデルの他モデル参照項目「取引先」を参照しています。
設定方法
先ほど追加した項目を出力するよう指定します。「保存」ボタンを押してスクリプトを保存してください。
動作の確認
対応方法 (2) スクリプトを利用する
方法 (1) と (2) の違い
仕様・制約