Spread.Sheets > 開発者の手引き > ユーザーインタフェースの管理 > テーブルの使用 > 構造化参照式の使用 |
Spread.Sheetsでは、テーブル内で構造化参照による数式がサポートされます。
構造化参照による数式では、キーワード、およびテーブルの列名を使用して、テーブル内のセル範囲を参照します。
次の図は、構造化参照を構成する各コンポーネントを示します。この式は、売上合計と税額を加算します。
特殊項目を使用すると、テーブルのさまざまな領域を参照し、数式内で簡単に使用できます。次の表は、構造化参照で使用可能な特殊項目指定子の一覧を示します。
特殊項目 | 例 | 参照先 | セル範囲 |
#All | =DeptSales[#All] | 列ヘッダ、データ、合計を含むテーブル全体 | A1:E8 |
#Data | =DeptSales[#Data] | データ | A2:E7 |
#Headers | =DeptSales[#Headers] | ヘッダ行 | A1:E1 |
#Totals | =DeptSales[#Totals] | 合計行。合計行が存在しない場合はnullが返されます。 | A8:E8 |
#This Row | =DeptSales[#This Row] | 現在の行の列部分 | A5:E5(現在の行の番号は5) |
「#This Row」項目は「@」として簡略表記できます。たとえば、=DeptSales[#This Row]は=DeptSales[@]と同じです。
「#Data」項目は「#Headers」または「#Totals」と組み合わせて使用できます。次の表に、例を示します。
特殊項目 | 例 | 参照先 | セル範囲 |
#Headersと#Data | =DeptSales[[#Headers], [#Data]] | 列ヘッダとデータ | A1:E7 |
#Dataと#Totals | =DeptSales[[#Data], [#Totals]] | データと合計行 | A2:E8 |
特殊項目を指定しない場合は、次の表に示すとおりのデータとみなされます。
特殊項目 | 例 | 参照先 | セル範囲 |
なし | =DeptSales[] または =DeptSales | データ | A2:E7 |
列指定子は、列ヘッダおよび合計を除く、データ列全体への参照を表します。次の表は、列指定子の種類を示します。
列指定子 | 例 | 参照先 | セル範囲 |
単一の列 | =DeptSales[SaleAmt] | データ内のSaleAmt列 | C2:C7 |
列範囲 | =DeptSales[[SaleAmt]:[TaxAmt]] | データ内の、"SaleAmt"列から"TaxAmt"列までの列範囲 | C2:E7 |
なし | =DeptSales[[#Data]] | データ内のすべての列 | A2:E8 |
テーブル、列、および特殊項目の指定子はすべて、それぞれ一対の角かっこ[ ]で囲む必要があります。内部に他の指定子を含む指定子の場合は、内部の指定子を一対の角かっこで囲み、さらにその周囲を一対の角かっこで囲む必要があります。複数のポリシーが競合する場合は、最高〜最低の優先順位に従います。
角かっこの用法には、以下のルールが適用されます。
また、次の汎用ルールも適用されます。
テーブル内の数式に構造化参照を追加するには、setColumnDataFormulaおよびsetColumnFormulaメソッドを使用します。テーブル領域の外部にある数式からテーブルデータを参照することもできます。たとえば、activeSheet.getCell(7,1).formula("SUM(Table1[SubTotal])");という数式を作成できます。列とセルの数式において、最後に設定した数式が常に優先されます。
数式内の列指定子は、ヘッダおよびフッタ内のセルには適用されません。 |
次のサンプルコードは、テーブルを作成し、構造化参照式を使用して集計を行います。
JavaScript |
コードのコピー
|
---|---|
activeSheet.tables.add("Table1", 0, 0, 4, 3, GC.Spread.Sheets.Tables.TableThemes.dark1); activeSheet.getCell(0,0).text("Value1"); activeSheet.getCell(0,1).text("Value2"); activeSheet.getCell(0,2).text("SubTotal"); activeSheet.getCell(1,0).text("1"); activeSheet.getCell(2,0).text("2"); activeSheet.getCell(3,0).text("3"); activeSheet.getCell(1,1).text("5"); activeSheet.getCell(2,1).text("5"); activeSheet.getCell(3,1).text("5"); var sTable = activeSheet.tables.findByName("Table1").setColumnDataFormula(2, "=[Value1]*[Value2]"); sTable.showFooter(true); //set footer value sTable.setColumnValue(0, "Total"); sTable.setColumnFormula(2, "SUM(Table1[SubTotal])"); activeSheet.getColumn(0).width(80); activeSheet.getColumn(1).width(80); activeSheet.getColumn(2).width(80); //activeSheet.getCell(7,1).formula("SUM(Table1[SubTotal])"); |