v18での事例。タイトル行だけテンプレートに保存しておいて、一覧表を4Dで作成する。データ行はView proエリアがロードされた後で挿入する必要がある。
v19には「VP INSERT ROWS」というVPコマンドが用意されているが、v18にはこのコマンドがない。履歴のところが「初出: 4D v18 R2」となっている。
https://doc.4d.com/4Dv19/4D/19/VP-INSERT-ROWS.301-5443002.ja.html
テンプレート側で十分な行を作っておくという方法もあるけど、ちょっとかっこ悪いので「SpreadJS」で実装することにした。
「sheet.addRows();」が使えそう。
https://demo.grapecity.com/spreadjs/demos/features/worksheet/rows-and-columns/purejs
で、次のようなメソッドを作成。
//JCL_vp_AddRows
//20220131 wat
//ViewProエリアに行を追加する
//sheet.addRows(1,10) //2行目の上に10行挿入
C_TEXT($1;$vpObjName)
$vpObjName:=$1
C_LONGINT($2;$fromRow)
$fromRow:=$2
C_LONGINT($3;$numOfRows)
$numOfRows:=$3
C_OBJECT($0;$result)
C_TEXT($source)
//シートに行を追加 JavaScript
$source:="sheet=Utils.spread.getActiveSheet();"
$source:=$source+"sheet.addRows("+String($fromRow)+", "+String($numOfRows)+")"
$result:=WA Evaluate JavaScript(*;$vpObjName;$source;Is object)
$0:=$result
4D v19では「VP INSERT ROWS」、こちらはSpreadJSが「addRows」なのでそのラッパーということで「JCL_vp_AddRows」という名前にした。機能はVPと同じでインサートになるのだが…
次のように使う。
//行を挿入 0行目はタイトル行、データは1から始まる
JCL_vp_AddRows ($vpObjName;1;$cnt)