回答編集履歴

2

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

2020/05/23 16:40

投稿

draq
draq

スコア2577

test CHANGED
@@ -57,3 +57,59 @@
57
57
 
58
58
 
59
59
  ただ実際の実装では上のサンプルの様に行ごとに`getRange()`して`getValue()`するんじゃなくて、必要な範囲をまとめて`getRange()`してから`getValues()`して得た配列を使ってループした方がいいです。その方が速いので。
60
+
61
+
62
+
63
+ ---
64
+
65
+ (追記)
66
+
67
+ > あと、ここでかいたcom_on,offを探し、onだった場合こうするとやる場合
68
+
69
+
70
+
71
+ トグルするとしたらこんな感じでしょうか。
72
+
73
+ ```JavaScript
74
+
75
+ function myFunction() {
76
+
77
+ const userId = "xyz";
78
+
79
+
80
+
81
+ const sheet = SpreadsheetApp.getActiveSheet();
82
+
83
+ const lastRow = sheet.getLastRow();
84
+
85
+ const data = sheet.getRange(1, 1, lastRow, 2).getValues();
86
+
87
+
88
+
89
+ const userRow = data.find((rowData) => rowData[0] === userId);
90
+
91
+ if (userRow) {
92
+
93
+ if (userRow[1] === "com_off") {
94
+
95
+ userRow[1] = "com_on";
96
+
97
+ } else {
98
+
99
+ userRow[1] = "com_off";
100
+
101
+ }
102
+
103
+ } else {
104
+
105
+ data.push([userId, "com_off"]);
106
+
107
+ }
108
+
109
+
110
+
111
+ sheet.getRange(1, 1, data.length, 2).setValues(data);
112
+
113
+ }
114
+
115
+ ```

1

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

2020/05/23 16:40

投稿

draq
draq

スコア2577

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  sheet
48
48
 
49
- .getRange(newLastRow, 1, newLastRow, 2)
49
+ .getRange(newLastRow, 1, 1, 2)
50
50
 
51
51
  .setValues([[userId, "com_off"]]);
52
52