それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Goole App Script ( GAS ) の基本的な操作方法。14.スプレッドシートに追記する。

スプレッドシートに追記したい。

スプレッドシートのデータの範囲に、次の行を書くにはどうするのか。同じデータを連続して書き込むにはどうするのか。少し考えてみた。

セルに続けて書きたい。

セルの最終行に次行のレコードを書き込んでログのように記録を取りたい

次のように、続けて書き込みたい。

f:id:takuya_1st:20210605022853p:plain:w200

GASの例

function main(){
  addCell();
}
function addCell() {
  let app = SpreadsheetApp.getActiveSpreadsheet();
  let sh = app.getActiveSheet();
  let range = sh.getDataRange();
  let r = range.getLastRow();
  let c = range.getLastColumn();
  let nextCell = sh.getRange(range.getLastRow()+1,1,1,2);
  let data = [
    [getCurrentIp(),currentDateTime()]
  ]
  nextCell.setValues(data)

}
// データ
function getCurrentIp() {
  let ip = 'x.x.x.x'
  let url = 'https://api.ipify.org?format=json'
  let json = UrlFetchApp.fetch(url);
  let obj = JSON.parse(json);
  //ip = (obj) ? obj.ip : ip;
  return ip;
}
function currentDateTime(){
  let d = new Date()
  let str = Utilities.formatDate(d, 'Asia/Tokyo','yyyy/MM/dd HH:mm:ss')
  return str;
}

実行すると。

最初、空っぽの状態から、データがログのように書き込まれる。
f:id:takuya_1st:20210605021733p:plain:w200

f:id:takuya_1st:20210605021815p:plain:w200

コードについて。

今回使ったコードの冒頭部分について。

現在データが書き込まれている範囲を取る。

getDataRange は、CTRL-Aで選択して自動的に作られる選択範囲を取得する。

  let app = SpreadsheetApp.getActiveSpreadsheet();
  let sh = app.getActiveSheet();
  let range = sh.getDataRange();
  let r = range.getLastRow();
  let c = range.getLastColumn();

次の行の範囲を取る。

次の行を選ぶのでgetLastRow()+1 を使う。列は先頭からなので、1を入れる。(プログラミングになれた人は、ここで配列と同じ入れがちなので注意、セルは1から数えます。)

sh.getRange(range.getLastRow()+1,1,1,2);

getRange は矩形選択、Rectangleの描画と同じ

getRange は1,2引数で選択開始位置。(開始座標)
getRange は3,4引数で選択する個数。(縦横長さ)

getRange( startRow, StartCol, numOfRow, numOfCol) 

選択範囲にデータを貼り付け

選択範囲にデータを貼り付けするのは setValues を使う。

setValues([  [ COL_A, COL_B ]  ] )

setValue の引数は、ネストした多次元配列。

多次元配列には、行ごとにデータを入れる。

data = [
 [ "A1", "B2" ] //  1行目
 [ "A2", "B2" ] //  2行目
]

データの追記はよくやるので

データ追記はよくやるので、ぱぱっとできるといいな。

2021-06-07 追記

似たような方法に次のような方法がある。 getLastRow 関数を利用する。

getLastRow はデータ領域の最終行が返されるので、不定数のカラムを書き込むのであれば、getLastRowもいいと思う。

この記事では、行の下方向に決まったデータを追記するので、getDataRange() を使ってます。

getLastRow は次のペアで覚えておくと便利です。

sheet.getLastRow();
sheet.getLastColumn();