4D View pro、Excelシートをテンプレートとして読み込んで表を作成、行を追加

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)