こちら、自己解決しましたので取り下げさせていただきます。
お目汚し大変失礼いたしました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
質問を削除しないでください。
また、自己解決したのであれば、自己解決した回答をつけてクローズしてください。
2020/03/25 08:34
【質問をした後に自己解決してしまった < ヘルプ|teratail(テラテイル)】
https://teratail.com/help#resolve-myself
> 自分で投稿した質問にも回答する事が可能です。質問文の内容を編集したりせず、回答を付けベストアンサーをクリックし解決済みにしてください。
> また後から読む人のためにも、具体的な解決手順を記載してください。
回答1件
0
ベストアンサー
javascript
1const generateMessageBody = (val) => { 2 return { 3 plain: fillin(val).map(e => `・${e}`).join("\n"), 4 html: `<ul><li>${fillin(val).map(e => `・${e}`).join("</li><li>")}</li></li>` 5 } 6}; 7const fillin = (val) => { 8 const items = ["お名前: ","出張先: ","出張目的: ","出張開始日: ","出張終了日: ","プライベート経路: ","回数券使用枚数: ","回数券使用枚数: ","承認する上長: "]; 9 return items.map((e,i)=>`${e}${val[i]}`); 10} 11const getMailAddr = (name) => { 12 const list = { 13 "質問者":"root@example.com", 14 "管理者":"admin@example.com", 15 } 16 return list[name] || "root@example.com" 17} 18const sendMessage = (e) => { 19 e.range.getSheet().getRange(e.range.getRow(), 11).setValue('確認中'); 20 const bodies = generateBodies(e.values); 21 const url = `https://script.google.com/~~~~~/exec?row=${e.range.getRow()}&answer=`; //公開したウェブアプリケーションのURL 22 const to = getMailAddr(e.values[8]); 23 const subject = "出張承認申請のお知らせ"; 24 const body = `以下の出張承認申請がありました。 25${bodies.plain} 26承認する場合は、以下URLをクリックしてください 27${url}ok 28否認する場合は、以下URLをクリックしてください 29${url}ok`; 30 const html = `<h1>出張承認申請のお知らせ</h1> 31<p>以下の出張承認申請がありました。</p> 32${bodies.html} 33<p>承認する場合は、<a href="${url}ok">[承認]</a>をクリックしてください</p> 34<p>否認する場合は、<a href="${url}ng">[否認]</a>をクリックしてください</p>`; 35 GmailApp.sendEmail(to, subject, body, { htmlBody: html }); 36} 37const doGet = (e) => { 38 const sheetId = ""; 39 const sheetName = "回答"; 40 const result = { 41 ok: '承認', 42 ng: '否認' 43 }; 44 const row = e.parameter.row; 45 const approval = result[e.parameter.answer]; 46 if(!approval) return; 47 const sheet = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName); 48 sheet.getRange(row, 11).setValue(approval); 49 50 const values = sheet.getRange(row, 1, 1, 11).getValues()[0]; 51 const message = generateMessageBody(values); 52 const to = getMailAddr(values[8]);; 53 const subject = `出張承認申請${approval}のお知らせ`; 54 const header = `以下の出張承認申請が${approval}されました。`; 55 const body = `${header} 56 57${message.plain}`; 58 const html = `<h1>${subject}</h1> 59<p>${header}</p> 60${bodies.html}`; 61 GmailApp.sendEmail(recipient, subject, body, { htmlBody: html }); 62 return HtmlService.createHtmlOutput(`${header}<p>あなたは以下の出張承認申請を${approval}しました</p>${bodies.html}`); 63}
投稿2020/03/25 10:17
編集2020/03/25 13:53総合スコア12705
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/25 12:47 編集
すみません勘違いしてました。以下取り下げます。
<s>ここは回答を書くところです。
しかも解決済みになっていて、かつ、評価が低い質問なので殆どの人の目に触れないと思います。
新たに質問したほうがいいと思いますよ。</s>
2020/03/25 12:39
> Y.H.さん
質問者本人が投稿していると本当に勘違いしていたのか、わざと勘違いしているように見せかけたネタコメントなのか、どちらですか?
2020/03/25 12:48 編集
すみません、真面目に勘違いしてました。編集前のを載っけてくれてたんですね。
2020/03/25 14:25
解決済みとのことなので追求しませんが、スプレッドシート側のformの送信時トリガーはどうも複数回発火するようです。teratailでもいくつか質問があります。このところ収まっているのでv8になってから沈静化しているのかもしれません。
いずれにしても、Form のスクリプトとして書くのが適当だと思います。
ただ、回答としてそういうコードをかくには、質問項目のタイトルや回答タイプが分からないと作りにくいため(シートからすると上から順になっているのかもしれませんが、単に面倒だという側面もありますため)情報が足りていません。
gasのやりかたに合っていないコードを紹介しているサイトだという観点を持つことをおすすめします。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。