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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

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

Q&A

解決済

2回答

2480閲覧

スプレッドシートのステータス変更状況によって違う内容のメールを送付

bibi_popo

総合スコア2

Google Apps Script

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

0グッド

1クリップ

投稿2021/10/05 05:41

編集2021/10/06 05:29
スプレッドシートで対応状況の管理をしています。 ステータスが対応中、完了に変更された場合にメールで自動通知を行う際に 違うメール文にて送付をしたいです。 作成したGASは下記の通り

コード

function onChangeStatus(e){ var cell = e.range; var status = e.value; var sheet = cell.getSheet(); var column = cell.getColumn(); var row = cell.getRow(); var lastRow = sheet.getLastRow(); if(column === 18 && row >= 2 && row <= lastRow && status === '対応中'){ sendEmail(row); }else if(column === 18 && row >= 2 && row <= lastRow && status === '完了'){ sendEmail(column);} } function sendEmail(row,column){ var FIELDS = { no: 0, task: 9, status: 4, client: 5, agent: 6, policy: 8, limit: 10, tel: 11, memo: 13, tantou: 14, taiou: 16, } var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); var index = row - 1; var myNo = values[index][FIELDS.no]; var task = values[index][FIELDS.task]; var status = values[index][FIELDS.status]; var client = values[index][FIELDS.client]; var agent = values[index][FIELDS.agent]; var policy = values[index][FIELDS.policy]; var limit = values[index][FIELDS.limit]; var memo = values[index][FIELDS.memo]; var tantou = values[index][FIELDS.tantou]; var taiou = values[index][FIELDS.taiou]; if(column === 18 && row >= 2 && row <= lastRow && status === '対応中'){ sendEmail(row) var recipient = 'アドレス'; var recipientName = '各位'; var subject = ''; subject += limit; subject += '受電記録 代理店'; subject += agent; var body = ''; body += recipientName + '\n\n'; body += '※※このメールは自動送信です。※※\n\n'; body += '以下の問い合わせを受け付けしました\n'; body += '担当者の方は対応をお願いいたします。\n\n'; body += '**********************************\n'; body += '【受付番号】\n'; body += myNo; body += '\n\n'; body += '【契約者】\n'; body += client; body += '\n\n'; body += '【代理店】\n'; body += agent; body += '\n\n'; body += '【証券番号】\n'; body += policy; body += '\n\n'; body += '【依頼内容】\n'; body += task; body += '\n\n'; body += '【対応期限】\n'; body += limit; body += '\n\n'; body += '【備考】\n'; body += memo; body += '\n\n'; body += '**********************************\n\n'; body += '対応が完了した際は、スプレッドシートのステータスを完了にしてください。\n'; body += 'URL'; GmailApp.sendEmail(recipient, subject, body); }else if(column === 18 && row >= 2 && row <= lastRow && status === '完了'){ sendEmail(column) var recipient = 'アドレス'; var recipientName = '各位'; var subject = ''; subject += '受電対応完了 代理店'; subject += agent; var body = ''; body += recipientName + '\n\n'; body += '※※このメールは自動送信です。※※\n\n'; body += '以下の問い合わせ対応が完了しました。\n'; body += '**********************************\n'; body += '【受付番号】\n'; body += myNo; body += '\n\n'; body += '【対応者】\n'; body += tantou; body += '\n\n'; body += '【対応内容】\n'; body += taiou; body += '\n\n'; body += '**********************************\n\n'; body += 'URL'; GmailApp.sendEmail(recipient, subject, body); } } ```### 試したこと if分の挿入箇所に迷い、onChangeStates、sendEmail の様々な箇所に変えてみましたが昨日しませんでした。 ⇒上記コードに変更しましたが、メールが送信されなくなってしまいました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

javascript

1// R 列に "対応中" または "完了" と入力されたときに、メールを送りたい気持が感じられる。 2// これを編集時トリガーに登録しないと動作しない。 3// 実行ボタンやデバッグボタンを押してもエラーにしかならない。 4function onChangeStatus(e){ 5 const cell = e.range; 6 const status = e.value; 7 const sheet = cell.getSheet(); 8 const column = cell.getColumn(); 9 const row = cell.getRow(); 10 const lastRow = sheet.getLastRow(); 11 12 if(column === 18 && row >= 2 && row <= lastRow && status === '対応中'){ 13 sendEmail(row,true); 14 }else if(column === 18 && row >= 2 && row <= lastRow && status === '完了'){ 15 sendEmail(column,false); 16 } 17} 18// onchangestatus では、対応中や完了を入れるのは R 列だったのに、こちらでは E 列になっている。破綻している。 19const sendEmail = (row, isTodo) => { 20 const FIELDS = { 21 no: 0, 22 task: 9, 23 status: 4, 24 client: 5, 25 agent: 6, 26 policy: 8, 27 limit: 10, 28 tel: 11, 29 memo: 13, 30 tantou: 14, 31 taiou: 16, 32 }; 33 const recipient = 'アドレス'; 34 const recipientName = '各位'; 35 const record = SpreadsheetApp.getRange(row, 1, 1, 17).getValues()[0]; 36 const myNo = record[FIELDS.no]; 37 const task = record[FIELDS.task]; 38 const status = record[FIELDS.status]; 39 const client = record[FIELDS.client]; 40 const agent = record[FIELDS.agent]; 41 const policy = record[FIELDS.policy]; 42 const limit = record[FIELDS.limit]; 43 const memo = record[FIELDS.memo]; 44 const tantou = record[FIELDS.tantou]; 45 const taiou = record[FIELDS.taiou]; 46 GmailApp.sendEmail( 47 recipient, 48 isTodo ? todoSubject(limit,agent) : doneSubject(agent), 49 isTodo ? todoBody(recipientName,myNo,client,agent,policy,task,limit,memo) : doneBody(recipientName,myNo,tantou,taiou) 50 ); 51} 52const todoSubject = (limit, agent) => `${limit}受電記録 代理店${agent}`; 53const todoBody = (recipientName, myNo, client, agent, policy, task, limit, memo) => `${recipientName} 54 55※※このメールは自動送信です。※※ 56以下の問い合わせを受け付けしました 57担当者の方は対応をお願いいたします。 58 59********************************** 60【受付番号】 61${myNo} 62 63【契約者】 64${client} 65 66【代理店】 67${agent} 68 69【証券番号】 70${policy} 71 72【依頼内容】 73${task} 74 75【対応期限】 76${limit} 77 78 【備考】 79 ${memo} 80 81********************************** 82 83対応が完了した際は、スプレッドシートのステータスを完了にしてください。 84URL`; 85const doneSubject = (agent) => `'受電対応完了 代理店${agent}`; 86const doneBody = (recipientName, myNo, tantou, taiou) => `${recipientName} 87 88※※このメールは自動送信です。※※ 89 90以下の問い合わせ対応が完了しました。 91********************************** 92【受付番号】 93${myNo} 94 95【対応者】 96${tantou} 97 98【対応内容】 99${taiou} 100 101********************************** 102 103URL`;

投稿2021/10/06 15:48

編集2021/10/08 20:14
papinianus

総合スコア12705

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

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

bibi_popo

2021/10/07 03:16 編集

ご丁寧なレビューありがとうございました。 メールは送ることができるようになったのですが、対応中、完了いずれも完了時のメールの文面で送られてしまいます。 isToDoの条件がR列が対応中であることが真であることをどこかで定義する必要があるのでしょうか?
papinianus

2021/10/08 20:14

間違ってました。 これでどうでしょうか。
bibi_popo

2021/10/11 05:04

うまく稼働いたしました!非常に助かりました!ありがとうございます。
guest

0

エラーにある通りsendEmail()columnが定義されていないためにエラーになっています。
必要なのであれば、引数で渡しましょう。

投稿2021/10/05 23:44

macaron_xxx

総合スコア3191

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

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

bibi_popo

2021/10/06 05:16

ご回答ありがとうございました。質問欄に更新したコードを記載したのですが、 トリガーは実行されるもののメールが送信されなくなってしまいました。 要因等あればご教示いただきたいのですが可能でしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問