Googleスプレッドシートの管理表に入力した内容を、「担当」(プルダウンメニュー)を入力したタイミングで、担当者にメール通知し、さらに担当者のGoogleカレンダーに登録したいです。(登録する内容は日、時間、内容、場所)
※すでに入力された担当者に変更があった場合(たとえばAさん→Bさん)
・新担当者のBさんには通常通り、メール通知&Googleカレンダー登録。
・旧担当者のAさんには変更があった旨(「AさんからBさんに担当が変わりました」)をメール通知。
・旧担当者のAさんのGoogleカレンダーに登録されたスケジュールは削除し、新担当者のBさんのGoogleカレンダーに登録する。
【追記】
下記のサイトに掲載されているコードが近いと思ったので、必要な部分のみを取り出して、自分の管理表に合わせて一部改変して試してみたのですが、私自身が全体を理解できていないため、正常に動かず(担当を入れると、同じ行のI列に「通知予定」と表示されるだけ)、混乱を避けるため、一旦破棄しました。
Googleスプレッドシートで課題管理表を作成し、メール通知などの処理を自動化しよう | デザインってオモシロイ -MdN Design Interactive-
1// メールアドレスの設定 2var MAILADD = { 3 '阿部':'abe@example.com', 4 '佐藤':'sato@example.com' 5}; 6 7 8// スプレットシートのアクティブを取得 9var SS = SpreadsheetApp.getActive(); 10// アクティブなシートを取得 11var SHEET = SS.getActiveSheet(); 12 13// 編集時 14function onEdit(e) { 15 16 // 変更行 17 e.range.getLastColumn(); 18 // 変更列 19 e.range.getLastRow(); 20 21 // 依頼者が入力されたら 22 if(e.range.getLastColumn() === 3){ 23 // 何か入力があれば 24 if(e.range.getValue()){ 25 addEditDate(e.range.getLastColumn()+1,e.range.getLastRow()); 26 } 27 } 28 29 // 対応内容が入力されたら 30 if(e.range.getLastColumn() === 8){ 31 // 何か入力があれば 32 if(e.range.getValue()){ 33 addEditDate(e.range.getLastColumn()+1,e.range.getLastRow()); 34 } 35 } 36 37 // 担当者が入力されたら 38 if(e.range.getLastColumn() === 6){ 39 range = SHEET.getRange(e.range.getLastRow(),e.range.getLastColumn()+1); 40 range.setValue('通知予定'); 41 } 42 43 // ステータスが変更されたら 44 if(e.range.getLastColumn() === 2){ 45 // 完了の場合 46 if(e.range.getValue()=='完了'){ 47 48 var changeRnages = "A" + e.range.getLastRow() + ":" + "I" + e.range.getLastRow(); 49 var range = SHEET.getRange(changeRnages); 50 range.setBackground("#cccccc"); 51 52 } 53 } 54 55 // 日付の差分 56 // dateDiff(new Date('2014/1/1'), new Date('2012/1/2')); // 1 57 58 // コメントを付与 59 //e.range.setComment("Edited by: " + e.user + new Date()); 60} 61 62 63// 現在の日付を指定のセルに代入する 64function addEditDate(c,r){ 65 range = SHEET.getRange(r,c); 66 // 日付の代入 67 range.setValue(formatDate(new Date())); 68 69} 70 71function checkNotification(){ 72 73 // 複数行のセルを取得 (列, 行, 何列, 何行) 74 var ranges = SHEET.getRange(2, 7, 30 , 1).getValues(); 75 76 for (var i = 0; i < ranges.length; i++) { 77 78 if(ranges[i] == '通知予定'){ 79 var editRow = i + 2; 80 var editorName = SHEET.getRange(editRow,6).getValue(); 81 Logger.log(editRow); 82 Logger.log(editorName); 83 84 if(MAILADD[editorName]){ 85 notificationSendEmail(MAILADD[editorName],editorName,'タスクが追加されました',7,editRow); 86 }else{ 87 range = SHEET.getRange(editRow,7); 88 range.setValue('通知失敗'); 89 } 90 } 91 } 92} 93 94// Emailの送信 95// メールの送信は規約により1か、2を実行する必要がある 96// 1.OAuth Developer Verification Formで承認を受ける 97// https://support.google.com/code/contact/oauth_app_verification 98// 2.Allow Risky Access Permissions By Unreviewed Appsのフォーラムに参加する 99// https://groups.google.com/forum/#!forum/risky-access-by-unreviewed-apps 100function notificationSendEmail(address,name,countData,col,row){ 101 var mailBody = name + '様\n\n' + countData; 102 GmailApp.sendEmail(address,"タスクが追加されました" ,mailBody); 103 104 // ステータスの変更 105 range = SHEET.getRange(row,col); 106 range.setValue('通知済'); 107} 108 109 110// 現在の日付を返す 111function formatDate(date) { 112 var returnDate; 113 returnDate = date.getFullYear() + '/'; 114 returnDate += date.getMonth() + 1 + '/'; 115 returnDate += date.getDate(); 116 return returnDate; 117};
よろしくお願いいたします。m(_ _)m
回答2件
あなたの回答
tips
プレビュー