リストボックスで選択した法律の条文を
一条づつテキストボックスに表示する
<<第1回 <第3回 第5回>
↑今回の成果ヽ(`▽´)/ |
今のところ法律条文ビューアーですね…。
一条づつ表示したら何が嬉しいのか…
これから先、このご利益が明らかになっていく!!
好ご期待!!
必要なもの:
・自己責任を許容できる寛容な心・プログラムをトライ&エラーできる程度の時間と勇気
・vlookupがどのように働くのか、理解できる程度の表計算経験
(今回はvlookup使わないですが、似たような概念は使ってます)
・BASICのプログラム経験
簡単な解説:
・ListBoxで「法律名」が選択されたら、そのイベントをトリガーにして、テキストフィールドの値を変える処理に入る・テキストフィールドの値は「法律名」「固有インデックス」によって決まる
・ダイアログの次へ/戻るボタンは、「固有インデックス」をひとつだけ進め/戻す
・以上の情報を使ってgetJOUBUNbyIDN()が、テキストフィールドへ書き込むべき一つの条文データを取得しているが、同時にテキストフィールドへの書き込みも担当している。
・他、境界処理、条文の塊把握、バグフィックスなど…
参考資料:
https://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Events
-次回予告-
・テキストフィールドの書式を整える
・条文番号をアラビア数字に変換する
・BASICからブラウザを起動する
〜能書き〜
変数宣言を強制的にさせるオプションってなかったっけ?
変数名間違えてても走っちゃう言語ってやっぱり苦手かも…。
以下、追加したプログラム
'指定した条文シートとcrntIDNから、その内容を返す
'HOURITUSheetシのcrntIDNをvlookupして次のIDが入っている行までをひとかたまりとして
'文字列を返す
'cntの数だけ前後した条文を返す
Function getJOUBUNbyidn(cnt as integer)
dim somecell as object
dim tgtRow, tgtCol as string
HOURITUSheet = ThisComponent.Sheets.getbyname(HOURITUName)
if crntIDN = 0 then
crntIDN = "stt"
endif
SFNC=createUnoService("com.sun.star.sheet.FunctionAccess")
adrsl = SFNC.callfunction("MATCH", array(crntIDN, HOURITUSheet.getCellRangeByname("A:A"), 0 ))
adrsg = SFNC.callfunction("ADDRESS", array(adrsl,1,4))
adrsl = SFNC.callfunction("MATCH", array("stt", HOURITUSheet.getCellRangeByPosition(0,0, 0,10000), 0 ))
posstt = SFNC.callfunction("ADDRESS", array(adrsl,1,4))
adrsl = SFNC.callfunction("MATCH", array("end", HOURITUSheet.getCellRangeByPosition(0,0, 0,10000), 0 ))
posend = SFNC.callfunction("ADDRESS", array(adrsl,1,4))
tgtRow = HOURITUSheet.getCellRangeByName(adrsg).CellAddress.Row
if crntIDN = "stt" then
tgtRow = tgtRow+1
crntIDN = HOURITUSheet.getCellByPosition(tgtCol, tgtRow).string
end if
tgtCol = HOURITUSheet.getCellRangeByName(adrsg).CellAddress.Column
'cntの数だけ前後にcrntIDNを移動する
'進む戻る用の仕組み
if cnt>0 then
for i = 0 to cnt-1
do
if HOURITUSheet.getCellByPosition(tgtCol, tgtRow+1).string ="end" then
exit function
end if
tgtRow = tgtRow+1
loop while HOURITUSheet.getCellByPosition(tgtCol, tgtRow).string = ""
crntIDN = HOURITUSheet.getCellByPosition(tgtCol, tgtRow).string
next i
elseif cnt<0 then
for i = cnt+1 to 0
do
if HOURITUSheet.getCellByPosition(tgtCol, tgtRow-1).string ="stt" then
exit function
end if
tgtRow = tgtRow-1
loop while HOURITUSheet.getCellByPosition(tgtCol, tgtRow).string = ""
crntIDN = HOURITUSheet.getCellByPosition(tgtCol, tgtRow).string
next i
end if
lowSet = ""
i=0
Do
lowSet = lowSet + HOURITUSheet.getCellByPosition(tgtCol+1, tgtRow+i).string
i=i+1
loop while HOURITUSheet.getCellByPosition(tgtCol, tgtRow+i).string =""
oDialog.getControl("TextField1").text = lowSet
end function
' リストボックスのアイテムが選択されたら呼ばれるサブルーチン
Sub listboxselected
'選択されたアイテムを取得
'条文内容を取得-> call getJOUBUNbyidn()
'テキストフィールドに書き出す
crntIDN=0
HOURITUName = oDialog.getcontrol("ListBox1").getSelectedItem()
call getJOUBUNbyidn(0)
end sub
' 進む・戻るボタンが押されたら呼ばれるつもりのサブルーチン
sub forwardBtn
call getJOUBUNbyidn(1)
end sub
sub backBtn
call getJOUBUNbyidn(-1)
end sub