DioDocs for Excel
DioDocs for Excel
テンプレートプロパティ
帳票の作成 > 帳票テンプレートの構成 > テンプレートプロパティ

テンプレートプロパティは、以下の画像のように、テンプレートフィールドとともに丸括弧「( )」で囲んで定義します。

 

Context プロパティ

Context(省略形:C)プロパティは、セル間の関係(コンテキスト)を設定します。

なお、セルのコンテキストについての詳細は、「セルのコンテキスト」を参照してください。

設定値:セル参照、データフィールド、「None」

{{ds.field(C=A1, E=H)}}

Hello World! {{(C=A2)}}

{{=SUM(F4) (C=ds1.team)}}

{{=SUM(ds1.score) (C=ds1.team*ds1.season)}}

 

Expansion プロパティ

Expansion(省略形:E)プロパティは、セルの値が展開する方向を設定します。

なお、セルの展開についての詳細は、「セルの展開」を参照してください。

設定値:列挙型

{{ds.field(C=A1, E=H)}}

 

Group プロパティ

Group(省略形:G)プロパティは、データのグループ化の種類を設定します。

設定値:列挙型

{{ds.field(G=repeat)}}

{{ds.field(G=list)}}

 

以下の画像は、Group プロパティの設定例とその出力結果です。

 

 

Range プロパティ

Range(省略形:R)プロパティは、指定範囲内のテンプレートフィールドのフォールバックコンテキストを設定します。範囲に含まれるデフォルトまたは明示的なコンテキストを持たないすべてのテンプレートフィールドは、Range プロパティが定義されているセルをコンテキストとして使用します。

設定値: セル範囲(デフォルトは Null)

{{ds.field(R=B3:F10)}}

以下の画像は、製品名に対して Range プロパティを定義すると、製品の明細が製品名を基準に展開・グループ化されること示しています。

 

Sort プロパティ

Sort(省略形:S)プロパティは、テンプレートフィールドにおけるソートの種類を設定します。このプロパティは、単一または複数の列に適用され、それぞれのセルの値によって決定されます。この機能により、昇順と降順でのソートだけではなく、カスタムの並べ替えルールを1つまたは複数の列に適用できます。

DioDocs for Excelは、次の基本的なルールに従ってソートを実装します。

  1. セルがテンプレートセルとインスタンスセルに区別され、テンプレートのソート関数が処理されます。テンプレートセルはテンプレートファイル内のセルであり、インスタンスセルはテンプレートの処理後に作成されるセルです。
  2. テンプレートセル間の関係は親子関係として扱われます。同様の関係がインスタンスセル間にも適用されます。
  3. 兄弟関係のインスタンスセル間のセルはソートされるが、親子関係は変更されません。ソートされるインスタンスセルは、次の2つの条件を満たす必要があります。
    1. これらのセルは同じテンプレートセルから取得される必要があります。
    2. これらのセルは共通の親セルを持つ必要があります。

例として、次のデータソースを考えてみます。

次のテンプレートを使用する場合、Sort プロパティがコンテキストセルA1によって制限され、共通の親セルがないため、D列のセルを並べ替えることはできません。

Sort プロパティはセルA1にのみ追加できます。その結果、テンプレートは以下のようになります。

出力結果

Sort プロパティが設定されているセルのみをソートすることができ、Sort プロパティが設定されていないセルをソートすることはできません。上記のデータソースでは、セルD1の値に基づいてセルA1の値ををソートすると、セルD1ではなくセルA1のみがソートされます。

ソートは、次の3つの方法で設定できます。

設定値: 列挙型

S=Asc(デフォルト):昇順にソートします。

S=Desc:降順にソートします。

S=None: ソートしません。

設定値: 配列

S={“X“, “Y“,”Z”}

設定値:

S=(Cell A Asc {“X“, “Y“,”Z”}, Cell B Desc)

例1:単一列のソート

{{ds.field(S=Desc)}}

以下の画像は、ソートの種類に基づいてテンプレートフィールドがどのように展開されるかを示しています。

Sort

例2:複数の列のソート

{{ds.OrderID(S=(C12,D12 desc),G=List)}}

以下の画像は、セルC12とセルD12に基づいて[注文ID]列がどのようにソートされるかを示しています。

例3:カスタムルールによるソート

{{ds.City(S=(A12 desc {"ニューヨーク", "シカゴ", "ミネソタ", "サンティアゴ", "フリーモント", "キト", "メデジン", "ブエノスアイレス"}))}}

