スプレッドシートに追記したい。
スプレッドシートのデータの範囲に、次の行を書くにはどうするのか。同じデータを連続して書き込むにはどうするのか。少し考えてみた。
セルに続けて書きたい。
セルの最終行に次行のレコードを書き込んでログのように記録を取りたい
次のように、続けて書き込みたい。
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; }
実行すると。
最初、空っぽの状態から、データがログのように書き込まれる。
コードについて。
今回使ったコードの冒頭部分について。
現在データが書き込まれている範囲を取る。
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();
次回へ続く
長いので分割しました→次回