teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コメントでの質問の回答を追記

2020/05/23 16:40

投稿

draq
draq

スコア2577

answer CHANGED
@@ -27,4 +27,32 @@
27
27
  }
28
28
  ```
29
29
 
30
- ただ実際の実装では上のサンプルの様に行ごとに`getRange()`して`getValue()`するんじゃなくて、必要な範囲をまとめて`getRange()`してから`getValues()`して得た配列を使ってループした方がいいです。その方が速いので。
30
+ ただ実際の実装では上のサンプルの様に行ごとに`getRange()`して`getValue()`するんじゃなくて、必要な範囲をまとめて`getRange()`してから`getValues()`して得た配列を使ってループした方がいいです。その方が速いので。
31
+
32
+ ---
33
+ (追記)
34
+ > あと、ここでかいたcom_on,offを探し、onだった場合こうするとやる場合
35
+
36
+ トグルするとしたらこんな感じでしょうか。
37
+ ```JavaScript
38
+ function myFunction() {
39
+ const userId = "xyz";
40
+
41
+ const sheet = SpreadsheetApp.getActiveSheet();
42
+ const lastRow = sheet.getLastRow();
43
+ const data = sheet.getRange(1, 1, lastRow, 2).getValues();
44
+
45
+ const userRow = data.find((rowData) => rowData[0] === userId);
46
+ if (userRow) {
47
+ if (userRow[1] === "com_off") {
48
+ userRow[1] = "com_on";
49
+ } else {
50
+ userRow[1] = "com_off";
51
+ }
52
+ } else {
53
+ data.push([userId, "com_off"]);
54
+ }
55
+
56
+ sheet.getRange(1, 1, data.length, 2).setValues(data);
57
+ }
58
+ ```

1

コードに間違いがあったので修正

2020/05/23 16:40

投稿

draq
draq

スコア2577

answer CHANGED
@@ -22,7 +22,7 @@
22
22
  //userIdが見つからなければ、最終行の次の行のデータを更新
23
23
  const newLastRow = lastRow + 1;
24
24
  sheet
25
- .getRange(newLastRow, 1, newLastRow, 2)
25
+ .getRange(newLastRow, 1, 1, 2)
26
26
  .setValues([[userId, "com_off"]]);
27
27
  }
28
28
  ```