GoogleAppScriptを使ってwebスクレイピングをした後、Googleスプレッドシートに書き込む、というケースはよくあります。
「よくあるケースだけど、すぐ忘れちゃう」というのはあるあるなので、この記事でまとめておきます。
操作対象のスプレッドシートを指定
ブックの指定には 「SpreadsheetApp.openById()」 、シートの指定には 「getSheetByName()」 または 「getSheets()」 を使います。
以下の例では、対象のブックとシートの情報が、変数「sheet1」と「sheet2」に格納されています。
function myFunction() {
var id = "[スプレッドシートのid]"
var ss = SpreadsheetApp.openById(id)
var sheet1 = ss.getSheetByName("[スプレッドシートのシート名]")
var sheet2 = ss.getSheets()[0]
}
「スプレッドシートのid」は、スプレッドシートを開いた時のURLのうち、以下の「xxxxxxx」の部分を指します。
→ https://docs.google.com/spreadsheets/d/xxxxxxx/edit#gid=0
シートの指定における2つのメソッドの使い分けは以下の通り。
- getSheetByName()
- シート名称で指定
- getSheets()
- シートの順序(そのシートが何番目のシートか)
特定のセルにデータを書き込み
先程指定したシートに対して、 「getRange().setValue()」 を使います。
A1セルに「テストデータ」という文字列を書き込む場合は、以下のようになります。
function myFunction() {
var id = "[スプレッドシートのid]"
var ss = SpreadsheetApp.openById(id)
var sheet1 = ss.getSheetByName("[スプレッドシートのシート名]")
var sheet2 = ss.getSheets()[0]
sheet1.getRange("A1").setValue("テストデータ")
}
スプレッドシートの最終行に書き込み
スプレッドシートの内容から最終行を自動で判断して、書き込んでくれる便利な方法があります。
「appendRow()」 を使うと、自動で最終行にデータを書き込んでくれます。
さらに、配列形式でデータを渡すと、最終行に対して複数列のデータをまとめて出力できます。
function myFunction() {
var id = "[スプレッドシートのid]"
var ss = SpreadsheetApp.openById(id)
var sheet1 = ss.getSheetByName("[スプレッドシートのシート名]")
var sheet2 = ss.getSheets()[0]
sheet1.appendRow(["テストデータ1", "テストデータ2"])
}
スプレッドシートの最終行の取得
先程のappendRow()だと、最終行の次の行に、データを続けて出力することしかできません。
「最終行の次に1行空けて、その次の行からデータ書き込みを開始したい」 のようなニーズを満たせませんね。
そんな時は、 「getLastRow()」 を使うと、スプレッドシートの最終行を取得できるので、それを使って細かい調整ができます。
function myFunction() {
var id = "[スプレッドシートのid]"
var ss = SpreadsheetApp.openById(id)
var sheet1 = ss.getSheetByName("[スプレッドシートのシート名]")
var sheet2 = ss.getSheets()[0]
var lastRow = sheet1.getLastRow()
sheet1.getRange(lastRow+1, 1).setValue("テストデータ")
}
参考記事