回答編集履歴
1
a
test
CHANGED
@@ -1,92 +1,166 @@
|
|
1
|
+
- 望まないかたちであっても↓メールを送ることはできている前提です。多分こうすればいいんじゃないかなーというのを。(こちらでは form やシートの状態は知りようがないので、動作確認が難しいことをご理解ください)
|
2
|
+
|
3
|
+
```text
|
4
|
+
|
5
|
+
====メール=====
|
6
|
+
|
1
|
-
|
7
|
+
ご承認をお願いいたします。
|
2
|
-
|
3
|
-
|
8
|
+
|
4
|
-
|
5
|
-
このコードだけで動くようにするのは不可能です。
|
6
|
-
|
7
|
-
|
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
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
var
|
34
|
-
|
35
|
-
var s
|
36
|
-
|
37
|
-
var
|
38
|
-
|
39
|
-
=
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
var fo
|
44
|
-
|
45
|
-
=
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
//
|
50
|
-
|
51
|
-
var
|
52
|
-
|
53
|
-
var
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
tr
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
var
|
70
|
-
|
71
|
-
var
|
72
|
-
|
73
|
-
var
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
//
|
80
|
-
|
81
|
-
//
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
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 (
|
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
|
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,
|
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(
|
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) {
|
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
|
-
|
237
|
+
// Lockの解放
|
172
|
-
|
238
|
+
|
173
|
-
|
239
|
+
userLock.releaseLock();
|
174
|
-
|
240
|
+
|
175
|
-
|
241
|
+
// rangeLockStatus.setValue("ユーザロック終了");
|
176
|
-
|
177
|
-
*/
|
178
|
-
|
179
|
-
} catch (e) {
|
180
|
-
|
181
|
-
console.log(e);
|
182
242
|
|
183
243
|
}
|
184
244
|
|
245
|
+
}
|
246
|
+
|
185
247
|
```
|