質問編集履歴

8

特定にあたる部分を削除

2022/07/14 03:23

投稿

oxd37527
oxd37527

スコア1

test CHANGED
File without changes
test CHANGED
@@ -15,19 +15,19 @@
15
15
  function doGet(e) {
16
16
  const row = e.parameter.row;
17
17
  const sheet = SpreadsheetApp.getActiveSheet();
18
- const values = sheet.getRange(row, 1, 1, 13).getValues()[0];
18
+ const values = sheet.getRange(row, 1, 1, ).getValues()[0];
19
19
  const bodies = generateBodies(values);
20
20
  const answer = e.parameter.answer;
21
- const timestampStart = e.parameter.start_date;
21
+ const 出発 = e.parameter.start_date;
22
- const timestampEnd = e.parameter.end_date;
22
+ const 帰着 = e.parameter.end_date;
23
- const textReason = e.parameter.reason;
23
+ const 理由 = e.parameter.reason;
24
24
 
25
25
  const result = {
26
26
  ok: '承認',
27
27
  ng: '否認'
28
28
  };
29
29
 
30
- sheet.getRange(row, 13).setValue(result[answer]);
30
+ sheet.getRange(row, ).setValue(result[answer]);
31
31
 
32
32
  // answerが「ok」、すなわち承認のリンクがクリックされた場合は、Googleカレンダーにスケジュールを登録する。
33
33
  if (answer === 'ok') {
@@ -54,30 +54,13 @@
54
54
  }
55
55
 
56
56
  function generateBodies(values){
57
- const [timeStamp,email,number,start_date,end_date,reason,organization,place,leeding,lodging,car,freeway] = values;
57
+ const [] = values;
58
58
 
59
59
  let plain = '';
60
- plain += `公文書番号: ${number}\n`;
61
- plain += `出発日時: ${start_date}\n`;
62
- plain += `帰着日時: ${end_date}\n`;
63
- plain += `出張理由(名前): ${reason}\n`;
64
- plain += `主催: ${organization}\n`;
65
- plain += `出張場所: ${place}\n`;
60
+ plain += `\n`;
66
- plain += `引率: ${leeding}\n`;
67
- plain += `宿泊: ${lodging}\n`;
68
- plain += `交通手段: ${car}\n`;
61
+ plain += `\n\n`;
69
- plain += `高速: ${freeway}\n\n`;
70
62
  let html = '<ul>';
71
- html += `<li>公文書番号: ${number}</li>`;
72
- html += `<li>出発日時: ${start_date}</li>`;
73
- html += `<li>帰着日時: ${end_date}</li>`;
74
-  html += `<li>出張理由(名前): ${reason}</li>`;
75
- html += `<li>主催: ${organization}</li>`;
76
- html += `<li>出張場所: ${place}</li>`;
77
- html += `<li>引率: ${leeding}</li>`;
78
- html += `<li>宿泊: ${lodging}</li>`;
79
- html += `<li>交通手段: ${car}</li>`;
63
+ html += `<li></li>`;
80
- html += `<li>高速: ${freeway}</li>`;
81
64
  html += '</ul>';
82
65
  return {
83
66
  email: email,
@@ -90,16 +73,16 @@
90
73
 
91
74
  const row = e.range.getRow();
92
75
  const sheet = e.range.getSheet();
93
- sheet.getRange(row, 13).setValue('確認中');
76
+ sheet.getRange(row, ).setValue('確認中');
94
77
  const bodies = generateBodies(e.values);
95
78
  let url = 'https://script.google.com/a/macros/~/s/~';
96
79
 
97
80
  // 出張期間の開始日
98
- const timestampStart = e.values[1].getTime();
81
+ const timestampStart = e.values[].getTime();
99
82
  // 出張期間の終了日
100
- const timestampEnd = e.values[2].getTime();
83
+ const timestampEnd = e.values[].getTime();
101
84
  // 出張用件
102
- const textReason = e.values[3];
85
+ const textReason = e.values[];
103
86
 
104
87
  url += `?start_date=${timestampStart}&end_date=${timestampEnd}&reason=${textReason}&row=${row}&answer=`;
105
88
 

7

余分な空白などを削除した

2022/07/13 01:03

投稿

oxd37527
oxd37527

スコア1

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,6 @@
12
12
  実際のコードは下記です。
13
13
 
14
14
  ``````````````````````````````````````````````````````````````````
15
-
16
15
  function doGet(e) {
17
16
  const row = e.parameter.row;
18
17
  const sheet = SpreadsheetApp.getActiveSheet();
@@ -98,7 +97,7 @@
98
97
  // 出張期間の開始日
99
98
  const timestampStart = e.values[1].getTime();
100
99
  // 出張期間の終了日
101
- const timestampEnd = e.values[2].getTime();
100
+ const timestampEnd = e.values[2].getTime();
102
101
  // 出張用件
103
102
  const textReason = e.values[3];
104
103
 
@@ -133,7 +132,6 @@
133
132
  var cal = CalendarApp.getCalendarById(CALID);
134
133
  cal.createEvent(textReason, new Date(timestampStart), new Date(timestampEnd));
135
134
  }
136
-
137
135
  ``````````````````````````````````````````````````````````````````
138
136
 
139
137
  どうぞよろしくお願いいたします。

6

必要のないところを省いた

2022/07/13 00:52

投稿

oxd37527
oxd37527

スコア1

test CHANGED
File without changes
test CHANGED
@@ -67,7 +67,7 @@
67
67
  plain += `引率: ${leeding}\n`;
68
68
  plain += `宿泊: ${lodging}\n`;
69
69
  plain += `交通手段: ${car}\n`;
70
- plain += `高速の有無: ${freeway}\n\n`;
70
+ plain += `高速: ${freeway}\n\n`;
71
71
  let html = '<ul>';
72
72
  html += `<li>公文書番号: ${number}</li>`;
73
73
  html += `<li>出発日時: ${start_date}</li>`;
@@ -78,7 +78,7 @@
78
78
  html += `<li>引率: ${leeding}</li>`;
79
79
  html += `<li>宿泊: ${lodging}</li>`;
80
80
  html += `<li>交通手段: ${car}</li>`;
81
- html += `<li>高速の有無: ${freeway}</li>`;
81
+ html += `<li>高速: ${freeway}</li>`;
82
82
  html += '</ul>';
83
83
  return {
84
84
  email: email,

5

指摘いただいた部分を修正してのせた

2022/07/13 00:49

投稿

oxd37527
oxd37527

スコア1

test CHANGED
File without changes
test CHANGED
@@ -10,32 +10,43 @@
10
10
 
11
11
 
12
12
  実際のコードは下記です。
13
+
13
- ●フォーム回答後にスプレッドシートに反映、Gメールに承認・否認の内容を送信
14
+ ``````````````````````````````````````````````````````````````````
15
+
14
16
  function doGet(e) {
15
17
  const row = e.parameter.row;
16
18
  const sheet = SpreadsheetApp.getActiveSheet();
17
19
  const values = sheet.getRange(row, 1, 1, 13).getValues()[0];
18
20
  const bodies = generateBodies(values);
19
21
  const answer = e.parameter.answer;
22
+ const timestampStart = e.parameter.start_date;
23
+ const timestampEnd = e.parameter.end_date;
24
+ const textReason = e.parameter.reason;
25
+
20
-  const result = {
26
+ const result = {
21
27
  ok: '承認',
22
28
  ng: '否認'
23
29
  };
24
30
 
25
-  sheet.getRange(row, 13).setValue(result[answer]);
31
+ sheet.getRange(row, 13).setValue(result[answer]);
32
+
33
+ // answerが「ok」、すなわち承認のリンクがクリックされた場合は、Googleカレンダーにスケジュールを登録する。
34
+ if (answer === 'ok') {
35
+ registerSchedule(textReason, timestampStart, timestampEnd);
36
+ }
26
37
 
27
38
  const recipient = bodies.email;
28
39
  const subject = `出張申請${result[answer]}のお知らせ`;
29
40
  let body = '';
30
- body += `出張申請が${result[answer]}されました。\n\n`;
41
+ body += `出張申請が${result[answer]} されました。\n\n`;
31
42
  body += bodies.plain;
32
-
43
+
33
44
  let html = '';
34
45
  html += `<h1>出張申請${result[answer]}のお知らせ</h1>`;
35
46
  html += `<p>以下の出張申請が${result[answer]}されました。</p>`;
36
47
  html += bodies.html;
37
-
48
+
38
- GmailApp.sendEmail(recipient, subject, body, {htmlBody: html});
49
+ GmailApp.sendEmail(recipient, subject, body, { htmlBody: html });
39
50
  html = '';
40
51
  html += `<h1>出張申請の${result[answer]}</h1>`;
41
52
  html += `<p>あなたは以下の出張申請を${result[answer]}しました</p>`;
@@ -46,7 +57,6 @@
46
57
  function generateBodies(values){
47
58
  const [timeStamp,email,number,start_date,end_date,reason,organization,place,leeding,lodging,car,freeway] = values;
48
59
 
49
-
50
60
  let plain = '';
51
61
  plain += `公文書番号: ${number}\n`;
52
62
  plain += `出発日時: ${start_date}\n`;
@@ -77,18 +87,24 @@
77
87
  };
78
88
  }
79
89
 
80
-
81
90
  function sendMessage(e) {
82
91
 
83
92
  const row = e.range.getRow();
84
93
  const sheet = e.range.getSheet();
85
94
  sheet.getRange(row, 13).setValue('確認中');
86
95
  const bodies = generateBodies(e.values);
87
- let url = '~';
96
+ let url = 'https://script.google.com/a/macros/~/s/~';
88
97
 
98
+ // 出張期間の開始日
99
+ const timestampStart = e.values[1].getTime();
100
+ // 出張期間の終了日
101
+ const timestampEnd = e.values[2].getTime();
102
+ // 出張用件
89
-  url += `?row=${row}&answer=`;
103
+ const textReason = e.values[3];
104
+
90
-
105
+ url += `?start_date=${timestampStart}&end_date=${timestampEnd}&reason=${textReason}&row=${row}&answer=`;
106
+
91
- const recipient = '管理者メールアドレス';
107
+ const recipient = '管理者メールアドレス';
92
108
  const subject = '出張申請のお知らせ';
93
109
  let body = '';
94
110
  body += '以下の申請があります。\n\n';
@@ -104,30 +120,21 @@
104
120
  html += bodies.html;
105
121
  html += `<p>承認する場合は、<a href="${url}ok">[承認]</a>をクリックしてください</p>`;
106
122
  html += `<p>否認する場合は、<a href="${url}ng">[否認]</a>をクリックしてください</p>`;
107
-
108
- GmailApp.sendEmail(recipient, subject, body, {htmlBody: html});
109
123
 
110
- }
124
+ GmailApp.sendEmail(recipient, subject, body, { htmlBody: html });
111
125
 
112
-
113
- 【補足 活用できれば】
114
- ●申請フォーム回答で問答無用にカレンダーに反映されるコード
115
- function submit(e){
116
- // Googleフォームの回答を取得する
117
- var itemResponses = e.response.getItemResponses();
118
- // 出張理由
119
- var name = itemResponses[3].getResponse()
120
- // 出張日時
121
- var start_date = itemResponses[1].getResponse()
122
- // 帰着日時
123
- var end_date = itemResponses[2].getResponse()
124
-
125
- // カレンダーに予定を追加する
126
- var CALID = "~";
127
- var cal = CalendarApp.getCalendarById(CALID);
128
- cal.createEvent(reason, new Date(start_date), new Date(end_date));
129
126
  }
130
127
 
128
+ function registerSchedule(textReason, timestampStart, timestampEnd) {
129
+ // Googleフォームの回答を取得する
130
+ // カレンダーに予定を追加する
131
+
132
+ var CALID = "管理者のカレンダーID";
133
+ var cal = CalendarApp.getCalendarById(CALID);
134
+ cal.createEvent(textReason, new Date(timestampStart), new Date(timestampEnd));
135
+ }
136
+
137
+ ``````````````````````````````````````````````````````````````````
131
138
 
132
139
  どうぞよろしくお願いいたします。
133
140
 

4

詳細の少し省略

2022/07/12 07:11

投稿

oxd37527
oxd37527

スコア1

test CHANGED
File without changes
test CHANGED
@@ -84,7 +84,7 @@
84
84
  const sheet = e.range.getSheet();
85
85
  sheet.getRange(row, 13).setValue('確認中');
86
86
  const bodies = generateBodies(e.values);
87
- let url = 'https://script.google.com/a/macros/sandagakuen.ed.jp/s/ID/exec';
87
+ let url = '~';
88
88
 
89
89
   url += `?row=${row}&answer=`;
90
90
 

3

省略部分の変更

2022/07/12 07:09

投稿

oxd37527
oxd37527

スコア1

test CHANGED
File without changes
test CHANGED
@@ -17,13 +17,13 @@
17
17
  const values = sheet.getRange(row, 1, 1, 13).getValues()[0];
18
18
  const bodies = generateBodies(values);
19
19
  const answer = e.parameter.answer;
20
- const result = {
20
+  const result = {
21
21
  ok: '承認',
22
22
  ng: '否認'
23
23
  };
24
-
24
+
25
- sheet.getRange(row, 13).setValue(result[answer]);
25
+  sheet.getRange(row, 13).setValue(result[answer]);
26
-
26
+
27
27
  const recipient = bodies.email;
28
28
  const subject = `出張申請${result[answer]}のお知らせ`;
29
29
  let body = '';
@@ -44,26 +44,49 @@
44
44
  }
45
45
 
46
46
  function generateBodies(values){
47
- const [] = values;
47
+ const [timeStamp,email,number,start_date,end_date,reason,organization,place,leeding,lodging,car,freeway] = values;
48
48
 
49
49
 
50
50
  let plain = '';
51
+ plain += `公文書番号: ${number}\n`;
52
+ plain += `出発日時: ${start_date}\n`;
53
+ plain += `帰着日時: ${end_date}\n`;
54
+ plain += `出張理由(名前): ${reason}\n`;
55
+ plain += `主催: ${organization}\n`;
56
+ plain += `出張場所: ${place}\n`;
57
+ plain += `引率: ${leeding}\n`;
58
+ plain += `宿泊: ${lodging}\n`;
51
- plain +=  ~ \n\n`;
59
+ plain += `交通手段: ${car}\n`;
60
+ plain += `高速の有無: ${freeway}\n\n`;
52
- let html =  ~
61
+ let html = '<ul>';
62
+ html += `<li>公文書番号: ${number}</li>`;
63
+ html += `<li>出発日時: ${start_date}</li>`;
64
+ html += `<li>帰着日時: ${end_date}</li>`;
65
+  html += `<li>出張理由(名前): ${reason}</li>`;
66
+ html += `<li>主催: ${organization}</li>`;
67
+ html += `<li>出張場所: ${place}</li>`;
68
+ html += `<li>引率: ${leeding}</li>`;
69
+ html += `<li>宿泊: ${lodging}</li>`;
70
+ html += `<li>交通手段: ${car}</li>`;
71
+ html += `<li>高速の有無: ${freeway}</li>`;
72
+ html += '</ul>';
53
73
  return {
54
74
  email: email,
55
75
  plain: plain,
56
76
  html: html
57
77
  };
58
78
  }
79
+
80
+
59
81
  function sendMessage(e) {
60
82
 
61
83
  const row = e.range.getRow();
62
84
  const sheet = e.range.getSheet();
63
85
  sheet.getRange(row, 13).setValue('確認中');
64
86
  const bodies = generateBodies(e.values);
65
- let url = '';
87
+ let url = 'https://script.google.com/a/macros/sandagakuen.ed.jp/s/ID/exec';
88
+
66
- url += `?row=${row}&answer=`;
89
+  url += `?row=${row}&answer=`;
67
90
 
68
91
  const recipient = '管理者メールアドレス';
69
92
  const subject = '出張申請のお知らせ';
@@ -92,17 +115,17 @@
92
115
  function submit(e){
93
116
  // Googleフォームの回答を取得する
94
117
  var itemResponses = e.response.getItemResponses();
95
- //
118
+ // 出張理由
96
- var reasonname = itemResponses[3].getResponse()
119
+ var name = itemResponses[3].getResponse()
97
- //
120
+ // 出張日時
98
- var datestarting = itemResponses[1].getResponse()
121
+ var start_date = itemResponses[1].getResponse()
99
- //
122
+ // 帰着日時
100
- var dateturn = itemResponses[2].getResponse()
123
+ var end_date = itemResponses[2].getResponse()
101
124
 
102
125
  // カレンダーに予定を追加する
103
126
  var CALID = "~";
104
127
  var cal = CalendarApp.getCalendarById(CALID);
105
- cal.createEvent(reasonname, new Date(datestarting), new Date(dateturn));
128
+ cal.createEvent(reason, new Date(start_date), new Date(end_date));
106
129
  }
107
130
 
108
131
 

2

文法の修正

2022/07/08 01:53

投稿

oxd37527
oxd37527

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  出張の承認フローを作っているのですが、申請フォームに回答したら、管理者に承認か否認かを選ばせるメールが届くところまで完成しました。
2
2
  もう一つ手間を加えて、承認をおせばGoogleカレンダーに反映されるようにしたいです。
3
- フォームを送信すれば承認否認関係なくカレンダーに反映されるまではできたのですが以降がさっぱりで・・・
3
+ フォームを送信すれば承認否認関係なくカレンダーに反映されるものはできたのですが・・・
4
4
 
5
5
  お力添えいただきたく存じます。
6
6
 

1

文法の修正

2022/07/08 01:51

投稿

oxd37527
oxd37527

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  出張の承認フローを作っているのですが、申請フォームに回答したら、管理者に承認か否認かを選ばせるメールが届くところまで完成しました。
2
2
  もう一つ手間を加えて、承認をおせばGoogleカレンダーに反映されるようにしたいです。
3
- フォームを送信すれば承認否認関係なくカレンダーに反映されるまではできたのですが
3
+ フォームを送信すれば承認否認関係なくカレンダーに反映されるまではできたのですが以降がさっぱりで・・・
4
4
 
5
5
  お力添えいただきたく存じます。
6
6