質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

解決済

Googleフォームを使った承認ワークフローで送信されるメールの日付と文字列が正常に反映されない

catmail
catmail

総合スコア2

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

1回答

0リアクション

2クリップ

743閲覧

投稿2022/07/14 07:12

前提

https://tonari-it.com/gas-workflow-url-parameter/
こちらのシリーズを参考に、Googleフォームでワークフローを作成しています。
承認の項目を付けるところまでは問題なく作れたのですが、
この最後のページの「承認」と「否認」を選択できるように作成を試みたところ、承認or否認後のメール本文内、クリック後のページの両方に表示される日付の形式が変換されてしまうことと、選択によって変更する「承認」と「否認」の文字列が正常に反映しない状態になりました。

実現したいこと

  • 日付を yyyy/mm/dd の形式で表示したい
  • ${result[answer]} と表示されてしまう部分を、回答結果により 承認 否認 と表示されるようにしたい

発生している問題・エラーメッセージ

↓フォーム送信後に承認者へ配信されるメール本文(問題なし)

イメージ説明

↓承認or否認後に送信されるメール本文&クリック後に表示されるページ(文字列と日付に不具合あり)

イメージ説明

表示上ではおかしいのですが、スプレッドシートに記録されるデータは正常に記録されています。

メール送信のコード

function sendMessage(e) { const row = e.range.getRow(); const sheet = e.range.getSheet(); sheet.getRange(row, 11).setValue('申請中'); const bodies = generateBodies(e.values); let url = 'ウェブアプリケーションのURL'; url += `?row=${row}&answer=`; const recipient = '承認者のメールアドレス'; const subject = '●●●●●承認依頼'; let body = ''; body += '以下の●●●申請がありました。\n\n'; body += bodies.plain; body += '承認する場合は、以下URLをクリックしてください\n'; body += url + 'ok'; body += '否認する場合は、以下URLをクリックしてください\n'; body += url + 'ng'; let html = ''; html += '<h1>●●●●●承認依頼</h1>'; html += '<p>以下の●●●申請がありました。</p>'; html += bodies.html; html += `<p><a href="${url}ok">[ 承認 ]</a>  <a href="${url}ng">[ 否認 ]</a></p>`; GmailApp.sendEmail(recipient, subject, body, {htmlBody: html}); }

承認・否認機能のコード

function doGet(e) { const row = e.parameter.row; const sheet = SpreadsheetApp.getActiveSheet(); const values = sheet.getRange(row, 1, 1, 11).getValues()[0]; const bodies = generateBodies(values); const answer = e.parameter.answer; const result = { ok: '承認', ng: '否認' }; sheet.getRange(row, 11).setValue(result[answer]); const recipient = bodies.email; const subject = '●●●申請 ${result[answer]}通知'; let body = ''; body += '以下の●●●申請が${result[answer]}されました。\n\n'; body += bodies.plain; let html = ''; html += '<h1>●●●申請 ${result[answer]}通知</h1>'; html += '<p>以下の●●●申請が${result[answer]}されました。</p>'; html += bodies.html; GmailApp.sendEmail(recipient, subject, body, {htmlBody: html}); html = ''; html += '<h1>●●●申請 ${result[answer]}</h1>'; html += '<p>以下の●●●申請を${result[answer]}しました。</p>'; html += bodies.html; return HtmlService.createHtmlOutput(html); }

メールのテンプレート化コード

function generateBodies(values){ const [timeStamp, email, dept , name , day , ●●●, ●●●, ●●●, ●●●, ●●●] = values; let plain = ''; plain += `・営業所: ${dept}\n`; plain += `・申請者名: ${name}\n`; plain += `・使用希望日: ${day}\n`; plain += `・●●●: ${●●●}\n`; plain += `・●●●: ${●●●}\n`; plain += `・●●●: ${●●●}\n`; plain += `・●●●: ${●●●}\n\n`; let html = '<ul>'; html += `<li>営業所: ${dept}</li>`; html += `<li>申請者名: ${name}</li>`; html += `<li>使用希望日: ${day}</li>`; html += `<li>●●●: ${●●●} (${no})</li>`; html += `<li>●●●: ${●●●}</li>`; html += `<li>●●●: ${●●●}</li>`; html += `<li>●●●: ${●●●}</li>`; html += '</ul>'; return { email: email, plain: plain, html: html }; }

マニフェストファイル

{ "timeZone": "Asia/Tokyo", "dependencies": {}, "exceptionLogging": "STACKDRIVER", "oauthScopes": [ "https://www.googleapis.com/auth/spreadsheets.currentonly", "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/forms", "https://www.googleapis.com/auth/gmail.send", "https://www.googleapis.com/auth/gmail.compose", "https://www.googleapis.com/auth/gmail.modify", "https://mail.google.com/", "https://www.googleapis.com/auth/gmail.addons.current.action.compose", "https://www.googleapis.com/auth/script.external_request" ], "runtimeVersion": "V8", "webapp": { "executeAs": "USER_DEPLOYING", "access": "DOMAIN" } }

試したこと

以前の質問でシングルクオーテーションの入力ミスを指摘していただいたので、間違って入力しないよう参考先からコピペしてきたのですが、正常に機能しませんでした。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

catmail

2022/07/19 04:57

ご回答ありがとうございます。 日付について、const formattedDay= Utilities.formatDate(day , 'Asia/Tokyo', 'yyyy/MM/dd');を追加したところ、メールが送信されてこなくなりました。 トリガーのエラーを確認したところ Exception: パラメータ(String,String,String)が Utilities.formatDate のメソッドのシグネチャと一致しません。 というエラーが発生しております。 ${result[answer]} の表示については、バッククオートに変更したところ無事に正常に反映するようになりました。
qnoir

2022/07/19 13:35

修正しました

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。