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

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

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

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

Google Apps Script

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

1回答

996閲覧

Googleスプレッドシートで課題管理表を作成し、メール通知などの処理を自動化

ariake999

総合スコア4

Google スプレッドシート

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

Google Apps Script

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

1クリップ

投稿2020/01/24 07:02

前提・実現したいこと

会社からスプレッドシートでタスク管理表を作り、特定の行(担当者名)が変更されると、担当者のメールアドレスに通知が届くように作ってほしいと言われていてます。

下記のURLの記事をそのまま作成したのですが、メール通知がきません。
https://www.mdn.co.jp/di/contents/4047/54812/
メールアドレスはちゃんと自分のものに設定してみました。

こちらJavaScriptなんてわからない初心者以下の存在なのですが、どこをどう変えたらいいかご教授頂けると幸いです。

該当のソースコード

// メールアドレスの設定
var MAILADD = {
'阿部':'abe@example.com',
'佐藤':'sato@example.com'
};

function checkNotification(){

 // 複数行のセルを取得 (列, 行, 何列, 何行)
var ranges = SHEET.getRange(2, 7, 30 , 1).getValues();

 for (var i = 0; i < ranges.length; i++) {

  if(ranges[i] == '通知予定'){
var editRow = i + 2;
var editorName = SHEET.getRange(editRow,6).getValue();
Logger.log(editRow);
Logger.log(editorName);

if(MAILADD[editorName]){
notificationSendEmail(MAILADD[editorName],editorName,'タスクが追加されました',7,editRow);
}else{
range = SHEET.getRange(editRow,7);
range.setValue('通知失敗');
}
}
}
}

function notificationSendEmail(address,name,countData,col,row){
var mailBody = name + '様\n\n' + countData;
GmailApp.sendEmail(address,"タスクが追加されました" ,mailBody);

 // ステータスの変更
range = SHEET.getRange(row,col);
range.setValue('通知済');
}

// 現在の日付を返す
function formatDate(date) {
var returnDate;
returnDate = date.getFullYear() + '/';
returnDate += date.getMonth() + 1 + '/';
returnDate += date.getDate();
return returnDate;
};

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

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

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

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

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

papinianus

2020/01/24 17:25

スプレッドシートで課題管理というと今風に見えますが、ただの神エクセルなんで、課題管理ツールを使いましょう。
guest

回答1

0

javascript

1/* 仕様とされるもの @ 参考サイト。一部補正 2・「依頼者」C列を入力すると、自動で「依頼日」D列が挿入される 3・「担当者」F列を入力すると、自動で担当者にメール通知される(と仕様には書いてあるが嘘で、担当者を入れると、G列が、通知予定になって、通知予定のやつを定期的に送信する) 4→ 嘘にせず、仕様のとおりその場で送信すればいい 5・「対応内容」H列を入力すると、自動で「対応日」I列が挿入される 6・ステータスB列を「完了」にすると、完了にしたレコード(1行全て)の背景色が自動でグレーに変わる 7 */ 8function getOnEditTasks(col) { 9 const tasks = { 10 2 : [gen_setRowBackground("grey")], 11 3 : [gen_setValue(0,1, new Date())], 12 6 : [gen_sendMail(0,1) /*,gen_setValue(0,1, "通知予定")*/], 13 8 : [gen_setValue(0,1, new Date())] 14 }; 15 const ret = tasks[col]; 16 return ret !== undefined ? ret : [] ; 17} 18function getMailAddress(name) { 19 const namelist = { 20 "a" : "root@example.com" 21 } 22 const addr = namelist[name]; 23 return addr === undefined ? "" : addr ; 24} 25function onEditTrigger(e) { 26 const targetSheet = "シート1"; 27 if(e.range.getSheet().getName() !== targetSheet) return; 28 const c = e.range.getColumn(); 29 getOnEditTasks(c).forEach(function (f) { 30 f(e); 31 }); 32} 33function gen_setValue(offsetR, offsetC, value) { 34 return function(e) { 35 e.range.offset(offsetR, offsetC).setValue(value); 36 } 37} 38function gen_setRowBackground(colour) { 39 return function(e) { 40 const fin = "完了"; 41 if(e.value !== fin) return; 42 const sheet = e.range.getSheet(); 43 const c = sheet.getMaxColumns(); 44 sheet.getRange(e.range.getRow(), 1, 1, c).setBackground(colour); 45 } 46} 47function gen_sendMail(offsetR, offsetC) { 48 return function(e) { 49 const errNotify = "通知失敗"; 50 const doneNotify = "通知済"; 51 const name = e.value; 52 if(name === undefined) { e.range.offset(offsetR, offsetC).setValue(errNotify); return; } 53 const addr = getMailAddress(name); 54 if(addr === "") { e.range.offset(offsetR, offsetC).setValue(errNotify); return; } 55 notificationSendEmail(addr, name); 56 e.range.offset(offsetR, offsetC).setValue(doneNotify); 57 } 58} 59function notificationSendEmail(to,name){ 60 const taskAdded = "タスクが追加されました"; 61 GmailApp.sendEmail(to,taskAdded ,name + '様\n\n' + taskAdded); 62} 63/* 64function timerTrigger() { 65 const targetSheet = "シート1"; 66 const colF = 6; 67 const colG = 7; 68 const willNotify = "通知予定"; 69 const errNotify = "通知失敗"; 70 const doneNotify = "通知済"; 71 const range = SpreadsheetApp.getActive().getSheetByName(targetSheet).getDataRange(); 72 const dat = rang.getValues().map(function(e){ 73 if(e[colG - 1] !== willNotify) return e; 74 const addr = getMailAddress(e[colF - 1]); 75 if(addr === "") { e[colG - 1] = errNotify; return e; } 76 notificationSendEmail(addr, e[colF - 1]); 77 e[colG - 1] = doneNotify; 78 return e; 79 }); 80 range.setValues(dat); 81} 82*/

onEditTrigger を編集時トリガーとして登録します。

投稿2020/01/24 17:33

編集2020/01/25 13:14
papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問