MS-Excelの読み書き (Excel Input/Output)

最終更新日: 2022年8月9日

書き込み

Excelで作成した見積書の雛形を示します。Wagbyアプリケーションで、新規登録時および更新時に、このExcelファイルに値を書き込むようにします。

対象とするExcelファイル

ダウンロード

このサンプルのExcel雛形をダウンロードできます。

実行例

Wagbyで作成した見積モデルの新規登録画面です。

見積 新規登録(1)

各項目に値を入力します。ここで「読み書きExcel」項目に、見積書の雛形ファイル(図1)を登録します。

見積 新規登録(2)
見積 新規登録(3)

データを登録しました。このタイミングで、見積書雛形に値が書き込まれます。

登録のタイミングで見積書雛形ファイルに値が書き込まれる

Excelファイルをクリックするとダウンロードできます。このファイルを開いて内容を確認できます。

見積内容が出力されたExcelファイル

モデルの設計

アドオンギャラリー

このモデルはアドオンギャラリーから「見積」をインストールすると自動的に用意されます。

アドオンギャラリー

2つのモデル「見積」と「見積内訳」を用意します。見積内訳は子モデルとなり、明細部を管理します。

「見積」と「見積内訳」

見積モデルに用意した項目は次の通りです。「読み書きExcel」項目は、Excel操作ブロックで利用する対象項目です。

見積モデルに用意した項目

見積モデルの画面レイアウト設計(詳細、登録、更新画面)を示します。

見積モデル 画面レイアウト

もう一つの、子モデル部となる見積内訳モデルに用意した項目は次の通りです。親子モデル同時更新画面機能を使い、見積モデルと同時に登録や更新を行います。

外部キー項目「親見積ID」は、親モデル(ここでは「見積」)を指定します。

外部キーの設定

同じく外部キー設定として、親の主キー(ID)と "等しい" 条件で紐づくものとします。

外部キー項目 検索条件の設定

見積内訳モデルは一覧画面のレイアウトを設定します。ここでは1つのデータを2行にまたがって表示するレイアウトとしています。

見積内訳 一覧表示画面レイアウト

スクリプト

今回は見積データの登録時に、用意したExcelの見積書へデータを書き込むとします。

「外部連携」ブロック群に用意された「Excel」ブロックを使います。

Excelブロック

登録時のタイミングで、指定したファイル項目(今回は「読み書きExcel」項目)に添付されたファイルへの書き込みを指定します。

書き込み操作

「外部連携」ブロック群に用意された「マッピング」ブロックを使います。

マッピングブロック(1)

Excelブロックのマッピング位置に、マッピングブロックを配置します。

マッピングブロック(2)

マッピングブロックは「項目」をどの「シート」のどの「セル」と対応づけるか、を指定します。

マッピングブロック(3)

このマッピングは複数指定できます。右クリックで複製操作を行います。

ブロックの複製(1)
ブロックの複製(2)

子モデルのマッピング

注意

子モデルのマッピングは書き込みのみ対応しています。(読み込みでは子モデルを指定することはできません。)

子モデル「見積内訳」のマッピングを行うこともできます。Excelブロック群から「子モデル」ブロックを選びます。

子モデルブロック

Excelブロックの子モデル部に配置します。

子モデルブロックを配置する

子モデルのマッピングは行わない

子モデルのマッピングは必須ではありません。未セットの場合は、子モデルのマッピングは行いません。

子モデルデータの部分に、対象の子モデルのデータ取得ブロックを配置します。文字列ブロックを使ってシート名も指定します。

さらに子モデルが開始される(Excelの)開始行を、数値ブロックを使って指定します。

1データの行数を指定することもできます。未指定時は1になります。今回使うExcelの雛形ファイルは、子モデル部は2行で1データとなっているため、ここに2を指定します。

子モデルマッピングの基本設定

子モデルのマッピングを行う「項目」ブロックを選びます。

(子モデル用の)項目ブロック (1)

マッピング位置にブロックを配置します。

(子モデル用の)項目ブロック (2)

モデルブロック群から子モデルを指定するブロックを選びます。

子モデルを指定するブロック (1)

子モデルのブロックと、対応するセルを関連づけます。

子モデルを指定するブロック (2)

ブロックを複製し、複数の対応ルールを設定できます。
このとき、:1を付与することで次の行のデータを指定できます。これは「指定セルの1行下」を意味します。(X:0はXと同じ)

もし1データを3行にわたって展開する場合、さらにブロックを増やして:2を付与してください。
指定できるのは0以上の数値です。
スクリプトで出力する行数に応じて、Excelファイルのレイアウトも調整してください。出力したい行数分、Excelファイル上でスペースを確保しておく必要があります。
子モデルを指定するブロック (3)

親モデル「見積」に関するマッピングルールを設定しました。

