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

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

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

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

Google フォーム

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

Google Apps Script

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

Q&A

解決済

1回答

3215閲覧

GAS:スプレッドシートに自動採番した番号を付け、メールで返したい

nemukutemofight

総合スコア1

Google スプレッドシート

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

Google フォーム

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

Google Apps Script

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

0グッド

2クリップ

投稿2022/02/18 03:18

前提として

下記にブログに掲載している方法で、稟議申請を作成し、下記まではエラーなく完了できています。
①Googleフォームで申請を送信
②送信後、承認者にメールを送信、13列目に「確認中」と表示(sendMessage)
③承認者が承認リンクを踏んだら、13列目が「承認」に変わる&承認完了のメッセージを申請者に送信(doGet)

・参照したブログ https://tonari-it.com/gas-workflow-form-gmail-spreadsheet/

作成したコード

sendMessage

1function sendMessage(e) { 2 const [timeStamp , email , department , name , title , content , expenses , order, price , payment , date, memo ] = e.values; 3 const row = e.range.getRow(); 4 const sheet = e.range.getSheet(); 5 sheet.getRange(row, 13).setValue('確認中'); 6 7 const recipient = '********@*******.jp'; //送信先メールアドレス 8 const subject = '稟議申請のお知らせ'; 9 let body = ''; 10 body += '稟議申請がありました。\n\n'; 11 body += `・申請者名: ${name}\n`; 12 body += `・案件名: ${title} \n`; 13 body += `・内容: ${content} \n`; 14 body += `・精算方法: ${expenses} \n`; 15 body += `・発注書・見積書: ${order} \n`; 16 body += `・金額(税抜): ${price} \n`; 17 body += `・支払方法: ${payment} \n`; 18 body += `・支払日: ${date} \n`; 19 body += `・備考: ${memo} \n`; 20 body += '承認する場合は以下URLをクリックしてください\n'; 21 body += 'https://script.google.com/*************************Up4/exec'; //公開したウェブアプリケーションのURL 22 body += `?row=${row}`; 23 24 GmailApp.sendEmail(recipient, subject, body); 25}

doGet

1function doGet(e) { 2 const row = e.parameter.row; 3 const sheet = SpreadsheetApp.getActiveSheet(); 4 const values = sheet.getRange(row, 1, 1, 13).getValues()[0]; 5 const [timeStamp , email , department , name , title , content , expenses , order, price , payment , date, memo ] = values; 6 7 sheet.getRange(row, 13).setValue('承認'); 8 9 const subject = '稟議申請承認のお知らせ'; 10 let body = ''; 11 body += '以下の稟議申請が承認されました。\n\n'; 12 body += `・申請者名: ${name}\n`; 13 body += `・案件名: ${title} \n`; 14 body += `・内容: ${content} \n`; 15 body += `・精算方法: ${expenses} \n`; 16 body += `・発注書・見積書: ${order} \n`; 17 body += `・金額(税抜): ${price} \n`; 18 body += `・支払方法: ${payment} \n`; 19 body += `・支払日: ${date} \n`; 20 body += `・備考: ${memo} \n`; 21 GmailApp.sendEmail(email, subject, body); //申請者にメールを送る 22 23 let html = ''; 24 html += '<h1>稟議申請承認のお知らせ</h1>'; 25 html += '<p>あなたは以下の稟議申請を承認しました</p>'; 26 html += '<ul>'; 27 html += `<li>申請者名: ${name}</li>`; 28 html += `<li>案件名: ${title}</li>`; 29 html += `<li>内容: ${content}</li>`; 30 html += `<li>精算方法: ${expenses}</li>`; 31 html += `<li>発注書・見積書: ${order}</li>`; 32 html += `<li>金額(税抜): ${price}</li>`; 33 html += `<li>支払方法: ${payment}</li>`; 34 html += `<li>支払日: ${date}</li>`; 35 html += `<li>備考: ${memo}</li>`; 36 html += '</ul>'; 37 return HtmlService.createHtmlOutput(html); 38 }

やりたいこと

申請した件に、自動で稟議番号を採番し、採番した番号を承認完了のメッセージに付け加えて送りたい

ARRAYFORMULA 関数で予めスプレッドシートに番号を振っておく方法などいろいろ試しましたが、シートに振った番号がundefinedとなってしまったりして、うまくいきませんでした。参考書で調べても、自動採番する方法なら出てきますが、それをメールに反映させる方法と上記のコードで書いた場合の追加方法がわかりませんでしたので、教えていただけますと助かります!

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

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

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

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

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

guest

回答1

0

ベストアンサー

一番簡単な形ですが、

(以下はスプレッドシートのスクリプトにコードを書いている場合です)
・フォームの回答シートの一番左に列を新しく挿入
・そのA1セルに
「=arrayformula(if(B1:B<>"",row(A1:A)-1,""))」
という数式を入れます。
これで回答毎に連番が付いたように見えます。

あとは下記のように、sendMessageとdoGetの中でrowを使うようにするというのはどうでしょうか。

js

1function sendMessage(e) { 23 body += '以下の稟議申請が承認されました。\n\n'; 4 body += `・稟議番号: ${row}\n`; // 追加 5 body += `・申請者名: ${name}\n`; 6以下略

js

1function doGet(e) { 2(略) 3 let body = ''; 4 body += '以下の稟議申請が承認されました。\n\n'; 5 body += `・稟議番号: ${row}\n`; // 追加 6 body += `・申請者名: ${name}\n`; 7(以下略)

投稿2022/02/19 00:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nemukutemofight

2022/02/21 03:19

qnoir様 ご回答ありがとうございます! 早速試してみたところ、稟議ナンバーをつけた申請先へのメール送信は成功しました! ただ、承認リンクを踏んだ後、下記エラーが出てしまいました。 ------- Exception: 無効なメール: Sun Feb 20 2022 22:09:45 GMT-0500 (アメリカ東部標準時)(行 22、ファイル「doget」) ------- doget の 行22 は、下記なのですが、特にここはいじってません。 ------- GmailApp.sendEmail(email, subject, body); //申請者にメールを送る ------- どういったことが原因かおわかりでしたら、教えていただけますと幸いです。 ・やったこと ①ご指示いただいた追加事項を追加 ②確認中、承認を入れるセル 13→14 に変更(A1セルを追加したため) ③新しくデプロイして、承認リンクを更新
nemukutemofight

2022/02/21 04:22

(追記) doget で2行目に定義している下記一文が邪魔していたりするのでしょうか。 const row = e.parameter.row;
nemukutemofight

2022/02/21 04:48 編集

(エラーの部分のみ自己解決) ▼doget の中の下記部分の1番目を追記してみたらエラー回避できました! ------- const [ringinumber , timeStamp , email , department , name , title , content , expenses , order, price , payment , date, memo ] = values; ------- ▼下記bodyもringinumber としました。 ------- body += `・稟議番号: ${ringinumber}\n`; // 稟議番号 ------- ほぼ解決に導いていただきまして、ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問