回答編集履歴

1

a

2021/01/13 13:44

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -1,92 +1,166 @@
1
+ - 望まないかたちであっても↓メールを送ることはできている前提です。多分こうすればいいんじゃないかなーというのを。(こちらでは form やシートの状態は知りようがないので、動作確認が難しいことをご理解ください)
2
+
3
+ ```text
4
+
5
+ ====メール=====
6
+
1
- - エラーはなくなっと思います。
7
+ ご承認をお願いいます。
2
-
3
- - コードが理解不能な部分があり、動作しないように除外しています。
8
+
4
-
5
- このコードだけで動くようにするのは不可能です。
6
-
7
- 参考サイトのコードにない lock コードが理解不能な部分だからです。
9
+ ------------------------------------------------------------
10
+
11
+ ```
8
12
 
9
13
 
10
14
 
11
15
  ```javascript
12
16
 
13
- //------------------------------------------------------------
14
-
15
- // 設定エリアここから
16
-
17
- //------------------------------------------------------------
18
-
19
-
20
-
21
- // 件名、本文、フッター
22
-
23
- var NAME = sheet_form.getRange(rows,2).getValue();
24
-
25
- var EVENTDAY = sheet_form.getRange(rows,3).getValue();
26
-
27
- var PLACE = sheet_form.getRange(rows,4).getValue();
28
-
29
- var PURPOSE = sheet_form.getRange(rows,5).getValue();
30
-
31
- var ToNAME = sheet_form.getRange(rows,10).getValue();
32
-
33
- var FromNAME = sheet_form.getRange(rows,11).getValue();
34
-
35
- var subject = ""; // 無意味な省略をしないでください。構文エラになっています。
36
-
37
- var body
38
-
39
- = "ご承認をお願いいします。\n\n"
40
-
41
- + "------------------------------------------------------------\n";
42
-
43
- var footer
44
-
45
- = "------------------------------------------------------------\n\n"
46
-
47
-
48
-
49
- // ル送信先
50
-
51
- var admin = "~@~~~~"; // 管理者(必須)
52
-
53
- var cc = CC_NAME; // Cc:
54
-
55
- var to = To_NAME; // To:
56
-
57
- //------------------------------------------------------------
58
-
59
- // 設定エリアここまで
60
-
61
- //------------------------------------------------------------
62
-
63
- try{
64
-
65
- // スプレッドシートの操作
66
-
67
- var sh = SpreadsheetApp.getActiveSheet();
68
-
69
- var rows = sh.getLastRow();
70
-
71
- var cols = sh.getLastColumn();
72
-
73
- var rg = sh.getDataRange();
74
-
75
- Logger.log("rows="+rows+" cols="+cols);
76
-
77
-
78
-
79
- // メール件名・本文作成と送信先メールアドレス取得
80
-
81
- // 最初の質問で答えが「出張」だった2~5、「会議だったら」6~9を本文に入れるif文
82
-
83
-
84
-
85
- if (title==="どっちにしますか?") {
86
-
87
- if (ans==="出張") {
88
-
89
- for (var j = 2; j <= 5; j++ ) {
17
+ function my_update() {
18
+
19
+ var userLock = LockService.getUserLock();
20
+
21
+ // ユーザに対してLockがかかっているかチェック
22
+
23
+ if (userLock.tryLock(5000)) {
24
+
25
+ var ss = SpreadsheetApp.getActiveSpreadsheet();
26
+
27
+ var sheet = ss.getSheets()[0];
28
+
29
+
30
+
31
+ // Lockかけた状態のまま5秒待つ
32
+
33
+ Utilities.sleep(5000);
34
+
35
+
36
+
37
+ var ss = SpreadsheetApp.getActiveSpreadsheet();
38
+
39
+ var sheet_form = ss.getSheetByName("回答"); // スプレッドシト 「回答」シートopen
40
+
41
+ var get_title = sheet_form.getRange("J2:J").getValues(); //タイムスタンプを全部読み込み
42
+
43
+ var rows = sheet_form.getLastRow(); // 最終行の読み込み(フォームに入力されものは最終行に挿入されるため)
44
+
45
+ var EVENTDAY1_Copy = sheet_form.getRange(1, 3); // 出張日時の1行目の計算式をコピー
46
+
47
+ var EVENTDAY2_Copy = sheet_form.getRange(1, 7); // 会議日時の1行目の計算式をコピー
48
+
49
+ var To_Copy = sheet_form.getRange(1, 14);// 1行目の計算式をコピー
50
+
51
+ var CC_Copy = sheet_form.getRange(1, 15);// 1行目の計算式をコピー
52
+
53
+ var ToNAME_Copy = sheet_form.getRange(1, 16);// 1行目の計算式をコピ
54
+
55
+ var FromNAME_Copy = sheet_form.getRange(1, 17);// 1行目の計算式をコピー
56
+
57
+ for (var j = 2; j <= rows; j++) {
58
+
59
+ EVENTDAY1_Copy.copyTo(sheet_form.getRange(j, 3));
60
+
61
+ EVENTDAY2_Copy.copyTo(sheet_form.getRange(j, 7));
62
+
63
+ To_Copy.copyTo(sheet_form.getRange(j, 14));
64
+
65
+ CC_Copy.copyTo(sheet_form.getRange(j, 15));
66
+
67
+ ToNAME_Copy.copyTo(sheet_form.getRange(j, 16));
68
+
69
+ FromNAME_Copy.copyTo(sheet_form.getRange(j, 17));
70
+
71
+ }                                // 1行目の計算式を最終行まで貼り付け
72
+
73
+ var To_NAME = sheet_form.getRange(rows, 14).getValue();
74
+
75
+ var CC_NAME = sheet_form.getRange(rows, 15).getValue();
76
+
77
+ var TITLE = sheet_form.getRange(rows, 1).getValue();
78
+
79
+
80
+
81
+
82
+
83
+ //------------------------------------------------------------
84
+
85
+ // 設定エリアここか
86
+
87
+ //------------------------------------------------------------
88
+
89
+
90
+
91
+ // 件名、本文、フッター
92
+
93
+ var NAME1 = sheet_form.getRange(rows, 2).getValue();
94
+
95
+ var EVENTDAY1 = sheet_form.getRange(rows, 3).getValue();
96
+
97
+ var PLACE1 = sheet_form.getRange(rows, 4).getValue();
98
+
99
+ var PURPOSE1 = sheet_form.getRange(rows, 5).getValue();
100
+
101
+ var NAME2 = sheet_form.getRange(rows, 6).getValue();
102
+
103
+ var EVENTDAY2 = sheet_form.getRange(rows, 7).getValue();
104
+
105
+ var PLACE2 = sheet_form.getRange(rows, 8).getValue();
106
+
107
+ var PURPOSE2 = sheet_form.getRange(rows, 9).getValue();
108
+
109
+ var ToNAME = sheet_form.getRange(rows, 16).getValue();
110
+
111
+ var FromNAME = sheet_form.getRange(rows, 17).getValue();
112
+
113
+ var subject = "申請 " + EVENTDAY1 + "/" + NAME1;
114
+
115
+ var body
116
+
117
+ = "ご承認をお願いいたします。\n\n"
118
+
119
+ + "------------------------------------------------------------\n";
120
+
121
+ var footer
122
+
123
+ = "------------------------------------------------------------\n\n"
124
+
125
+
126
+
127
+ // メール送信先
128
+
129
+ var admin = "~~~~@~~~~jp"; // 管理者(必須)
130
+
131
+ var cc = CC_NAME; // Cc:
132
+
133
+ var to = To_NAME; // To:
134
+
135
+ //------------------------------------------------------------
136
+
137
+ // 設定エリアここまで
138
+
139
+ //------------------------------------------------------------
140
+
141
+ try {
142
+
143
+ // スプレッドシートの操作
144
+
145
+ var sh = SpreadsheetApp.getActiveSheet();
146
+
147
+ var rows = sh.getLastRow();
148
+
149
+ var cols = sh.getLastColumn();
150
+
151
+ var rg = sh.getDataRange();
152
+
153
+ Logger.log("rows=" + rows + " cols=" + cols);
154
+
155
+
156
+
157
+ // メール件名・本文作成と送信先メールアドレス取得
158
+
159
+ // 最初の質問で答えが「出張」だったら2~5、「会議だったら」6~9を本文に入れるif文
160
+
161
+ if (TITLE === "出張") {
162
+
163
+ for (var j = 2; j <= 5; j++) {
90
164
 
91
165
  var col_name = rg.getCell(1, j).getValue(); // カラム名
92
166
 
@@ -98,37 +172,33 @@
98
172
 
99
173
  }
100
174
 
101
-
102
-
103
- } else if (ans==="会議") {
175
+ } else if (TITLE === "会議") {
104
-
176
+
105
- for (var j = 6; j <= 9; j++ ) {
177
+ for (var j = 6; j <= 9; j++) {
106
-
178
+
107
- var col_name = rg.getCell(1, j).getValue(); // カラム名
179
+ var col_name = rg.getCell(1, j).getValue(); // カラム名
108
180
 
109
181
  var col_value = rg.getCell(rows, j).getValue(); // 入力値
110
182
 
111
- body += "▼"+col_name+"\n";
183
+ body += "▼" + col_name + "\n";
112
184
 
113
185
  body += col_value + "\n\n";
114
186
 
115
-
116
-
117
187
  }
118
188
 
119
189
  }
120
190
 
121
191
  body += footer;
122
192
 
123
- cc = sheet_form.getRange(rows,9).getValue();
193
+ cc = sheet_form.getRange(rows, 15).getValue();
124
-
125
-
126
-
194
+
195
+
196
+
127
- // 送信先オプション
197
+ // 送信先オプション
128
198
 
129
199
  var options = {};
130
200
 
131
- if( cc ) options.cc = CC_NAME;
201
+ if (cc) options.cc = CC_NAME;
132
202
 
133
203
  var lock = LockService.getUserLock();
134
204
 
@@ -136,9 +206,9 @@
136
206
 
137
207
  try {
138
208
 
139
- // メール送信
209
+ // メール送信
140
-
210
+
141
- if (to) { // to が固定だとこの if は無意味
211
+ if (to) {
142
212
 
143
213
  MailApp.sendEmail(to, subject, body, options);
144
214
 
@@ -148,13 +218,9 @@
148
218
 
149
219
  }
150
220
 
151
- } catch(e) {
152
-
153
- MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message);
154
-
155
221
  } finally {
156
222
 
157
- //最期に必ずロックを開放する
223
+ //最期に必ずロックを開放する
158
224
 
159
225
  lock.releaseLock();
160
226
 
@@ -162,24 +228,20 @@
162
228
 
163
229
  }
164
230
 
165
-
231
+ } catch (e) {
232
+
233
+ MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message);
166
234
 
167
235
  }
168
236
 
169
- /* これがなぜ存在するのか理解不能
170
-
171
- // Lockの解放
237
+ // Lockの解放
172
-
238
+
173
- userLock.releaseLock();
239
+ userLock.releaseLock();
174
-
240
+
175
- rangeLockStatus.setValue("ユーザロック終了");
241
+ // rangeLockStatus.setValue("ユーザロック終了");
176
-
177
- */
178
-
179
- } catch (e) {
180
-
181
- console.log(e);
182
242
 
183
243
  }
184
244
 
245
+ }
246
+
185
247
  ```