🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

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

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

1回答

3180閲覧

GASで申請フローを作成したい。よろしくお願いいたします。

SKB5551

総合スコア0

Google スプレッドシート

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

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2020/12/23 06:50

編集2020/12/23 06:56

前提・実現したいこと

GASの有給申請フローを作成したく、ネットで調べてコード通りに作成したのですが
(多少数値等操作)途中までは動くのですが「do get」コードが作動しないみたいです。
初心者のため色々調べて試してはいるのですが作動しないです。どの部分が間違っているのかも検討が付きません。
よろしくお願いいたします。

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

,,,

エラーメッセージ 
Exception:無効なメール:~(行35、ファイル「do get コード」
,,,

該当のソースコード

function sendMessage(e) { /* <summary>  Formで登録された内容をeパラメタとして受け取り、SS上から必要データを取り出して、 承認者向けにメールを送付する。メールの内容として、承認・否認の選択肢を付与する。 SSには登録されたデータのStatusを”申請中”として登録する */ //eパラメタ等から対象シートのRowを取得、ついでにSSに申請中と登録 var row = e.range.getRow(); var sheet = SpreadsheetApp.openById("~").getSheetByName("有給申請管理"); //XXXXをSSのIDへ変更 activesheet.getRange(row,7).setValue("申請中"); // メールに貼り付けるBodyをgenerateBody関数から作成 var bodies = generateBody(e.values); // urlはこのGASをウェブアプリで公開した、アドレス+パラメータとして、rowとanswerをつける var url = "~"+ "?row=" + row +"&answer="; //https:...以下ををスクリプトをウェブアプリケーションとして公開した際に表示されるURLへ変更 //承認者のメアドを取得。事前にシート対象セルに計算式をはめ込む(ここは、GAS上で条件分岐を入れて検索してもOK) sheet.getRange(row, 8).setValue("=if(E"+ row +"=\"全日\",1,0.5)"); sheet.getRange(row, 9).setValue("=lookup(B"+ row + ",mail_adress_master!A:A,mail_adress_master!C:C)"); sheet.getRange(row, 10).setValue("=lookup(B"+ row +",mail_adress_master!A:A,mail_adress_master!D:D)"); var approver = sheet.getRange(row,10).getValue(); var recipient = approver; var subject = "有給休暇取得申請のお知らせ"; var body = ""; body += '有給休暇取得申請がありました\n\n'; body += bodies.plain; body += "承認する場合は以下をクリック"; body += url + "ok"; body += "承認しない場合は以下をクリック"; body += url + "ng"; var html =""; html += '<h1>有給休暇取得申請のお知らせ</h1>'; html += '<p>以下の有給休暇取得申請がありました</p>'; html += bodies.html; html += "<p>承認する場合は、<a href="+ url + "ok>【承認する】</a>をクリックしてください</p>" html += "<p>承認しない場合は、<a href="+ url + "ng>【否認する】</a>をクリックしてください</p>" GmailApp.sendEmail(recipient, subject, body, {htmlBody:html}); } function doGet(e){ /* <summary>  承認者がメールで選択したのち、選択した結果をSSのStatus項目に反映する。 また、申請者には結果をメールする。そして、承認者には選択した結果をブラウザ画面で表示する */ var row = e.parameter.row; var sheet = SpreadsheetApp.openById("~").getSheetByName("有給申請管理"); //XXXXをSSのIDへ変更 var values = sheet.getRange(row,1,1,7).getValues()[0]; Logger.log(values); var bodies = generateBody(values); var answers = e.parameter.answer; var result = { ok:"承認", ng:"否認" }; var recipient = values[11] if(answers){ sheet.getRange(row, 7).setValue(result[answers]); var subject = "有給休暇取得申請" + result[answers] +"のお知らせ"; var body = ""; body += '以下の有給休暇取得申請が'+ result[answers] +'されました。\n\n'; body += bodies.plain; var html = ''; html += '<h1>有給休暇取得'+ result[answers] +'のお知らせ</h1>'; html += '<p>以下の有給休暇取得申請が'+ result[answers] +'されました。</p>'; html += bodies.html; GmailApp.sendEmail(recipient, subject, body, {htmlBody:html}); var html =''; html += '<h1>有給休暇取得申請の'+ result[answers] + '</h1>'; html += '<p>あなたは以下の有給休暇取得申請を'+ result[answers] +'しました</p>'; html += bodies.html; return HtmlService.createHtmlOutput(html); }; } function generateBody(values){ var staff_number = values[1]; var staff_name = values[2]; var date = values[3]; var days = values[4]; var plain = ""; plain += '社員番号: ' + staff_number + '\n'; plain += '名前: ' + staff_name + '\n'; plain += '有給取得日: ' + date + ' \n'; plain += '有給日数: ' + days + ' \n'; var html = ''; html += '<ul>'; html += '<li>社員番号: ' + staff_number + '</li>'; html += '<li>名前: ' + staff_name + '</li>'; html += '<li>有給取得日: ' + date + ' </li>'; html += '<li>有給日数: ' + days + ' </li>'; html += '</ul>'; return {plain:plain, html:html}; }

補足情報(FW/ツールのバージョンなど)

スプレッドシート、URLは伏せてあります。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

他の部分は確認していませんが、少なくとも

var values = sheet.getRange(row,1,1,7).getValues()[0];
var recipient = values[11]

の部分
rowが仮に1の時、valuesの値は
「A1セルからA7セルまでの1行分のデータ」=「値は7つ」
になっています。
対して、recipientはその値から12個目の値をつかうと指定しています。

仮に12列目にアドレスがあるのであれば、
var values = sheet.getRange(row,1,1,12).getValues()[0];
var recipient = values[11]

とすべきですし、

7列目にアドレスがあるのであれば、
var values = sheet.getRange(row,1,1,7).getValues()[0];
var recipient = values[6]

とすべきです。

投稿2021/01/19 01:27

hiroshi0240

総合スコア640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問