以下の画像は、カスタムの並べ替えルールに基づいて[都市]列がどのようにソートされるかを示しています。

Filter プロパティ

Filterプロパティ (‘F’) は、テンプレート内でフィルタ処理の種類を設定します。このプロパティは、条件フィルタとスライスフィルタ2種類のフィルタ処理オプションを提供します。これらのフィルタオプションを個別にまたは組み合わせて使用すると、テーブルからデータをフィルタ処理できます。このプロパティは、レポート生成のために単一または複数のテーブルからデータをフィルタ処理できます。 DioDocs for Excelは、System.Data.DataTable や ITableDataSource などの通常のデータソースでのみフィルタプロパティをサポートします。 メモ: カスタムデータテーブルを作成することで、JSON データソースにフィルタを適用できます。詳細については、カスタムデータテーブルを参照してください。

条件フィルタ

条件フィルタは、ANDORNOT、および LIKE などの演算子とキーワードを使用してデータをフィルタ処理します。LIKE キーワードと比較演算子は最優先で評価されます。残りのキーワードの優先順位は、NOT > AND > OR です。さらに、括弧を使用することで、これらの演算子とキーワードの評価順序をカスタマイズできます。

設定値:

F/Filter = (field1 > 1 AND field2 = 2 OR field3 <> 3)

次の表は、条件フィルタがサポートする演算子とキーワードを示しています。

オペレーター/キーワード

サポートするオペレーター/キーワード 記号 説明
オペレーター より小さい < 指定された値より小さい値をフィルタ処理します。
以下 <= 指定された値以下の値をフィルタ処理します。
より大きい > 指定された値より大きい値をフィルタ処理します。
以上 >= 指定された値以上の値をフィルタ処理します。
等しい = 指定された値と等しい値をフィルタ処理します。
等しくない <> 指定された値と等しくない値をフィルタ処理します。
キーワード And AND

複数の条件を組み合わせる論理演算子です。両方の条件が真の場合に真を返します。

例: {{ds2.amount(F = (ds2.amount < 500 and ds2.age < 18))}}

Or OR

 複数の条件を組み合わせる論理演算子です。少なくとも1つの条件が真の場合に真を返します。

例: {{ds2.amount(F = (ds2.amount < 500 or ds2.age < 18))}}

Not NOT

クエリ内の条件を否定する論理演算子です。条件が偽の場合に真を返し、条件が真の場合に偽を返します。

例: {{ds2.amount(F = (not ds2.amount < 500 or not ds2.age < 18))}}

Like LIKE パターンマッチング操作のためのキーワードです。以下の2つのワイルドカードをLIKE演算子と組み合わせて使用できます:
  • アスタリスクマーク * はゼロ、1つ、または複数の文字を表します。
  • ハテナマーク ? は1つの文字を表します。

例: {{ds2.name(F = (ds2.name like \"*wh?te?\"))}}

~* および ~? を使用して、文字 * または ? と一致させます。

メモ: 条件フィルタの左オペランドは現在のテーブルのフィールドでなければならず、右オペランドは任意の定数、現在のテーブルのフィールド、または他のテーブルの参照フィールドに設定できます。

例1: オペレーターを使用したフィルタ処理

{{order.oid(F = (order.count > 10))}}

以下の画像は、販売数が10を超える注文をフィルタ処理してレポートを生成するテンプレートの例を示しています。以下の例で使用されたExcelテンプレートのレイアウトExcel template layoutもダウンロードできます。

オペレーターを使用したフィルタ処理の詳細については、デモ  demo をご参照ください。

例2: キーワードを使用したフィルタ処理

{{order.oid(F = (order.cid ="C002" and order.pid = "W003"))}}

以下の画像は、顧客IDが「C002」かつ製品IDが「W003」の注文をフィルタ処理してレポートを生成するテンプレートの例を示しています。以下の例で使用された Excel template layout テンプレートのレイアウトもダウンロードできます。

キーワードを使用したフィルタ処理の詳細については、デモdemo をご参照ください。

例3: シンプルなマルチソースレポート

{{product.name(F=(product.pid = order.pid))}}

以下の画像は、異なるデータテーブルから製品IDを使用して製品名をフィルタ処理するテンプレートの例を示しています。以下の例で使用されたExcel template layoutテンプレートのレイアウトもダウンロードできます。

シンプルなマルチソースレポートについては、オンラインデモ もあわせてご参照ください。

例4: 複雑なマルチソースレポート

顧客名 製品名
{{customer.name(F=(customer.cid = order.cid))}} {{product.name(F=(product.pid = order.pid))}}

以下の画像は、異なるデータテーブルから顧客IDと製品IDを使用して顧客名と製品名をフィルタ処理するテンプレートの例を示しています。以下の例で使用されたExcel template layoutテンプレートのレイアウトもダウンロードできます。

複雑なマルチソースレポートについては、オンラインデモ もあわせてご参照ください。

スライスフィルタ

スライスフィルタは、指定されたインデックスから別の指定されたインデックスまでデータを取得してフィルタ処理します。

設定値:配列

F/Filter = [start:stop:step]

start はフィルタが開始するインデックスを指し、stopはフィルタの終了を指します。Stepを使ってインデックス間の間隔を指定することもできます。

: スライスフィルタ

{{order.oid(F = [0:20:2])}}

以下の画像は、テンプレートが最初の20件の奇数注文をフィルタ処理してレポートを生成する方法を示しています。以下の例で使用されたExcel template layoutテンプレート レイアウトもダウンロードできます。

スライスフィルタについては、オンラインデモ もあわせてご参照ください。

例: スライスフィルタの逆操作

{{order.oid(F = [20:0:-2])}}

以下の画像は、インデックス20から最後の20件の注文をフィルタ処理してレポートを生成するテンプレートの例を示しています。以下の例で使用された Excel template layout テンプレートのレイアウトもダウンロードできます。

メモ: レコードの末尾から処理を行う場合(逆操作)、結果は元の順序になります。これはDioDocs for Excelの制限です。

複合フィルタ

条件フィルタとスライスフィルタの両方を組み合わせてレポートを生成できます。

例: 複合フィルタ

{{order.oid(F = (order.oid like "*1?")[0:5])}}

以下の画像は、注文IDが「*1?」の式に一致する注文をフィルタ処理し、処理された結果から最初の5件を選択してレポートを生成するテンプレートの例を示しています。以下の例で使用されたExcelテンプレートExcel template layoutのレイアウトもダウンロードできます。

複合フィルタについては、オンラインデモ  もあわせてご参照ください。

メモ: スライスフィルタと条件フィルタは、フィルタステートメント内で0回または1回のみ使用できます。

PageBreak プロパティ

PageBreak(省略形:PB)プロパティは、テンプレートフィールドの後に改ページを追加するかどうかを設定します。なお、詳細な動作は、以下のとおり、生成された Excel 帳票でのテンプレートセルの位置によって決定されます。

設定値:Boolean

{{ds.field(PB=true)}}

 

以下の画像は、「Category」フィールドの後に改ページを追加するよう設定した例とその出力結果です。

メモ:TemplateOptions.PaginationMode が true の場合、Pagebreak プロパティは無視されます。

 

Image プロパティ

Image プロパティは、画像を追加するかどうかを設定します。また、追加する場合は、画像の幅と高さを指定したり、縦横比を維持したりすることもできます。

width と height を使用してセル内の画像のカスタム寸法を指定しますが、keepaspect を使用して画像のサイズをセルのサイズに合わせて縦横比を維持します。width と height を設定するときに、寸法の単位 (pt または px) も指定する必要があります。

対応している画像のデータ型は、byte[] および base64 文字列です。

セル内の画像の配置は、セルの横位置と縦位置の配置を設定することで制御できます。デフォルトでは、画像は横位置と縦位置ともにセルの中央に配置されます。

設定値:Boolean

Image = True :画像を追加します。

Image= False(デフォルト):画像を追加しません。

Image.width=文字列の値:画像の幅を指定します。デフォルトはセルの幅です。

Image.height=文字列の値:画像の高さを指定します。デフォルトはセルの高さです。

Image.keepaspect= True:画像の縦横比を維持します。

Image.keepaspect= False(デフォルト):画像の縦横比を維持しません。

構文を作成するには、次の説明のように略語を使用することもできます。

メモ: 画像の両方のプロパティを指定すると、Keepaspect が幅と高さの設定より優先されます。

{{ds.icon(Image=true)}}

{{ds.icon(Image=true, Image.width=150px)}}

{{ds.icon(Image=true, Image.height=150px)}}

{{ds.icon(Image=true, Image.keepaspect=true)}}

以下の画像は、Excel 帳票に画像を出力する例です。

Image

自動改ページに関するテンプレートプロパティについては、「自動改ページのプロパティと関数」を参照してください。

メモ:上記のすべてのテンプレートプロパティは大文字と小文字を区別しません。つまり、DioDocs for Excelは大文字と小文字に関係なく、大文字と小文字の区別を無視して値と一致します。