難しく考える必要はありません。
1行目からSheet.getLastRow()
で取得した最終行まで各行をループしなが1列目のユーザーIDと一致するか比較していくだけです。
一致する行があれば、その行の2列目の値を書き換えます。
一致する行がなければ、最終行の次の行にユーザーIDと値を書き込みます。
JavaScript
1const userId = ".....";
2
3const sheet = SpreadsheetApp.getActiveSheet();
4const lastRow = sheet.getLastRow();
5
6let isUserFound = false;
7for (let row = 1; row <= lastRow; row++) {
8 if (sheet.getRange(row, 1).getValue() === userId) {
9 //userIdが見つかっら、データを更新
10 sheet.getRange(row, 2).setValue("com_off");
11 isUserFound = true;
12 break;
13 }
14}
15if (!isUserFound) {
16 //userIdが見つからなければ、最終行の次の行のデータを更新
17 const newLastRow = lastRow + 1;
18 sheet
19 .getRange(newLastRow, 1, 1, 2)
20 .setValues([[userId, "com_off"]]);
21}
ただ実際の実装では上のサンプルの様に行ごとにgetRange()
してgetValue()
するんじゃなくて、必要な範囲をまとめてgetRange()
してからgetValues()
して得た配列を使ってループした方がいいです。その方が速いので。
(追記)
あと、ここでかいたcom_on,offを探し、onだった場合こうするとやる場合
トグルするとしたらこんな感じでしょうか。
JavaScript
1function myFunction() {
2 const userId = "xyz";
3
4 const sheet = SpreadsheetApp.getActiveSheet();
5 const lastRow = sheet.getLastRow();
6 const data = sheet.getRange(1, 1, lastRow, 2).getValues();
7
8 const userRow = data.find((rowData) => rowData[0] === userId);
9 if (userRow) {
10 if (userRow[1] === "com_off") {
11 userRow[1] = "com_on";
12 } else {
13 userRow[1] = "com_off";
14 }
15 } else {
16 data.push([userId, "com_off"]);
17 }
18
19 sheet.getRange(1, 1, data.length, 2).setValues(data);
20}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/23 15:42
2020/05/23 16:07
2020/05/23 16:09
2020/05/24 00:53
2020/05/24 03:18