見積モデルとのマッピング (最終)

子モデル「見積内訳」に関するマッピングルールを設定しました。

見積内訳モデルとのマッピング (最終)

全体の構造を示します。

全体の構造 (最終)

見積モデルの更新のタイミングでも、同じブロックを用意します。これによって登録時と更新時に Excel ファイルを更新します。

登録時に設定したスクリプトをコピーし、更新時のスクリプト欄にペーストするとよいでしょう。
更新時の操作

読み込み

Excelブロックを "読込む" とすると、添付された Excel ファイルの内容から Wagby のデータを生成します。

登録画面で利用者が入力していた値は、Excel ファイルの内容に上書きされます。

登録時に指定したExcelファイルの内容を読み込む

子モデルは未対応

読み込み処理は、子モデルには対応していません。今回の例では、見積モデル部分のみ読み込みできます。(見積内訳部分は読み込まれません。)子モデルマッピングの部分は空白としてください。

他モデル参照項目の出力

Excelに出力する項目が「他モデル参照」項目である場合、アプリケーション画面では内容が表示されますが、Excelには主キー値が出力されます。

Excel出力時にも内容(ここでは「社名」)を表示するには、追加の設定が必要になります。

アプリケーション上では社名を表示
会社名ではなく主キー値が出力されている

上記の例は、次のようなモデル構成です。

モデル定義

他モデル参照項目では主キー値を保持するため、内容部を取得したい場合はルックアップ機能を利用します。

解消方法

対応方法 (1) ルックアップ項目の連携

「案件」モデルの「取引先」項目は他モデル参照で、「会社」モデルの会社名を参照します。

案件モデル

「見積」モデルに「プロジェクト名」と「社名」項目を追加し、「社名」をルックアップ項目としています。
「社名」は「案件」モデルの他モデル参照項目「取引先」を参照しています。

見積モデル

設定方法

  1. 「案件」モデルに項目を追加します。型は「他モデルの項目参照」とします。
    案件モデルに項目を追加
    ルックアップとし、上の「取引先名」項目を使って「会社」モデルの「会社名」を参照します。
    ルックアップの設定
  2. この項目は画面には表示する必要がないため、「入力制御 > 隠し項目 > 全画面」にチェックを入れます。
    隠し項目とする
  3. 次に、見積モデルにも項目を追加します。こちらも型を「他モデルの項目参照」とします。
    見積モデルに項目を追加
    ルックアップとし、先の手順で設定した項目「社名(Excel出力用)」を参照します。
    ルックアップの設定
  4. この項目に関しても画面上には表示しないため「入力制御 > 隠し項目 > 全画面」にチェックを入れます。
    隠し項目の設定
  5. 見積モデルの「モデル > 登録」および「更新」のスクリプトを修正します。
    先ほど追加した項目を出力するよう指定します。「保存」ボタンを押してスクリプトを保存してください。
    スクリプトの設定(登録)
    スクリプトの設定(更新)

動作の確認

見積モデルで使用する会社と案件のデータを下図の通り登録します。

参照されるデータの登録

見積登録画面でデータを入力し、登録します。追加した項目は隠し項目としたため、アプリケーション上の見た目の変化はありません。

参照されるデータの登録
登録完了

出力されたExcelファイルを開くと、会社名がセットされています。

出力されたExcelファイル

対応方法 (2) スクリプトを利用する

見積モデルに「社名(Excel出力用)」項目を文字列型として用意します。

見積モデル、もう一つの修正方法

スクリプトを使って、「社名(Excel出力用)」項目に値をセットすることができます。

見積モデルが持つ「プロジェクト名」の実体は、参照先である案件モデルの主キーの値です。そこでデータ取得ブロックを使って、主キーに対応した「案件」データを1件取得し、会社IDを得ます。(「会社ID」という変数を事前に作成してください。)

さらにもう一度、データ取得ブロックを使って、今度は会社IDに対応した「会社」データを1件取得します。これで会社名を得ることができました。

この値を見積モデルの「社名(Excel出力用)」にセットします。

スクリプトを使って「社名(Excel出力用)」項目に値をセットする

方法 (1) と (2) の違い

(1) は複数のモデル間でルックアップ項目を連携させる方法です。(2) は複数モデルで連携するルックアップを行わず、代わりにスクリプトを使います。

(2) のスクリプトは、案件モデルの「取引先名」が必ずセットされていることを前提としています。(1) では取引先名が未設定のとき、社名は空白になります。

仕様・制約

  • Excelのセルに改行コードが含まれていた場合、読み込み時に改行コードは無視されます。
  • テキストエリアに含まれる改行コードをExcelに出力する場合、改行コードは無視されます。
  • モデル参照項目はID部になります。そのためルックアップを使って内容部を取得し、その内容部とExcelのやりとりを行ってください。(詳細はこちら