SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CurlデベロッパーセンターPick Up(AD)

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

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

ダウンロード サンプルソース (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行上のセルから定義しています。

次のページ
カスタムセルエディタ

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
CurlデベロッパーセンターPick Up連載記事一覧

もっと読む

この記事の著者

住商情報システム株式会社(スミショウジョウホウシステムカブシキガイシャ)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6061 2011/07/28 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング