Thread Rating:
  • 423 Vote(s) - 2.89 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Worksheetの明細繰り返しについて
09-13-2011, 09:08 AM,
#1
Worksheetの明細繰り返しについて
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",
""
}

}

}


09-13-2011, 11:57 AM,
#2
RE: Worksheetの明細繰り返しについて
コンストラクタの引数はループさせようもないですから、
こんな感じでどうでしょうか。メソッド呼び出しにして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
}
09-13-2011, 12:15 PM,
#3
RE: Worksheetの明細繰り返しについて
どうもありがとうございます!
ちなみに、これらの行選択・列選択欄って非表示にすることはできるのでしょうか?
09-13-2011, 05:19 PM, (This post was last modified: 09-13-2011, 05:25 PM by ashimo.)
#4
RE: Worksheetの明細繰り返しについて
消せるプロパティがありそうに思って探してみましたが、見つけられませんでした…。
あまりいいやり方じゃありませんが、サブクラス作って以下のようにすれば消すことはできました。

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
          }
}
09-13-2011, 06:17 PM,
#5
RE: Worksheetの明細繰り返しについて
どうもありがとうございました。

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

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

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

{ws.set-active 0,0}

や、

{ws.activate-cell 0,0}

とやっても先頭行にスクロールしませんがこれでは実現できないのでしょうか?
09-14-2011, 04:53 PM,
#6
RE: Worksheetの明細繰り返しについて
空間が残っちゃいますね。
ここまですれば跡形もなく消せますが、こうきれいさっぱり
消していいものなのか確認できていないので、参考までに…。

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




Attached Files
.png   help.PNG (Size: 27.41 KB / Downloads: 1,116)

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('273')