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で、次のような明細を１０明細繰り返したいのですが、 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等のフィールド定義があることすらわかりませんでした。 （ダイレクトにtop-frameで検索すれば出てくるのですが） これらフィールドの一覧はでてこないものなのでしょうか・・？ left-frameで検索すると、top-left-frameなるものもありましたので、もしや？と思い、左上をクリックすると 全選択できてしまったので、 set self.top-left-frame.visible? = false も追加すると選択もできなくなったので期待した挙動になりました。 どうもありがとうございました。 RE: Worksheetの明細繰り返しについて - ashimo - 09-15-2011 > ドキュメントビューワでWorkSheetクラスの一覧を見てもプロパティやメソッド等しか出てこないので それはこれじゃないでしょうか。右側にするとprotectedなメンバーも見えますよ。