Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

「Curl EXT」を使って、効果的な画面遷移とExcelライクな一覧画面を作ってみよう!

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/07/28 14:00

ダウンロード サンプルソース (3.0 KB)

目次

WorkSheetの使い方

 Worksheetは、Excelのようにスプレッドシート風になっているGUIコンポーネントです。以下のような特徴があります。

  • 式を埋め込み、セルの値を入力値として計算
  • 値の入力のために標準GUIコントロールをセルに埋め込んで使用可能
  • フォームやRecordGridを埋め込んでRecordSetデータを表示

Worksheetクラス

 Worksheetクラスのコンストラクタには、以下のようなプロシージャがセットできます。

Worksheetクラスのコンストラクタにセットできるプロシージャ
プロシージャ名 機能
value-cell 値を表示するセル
input-cell 編集、入力するセル
currency-cell 通貨を含むセル
formula-cell 式を含むセル

 これらはCellSpecオブジェクトを戻り値として返し、セルの表示を制御します。

Worksheetで簡単な計算を行うサンプル
Worksheetで簡単な計算を行うサンプル

使い方

 サンプルのWorksheetは、以下のようなコードで作成されています。

ソースコード(sample\/worksheetdemo1.curl)
{Worksheet 4, 2,
    row = 0, col = 0, "A", {input-cell 0.0},
    row = 1, col = 0, "B", {input-cell 0.0},
    row = 2, col = 0, "C", {input-cell 0.0},
    row = 3, col = 0, "A + B + C",
    {formula-cell
        {proc {dest:DataRef, a:DataRef, b:DataRef, c:DataRef}:void
             set dest.value = a.as-double + b.as-double + c.as-double
        },
        {RelativeCellRef -3, 0},
        {RelativeCellRef -2, 0},
        {RelativeCellRef -1, 0}
    }
}

 ここでは、ワークシートのコンストラクタの中で、4行2列のワークシートのセルを以下のように1つずつ設定しています。

セルの場所
1行1列目 "A",
1行2列目 {input-cell 0.0}
2行1列目 "B",
2行2列目 {input-cell 0.0},
3行1列目 "C",
3行2列目 {input-cell 0.0},
4行1列目 "A + B + C",

 4行2列目("A + B + C"の次)のセルとして記述されているformula-cellプロシージャが、数式のセルを設定しています。

 formula-cellの第1引数となっているプロシージャ定義が、このセルが表示する値を決める数式です。引数として与えられたaセルの値とbセルの値を加算して、destセルにセットしています。destセルは数式を設定しているセル(row = 2,col = 0)、aセルはこのセルの3行上のセル、bセルは2行上のセル、cセルは3行上です。aとbをこれらのセルに紐付けているのが、続く3行のRelativeCellRefオブジェクトです。

 {RelativeCellRef -3, 0}が3行上、{RelativeCellRef -2, 0}が2行上、{RelativeCellRef -1, 0}が1行上のセルを指し、この順に書くことで、aが3行上、bが2行上、cが1行上のセルを指すことを示しています。destセルはプログラマが明示的に設定する必要はなく、内部で自動的にこのセルを指します。

 ここで、以下の部分は、Formula.sumに置き換えても同じ動作になります。

{proc {dest:DataRef, a:DataRef, b:DataRef}:void
    set dest.value = a.as-double + b.as-double
}

 Formulaクラスには、以下のような基本的な演算プロシージャが組み込みで用意されています。

Formulaクラスの演算プロシージャ
プロシージャ名 機能
copy 1つの引数を取り、ターゲットセルにそのセルの内容を表示します
add 2つの引数を取り、ターゲットセルにその値の和を表示します
subtract 2つの引数を取り、ターゲットセルにその値の差を表示します
multiply 2つの引数を取り、ターゲットセルにその値の積を表示します
divide 2つの引数を取り、ターゲットセルにその値の商を表示します
sum すべての引数の合計をターゲットセルに表示します
product すべての引数をかけ合わせた値をターゲットセルに表示します
concat すべての引数を連結した値をターゲットセルに表示します
count すべて引数の数をターゲットセルに表示します

 上記サンプルをFormula.sumプロシージャで書き換えると、次のようになります。

{Worksheet 4, 2,
    row = 0, col = 0, "A", {input-cell 0.0},
    row = 1, col = 0, "B", {input-cell 0.0},
    row = 2, col = 0, "C", {input-cell 0.0},
    row = 3, col = 0, "A + B + C",
    {formula-cell
         Formula.sum,
         {RelativeRangeRef 3, 1, row = -3}
    }
}

 こちらの場合は、数式プロシージャの引数の指定に、1つずつセルを参照するRelativeCellRefの代わりに、RelativeRangeRefが使われています。RelativeRangeRefは複数のセルを含む矩形領域を参照します。

 コンストラクタ引数は以下のようになっています。

RelativeRangeRef.default
コンストラクタ引数 参照値
rows:int ターゲットセルの行番号に加えるオフセット値
cols:int ターゲットセルの列番号に加えるオフセット値
row:int 領域に含まれる行の数(デフォルト:0)
col:int 領域に含まれる列の数(デフォルト:0)

 上のコードでは、3行1列の矩形領域を、ターゲットセルの3行上のセルから定義しています。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:CurlデベロッパーセンターPick Up

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5