兎にも角にもスプレッドシートと Apps Script を作る
スプレッドシートはきっと誰でも作れるはず。
スプレッドシートを作ったら Apps Script のプロジェクトを作る。
この時2種類の作り方があります。
- スプレッドシートと Apps Script を紐付ける方法
- スプレッドシートと Apps Script を紐付けない方法
Apps Script がスプレッドシートに紐付いていないと出来ないこと(使用できない関数)があります。
ちなみに私がハマった(出来なくて調べ回った)のはイベント周りでした。
特にスプレッドシートのイベントを利用する予定が無い場合は、2の紐付けをせずに作成で良いかと思います。
というのも、スプレッドシートと紐付けをした場合は Apps Script を開くために、紐付けたスプレッドシートを開かなくてはならないからです。

まぁ、好みなのでどちらでも大丈夫です。
今回は紐付け無い方でやります。
スプレッドシートのファイル名や Apps Script のファイル名はご自由にどうぞ。
とりあえず書き込んでみる
とりあえず、書き込んでみます。

何も入力されていない状態から

自由に追記できるようにするのが目標です
let chatBotSpreadsheet = null;
// スプレッドシートを取得する
function getSpreadsheet() {
// スプレッドシートの ID
const SSID = 'スプレッドシートの ID';
// スプレッドシートを開く
if(chatBotSpreadsheet === null) chatBotSpreadsheet = SpreadsheetApp.openById(SSID);
return chatBotSpreadsheet;
}
// テキストを最終行のセルに追記する
// @param string text
function writeToLastCell(text) {
// Spreadsheet クラスから Sheet クラスを取得
const sheet = getSpreadsheet().getSheets()[0];
// Sheet の最終行A列を取得し、 text を書き込む
sheet.getRange(sheet.getLastRow() + 1, 1).setValue(text); // 書き込み
}
// テキストを最終行に追記する
// @param [string, string...] texts
function writeToLastRange(texts) {
// Spreadsheet クラスから Sheet クラスを取得
const sheet = getSpreadsheet().getSheets()[0];
// 最終行に追記する
sheet.appendRow(texts); // 書き込み
}
// テキストを最終行に複数行追記する
// 配列の要素数に気をつける
// @param [[string, string], [string, string]] texts
function writeToLastRanges(texts) {
// Spreadsheet クラスから Sheet クラスを取得
const sheet = getSpreadsheet().getSheets()[0];
// Sheet の最終行A列から配列の要素数分を取得し、 texts を書き込む
sheet.getRange(sheet.getLastRow() + 1, 1, texts.length, texts[0].length).setValues(texts); // 書き込み
}
// テスト
function test() {
writeToLastCell("aaa bbb"); // 1
writeToLastRange(["aaa", "bbb", "cccc"]); // 2
writeToLastRanges([["ddd", "eee", "fff"], ["test 1", 2, 3]]); // 3
// [["ddd", "eee", "fff"], ["test 1", 2, 3]]
// [[ここと][ここ]...] の要素数を揃えないとエラーになります
}
スプレッドシートに書き込む上で必要になるものは、
1.書き込み先のスプレッドシート(スプレッドシートの ID)
2.書き込み先(シートの範囲)
3.書き込む内容
です。
1.書き込み先のスプレッドシートを開きます。
スプレッドシートの ID は、スプレッドシートを開いた時の URL の一部です。

今回だと
https://docs.google.com/spreadsheets/d/この部分/edit#gid=0
になります。
2.書き込み先を取得します。
リファレンスに慣れると便利です。
リファレンスによると、SpreadsheetApp.openById(SSID); は Spreadsheet クラスが返って来ます。
このクラスはスプレッドシート自体の名前や、各シートを管理するようなクラスです。
ということで、スプレッドシートを管理している Spreadsheet クラスから書き込みたい Sheet クラスを取り出します。
またまたリファレンスです。
Spreadsheet.getSheets() を利用することで、スプレッドシート内の Sheet を配列として全て取り出せます。
今回は Sheet が1つしかない無いので要素番号 0 を指定しています。
他にも名前や現在表示されているシートを取得する関数などもあります。
お好みで使い分けてください。
さて書き込み先の Sheet まで取得できました。
次は Sheet のどこ(行と列)に書き込むかを取得します。
今回は1列目の最後の行に書き込むようにしました。
・最終行の1列目に書き込む関数
・最終行に1行書き込む関数
・最終行に複数行書き込む関数
を用意しました。
3.書き込む内容
書き込む内容は書き込み先の取得の仕方によって変わります。
最終行の1列目に書き込む関数では、一つのセルに書き込むので String を引数に渡します。
最終行に1行書き込む関数では、最終行に複数列書き込むので [String, String, ...] (一次元配列)を引数に渡します。
最終行に複数行書き込む関数では、最終行から複数行に複数列書き込むので [[String, String, ...], [String, String, ...]] (二次元配列)を引数に渡します。
※この時、各行の配列(列)の要素数が等しくないとエラーになります。
結局のところ
1.用意されている SpreadsheetApp から Spreadsheet クラスを取得
2.Spreadsheet クラスから Sheet クラスを取得
3.Sheet クラスから書き込み範囲(Range クラス)を取得
4.Range クラスの範囲に沿った文字列 or 文字列配列 を用意
すれば大体どうにかなります。