Curl Global Community
Worksheetの明細繰り返しについて - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: Worksheetの明細繰り返しについて (/showthread.php?tid=273)



Worksheetの明細繰り返しについて - usami - 09-13-2011

Curl EXTのWorksheetで、次のような明細を10明細繰り返したいのですが、
Worksheet内にforループで回せばよいと思うのですが記述方法がわかりません。
ご教授いただけないでしょうか?
最終的には{Worksheet 40,8・・・にて定義したいです。
Code:
{import * from COM.CURL.EXT.WORKSHEET}
{value
{Worksheet 4, 8,
{widths 47pt,42pt,34pt,28pt,18pt,76pt,18pt,76pt},
background = "white",

row = 0, row-height = 30pt, col = 0, colspan = 2,
{display-cell
colspan = 2, background = "yellow",
""
},

row = 0, row-height = 30pt, col = 2, colspan = 1,
{display-cell
colspan = 1, background = "yellow",
""
},

row = 0, row-height = 30pt, col = 3, colspan = 5,
{display-cell
colspan = 5, background = "yellow",
""
},

row = 1, row-height = 20pt, col = 1, colspan = 2,
{display-cell
colspan = 2, background = "white",
""
},

row = 1, col = 4, rowspan = 2,
{display-cell
rowspan = 2, background = "white",
""
},

row = 1, col = 6, rowspan = 2,
{display-cell
rowspan = 2, background = "white",
""
},

row = 2, row-height = 20pt, col = 1, colspan = 2,
{display-cell
colspan = 2,
""
},

row = 3, row-height = 20pt, col = 1, colspan = 2,
{display-cell
colspan = 2, background = "white",
""
}

}

}





RE: Worksheetの明細繰り返しについて - ashimo - 09-13-2011

コンストラクタの引数はループさせようもないですから、
こんな感じでどうでしょうか。メソッド呼び出しにして10回繰り返しました。

Code:
{import * from COM.CURL.EXT.WORKSHEET}

{def ws = {Worksheet 40 , 8,
              {widths 47pt, 42pt, 34pt, 28pt, 18pt, 76pt, 18pt, 76pt},
              background = "white", height = 10cm
          }
}
{for i = 0 to 9 do
    {ws.init-cell row = i * 4 + 0, col = 0, colspan = 2, {display-cell                background = "yellow", ""}}
    {ws.init-cell row = i * 4 + 0, col = 2, colspan = 1, {display-cell height = 30pt, background = "yellow", ""}}
    {ws.init-cell row = i * 4 + 0, col = 3, colspan = 5, {display-cell height = 20pt, background = "yellow", ""}}
    {ws.init-cell row = i * 4 + 1, col = 1, colspan = 2, {display-cell height = 20pt, background = "white", ""}}
    {ws.init-cell row = i * 4 + 1, col = 4, rowspan = 2, {display-cell                background = "white", ""}}
    {ws.init-cell row = i * 4 + 1, col = 6, rowspan = 2, {display-cell height = 20pt, background = "white", ""}}
    {ws.init-cell row = i * 4 + 2, col = 1, colspan = 2, {display-cell height = 20pt, ""}}
    {ws.init-cell row = i * 4 + 3, col = 1, colspan = 2, {display-cell height = 20pt, background = "white", ""}}
}
{value
    ws
}



RE: Worksheetの明細繰り返しについて - usami - 09-13-2011

どうもありがとうございます!
ちなみに、これらの行選択・列選択欄って非表示にすることはできるのでしょうか?



RE: Worksheetの明細繰り返しについて - ashimo - 09-13-2011

消せるプロパティがありそうに思って探してみましたが、見つけられませんでした…。
あまりいいやり方じゃありませんが、サブクラス作って以下のようにすれば消すことはできました。

Code:
{define-class MyWorksheet {inherits Worksheet}
  {constructor {default ...}
    {construct-super {splice ...}}

    {for g2 in self.grid.graphical-children do
        {type-switch g2
         case sb:ScrollBox do
            {if sb.name == "top-frame"
                or sb.name == "left-frame" then
                set sb.visible? = false
            }
        }
    }
  }
}

{def ws = {MyWorksheet 40 , 8,
              {widths 47pt, 42pt, 34pt, 28pt, 18pt, 76pt, 18pt, 76pt},
              background = "white", height = 10cm
          }
}



RE: Worksheetの明細繰り返しについて - usami - 09-13-2011

どうもありがとうございました。

選択領域だけは残ってしまうんですね。

このWorksheetをスクロールバーで最下行までもっていき、ボタンを押したときに

自動的に先頭行に戻したいのですが、

{ws.set-active 0,0}

や、

{ws.activate-cell 0,0}

とやっても先頭行にスクロールしませんがこれでは実現できないのでしょうか?



RE: Worksheetの明細繰り返しについて - ashimo - 09-14-2011

空間が残っちゃいますね。
ここまですれば跡形もなく消せますが、こうきれいさっぱり
消していいものなのか確認できていないので、参考までに…。

Code:
{define-class MyWorksheet {inherits Worksheet}
  {constructor {default ...}
    {construct-super {splice ...}}
    let ga:{Array-of Graphic} = {{Array-of Graphic}}
    {for g in self.grid.graphical-children do
        {type-switch g
         case sb:ScrollBox do
            {if sb.name != "top-frame" and sb.name != "left-frame" then
                {ga.append g}
            }
         else
            {ga.append g}
        }
    }    
    {self.grid.clear}
    {for g in ga do
        {self.grid.add g}
    }
  }

  {method public {go-to-top}:void
    {for g in self.grid.graphical-children do
        {type-switch g
         case sb:ScrollBox do
            set sb.vertical-position = 0m
            set sb.horizontal-position = 0m
        }
    }
  }
}

column-selector-height, row-selector-widthという
オプションがありますが、これは0mに設定しても選択領域は消えませんでした。

> とやっても先頭行にスクロールしませんがこれでは実現できないのでしょうか?
選択セルを追いかけてスクロールしてくれませんね。
上のコードでスクロールバーを戻すメソッド(go-to-top)を
定義してみました。これを呼べばスクロールバーが戻ります。

あと、非表示にするだけなら(前回のコードですが)、サブクラスの中で
set self.top-frame.visible? = false
set self.left-frame.visible? = false
とやるだけでよかったみたいです。


RE: Worksheetの明細繰り返しについて - usami - 09-14-2011

フィールドって、ドキュメントビューワでWorkSheetクラスの一覧を見てもプロパティやメソッド等しか出てこないので
top-frame等のフィールド定義があることすらわかりませんでした。Huh
(ダイレクトにtop-frameで検索すれば出てくるのですが)
これらフィールドの一覧はでてこないものなのでしょうか・・?
left-frameで検索すると、top-left-frameなるものもありましたので、もしや?と思い、左上をクリックすると
全選択できてしまったので、
set self.top-left-frame.visible? = false
も追加すると選択もできなくなったので期待した挙動になりました。
どうもありがとうございました。



RE: Worksheetの明細繰り返しについて - ashimo - 09-15-2011

> ドキュメントビューワでWorkSheetクラスの一覧を見てもプロパティやメソッド等しか出てこないので
それはこれじゃないでしょうか。右側にするとprotectedなメンバーも見えますよ。