1.概要
1.1 応用シーン
帳票間では変数やハイパーリンクなどでデータを渡すことができますが、同じテンプレート内の複数のシート間では変数やハイパーリンクで値を渡すことはできません。
では、あるシートで別のシートのあるセルの値を取るにはどうすればいいのでしょうか。つまり、シートにまたがって数を取るにはどうすればいいのでしょうか?以下で詳しく説明します。
下図の例では、sheet1 の注文コストは sheet2 のセルから計算されています。 sheet2 のデータを変更すると、sheet1 の注文コストも変更されます。
1.2 実現方法
=sheetname!cellnameという式が使えて、シート間で値を取ることを実現します。例えば sheet1 のあるセルに sheet2 のA2セルの値を取ると、=sheet2!A2という式を追加できます。
sheetname に短い線や下線などの特殊文字が含まれている場合は、 sheetname に一重引用符を付ける必要があります。式は、='sheetname'!cellname
1.3 注意事項
現在のシート計算ロジック:1)シート内計算ロジック、左から右へ、上から下へ。2)シート間計算ロジック、左から右へ、引用があれば先に引用を計算します。
問題説明:
たとえば、sheet1 がロードされ、まずC1が計算され、C1がsheet2を引用している場合、計算が中断され、sheet2が計算され、sheet2がD1を計算し、sheet1のC2とC3が引用されます。sheet1 のC2には値があり、C3は sheet3を引用していますが、この時点では sheet3の計算をトリガしていません。つまり、 sheet1 が sheet2 を引用して sheet2 の計算をトリガしています。しかし、後に sheet1 が sheet3 を参照しても sheet3 のロードはトリガーされず、別の sheet を参照してその sheet の計算がトリガーされるのは1回だけです。C3は sheet3 の計算をトリガせずに空を返しました。
解決策:
依存するセルを1つのsheetにまとめて、他のsheetはこのsheetのセルを引用します。
2.例
2.1 データ準備
1)まず、シート1にds1、シート2にds2という2つのデータセットを作成します。SQL文は次のようになります。
ds1:SELECT*FROM 注文
ds2:SELECT*FROM 注文明細
2)次の図に示すようにテンプレート変数を追加します。デフォルト値を10001に設定します。
3)変数パネルでこの変数にウィジェットをバインドします。ウィジェットをプルダウンボックスに設定し、データ辞書を注文表の注文IDフィールドに設定します。
2.2 sheet2準備
1)新しいsheet2を作成し、下図のようにsheet2のテーブルを設計し、ds2のフィールドを対応するセルにドラッグし、A2セルにフィルタとテンプレート変数を追加してバインドを完了します。
次の図のように、E2セルにSUM(C2*D2)という式、A2セルにプルダウンボックス・ウィジェット、B2~D2にテキスト・ウィジェットを追加します。
2)次の図に示すように、sheet2に書き込み属性を設定します。
2.3 シート間の連動を実現
1)下図のように sheet1 のテーブルを設計し、ds1のフィールドを対応するセルにドラッグし、A2セルにフィルタとテンプレート変数を追加してバインドを完了します。
C2セルにsheet2!E2+B2という式を追加、つまり、sheet2 のE2セルとsheet1 のB2セルの合計を計算します。
2)次の図に示すように、sheet1 に書き込み属性を追加します。
2.5 効果プレビュー
テンプレートを保存した後、書き込みプレビューをクリックします。sheet2 の関連セルを修正すると、sheet1 の注文コストも変更されます。効果は1.1の応用シーンに示されています。
注:モバイル端末はサポートされていません。
3.テンプレートダウンロード
テンプレートをダウンロード:シート間の連動.cpt