前提・実現したいこと
GASで特定のセルに、特定の文言が入った場合に通知メールを出したいと考えています。
具体的な利用シーン:
クーポン発行が承認されたとき、クーポン発行処理を行ってほしいという旨のメールを担当者に送りたい
e.range.getColumn();を使って、e.rangeで取得したアクティブセルが何列目かを取得したいと考えていますがエラーが出ます。
アクティブセルを取得するときのrangeの定義方法についてどうしてもわからず教えていただきたいです。
よろしくお願いします。
発生している問題・エラーメッセージ
TypeError: Cannot read property 'range' of undefined
下記のソースコードの中の、
var actCol = e.range.getColumn(); に対してエラーがでて前に進めません
該当のソースコード
function sendEmail_2(e){ /* シートの操作 */ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('フォームの回答 3'); /* 各値に対しての場合わけ */ var actCol = e.range.getColumn();//スプレッドシートにあるセルの列数を取得する→今回はe.rangeで取得したアクティブセルが何列目かを取得する var targetValue = sheet.getActiveCell().getValue();//getValueメソッドでセルの値を取得する=sheetオブジェクトのアクティブセルの値をtargetValueとする if (actCol !== 46 || //(アクティブなセルが)AT列=項目名:*** でない場合 または targetValue !== 'チェック完了' ) // AT列の値が 'チェック完了' でない場合 return; //この場合処理が終わり /* メールを作成し、送信する */ var actRow = e.range.getRow();//アクティブセルの行数を取得する→アクティブセルがある行を探す var values = sheet.getRange(actRow, 1, 1, 46).getValues()[0];// 該当行の A (1) - AT (46) 列目を 1 次元配列として取得 // Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数) 今回はA1=1,1、からactRow,46(アクティブセルがある行のAT列=46列目)までを範囲として取りたい // Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数).getValues()すると、その値を取り出せる if (values [45] === '') return;//AT列が空白だと処理をしない var opss = SpreadsheetApp.getActiveSpreadsheet(); var opsheet = opss.getSheetByName("宛先シート"); var recipient =opsheet.getRange(6,3).getValue(); //宛先シート上のC6セルにあて先となるアドレスをセットしておく。 var subject = '<クーポン付与依頼>'+values[39]+'_'+Utilities.formatDate(new Date(), "JST", "yyyyMMdd"); var body ='クーポン付与処理をお願いいたします。\n\n'; body +='申請番号:'+values [39]+'\n'; body +=ss.getUrl(); GmailApp.sendEmail(recipient, subject, body); }
試したこと
rangeを定義しようと考えましたが、アクティブセルを取得するためにrangeどのように定義していいか理解できませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。