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

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

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

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

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

Q&A

解決済

2回答

691閲覧

指定した日に自動でスプレッドシートに入力した内容を チャットワークのタスクへ追加するGAS

NECOICE

総合スコア2

Google スプレッドシート

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

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

0グッド

0クリップ

投稿2023/08/25 08:03

実現したいこと

指定した日に自動でスプレッドシートに入力した内容を
チャットワークのタスクへ追加するGASを教えていただきたいです

イメージ説明

この画像のようにタスク投稿日にタスク期限の付いたタスクを追加したいです

前提

調べて出てきたのはタスクの期日指定なしの自動追加や
毎日 毎月、毎週などの設定はありましたが
決まった日にタスクを追加する内容が見つけられませんでした

発生している問題・エラーメッセージ

該当のソースコード

function addRegularTasks() { var mySheet=SpreadsheetApp.getActiveSheet(); var maxRow=mySheet.getDataRange().getLastRow(); var myVars=mySheet.getDataRange().getValues(); var token = 'APIトークン'; //チャットワークAPIトークン var date = new Date(); var limit = date.getTime()/1000; limit = limit.toFixed(); for(var i=2;i<=maxRow;i++){ if(myVars[i-1][4-1]="毎日"){ var body = myVars[i-1][1-1];  //タスク内容 var room_id = myVars[i-1][2-1];  //ルームID var to_ids = myVars[i-1][3-1];  //アカウントID addTask(token,room_id,body,limit,to_ids); } } }

試したこと

上のソースコードを参考に日付を設定しようとしましたが私には難しかったです

補足情報(FW/ツールのバージョンなど)

どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

既に回答がありますので、
こちらは、このような例もあるという参考にしてみてください。

シートから取得した値の配列(myVars)をフィルター処理で
タスク投稿日が今日と一致する要素のみの配列に再生成して、
各データからタスク投稿しています。

JavaScript

1function addRegularTasks() { 2 //初期設定 3 var mySheet=SpreadsheetApp.getActiveSheet(); 4 var myVars=mySheet.getDataRange().getValues(); 5 var token = TOKEN; //チャットワークAPIトークン 6 //今日の日付(時刻を除く)の経過ミリ秒数の値 7 var todayTime = new Date().setHours(0, 0, 0, 0); 8 //タスク投稿日の経過ミリ秒数が今日と一致する行を抽出 9 myVars = myVars.filter(v => new Date(v[1-1]).getTime() == todayTime); 10 //抽出後の各行の値からタスク通知(該当なしなら何もしない) 11 myVars.forEach(v => { 12 var body = v[4-1]; //タスク内容 13 var room_id = v[2-1]; //ルームID 14 var to_ids = v[3-1]; //アカウントID 15 var date = new Date(v[5-1]); //タスク期限 16 var limit = date.getTime()/1000; 17 limit = limit.toFixed(); 18 addTask(token,room_id,body,limit,to_ids); 19 }); 20}

投稿2023/08/26 06:54

YellowGreen

総合スコア731

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

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

NECOICE

2023/08/28 02:47

ご回答ありがとうございます! こちらも自分の物に変更する際は tokenだけを修正すればよろしいでしょうか? 初心者で初歩で着な質問で申し訳ございません よろしくお願いいたします。
YellowGreen

2023/08/28 02:54 編集

スクリプトそのものは、トークンを引用符を付けて書き換えていただければと思います。 スプレッドシートは、画像のようにB列がルームID(0でないこと)、C列がユーザーID(0でないこと)、 D列にタスク、E列に期限の日付が入力されていることが前提です。 なお、送信できていないということであれば、 質問を編集して、addTaskのコードをご提示いただければ、 アドバイスできることがあるかもしれません。
NECOICE

2023/08/29 04:15

私の確認不足でコードが抜けておりました😢 無事に解決することができました ご回答いただきありがとうございました!!
guest

0

ベストアンサー

自動でタスク追加というのが、どういうことをご希望されているのかわからなかったので、
スクリプトを実行したときに実行した日の日付と同じ日付がA列にあれば、
その行のデータからタスクを投稿するスクリプトの例です。
なお、質問でご提示いただいたスクリプトの修正ではありませんが、
addTask(...)のところは、引数の順序を合わせてあります。

例えば、トリガーで午前9時から午前10時の間などと時間帯を指定して
1日1回実行するように設定しておけば、その時間帯に自動実行されると思います。

JavaScript

1function noticeTask() { 2 const token = 'APIトークン'; 3 // const ss = SpreadsheetApp.openById(SS_ID); 4 // const sheet = ss.getSheetByName(SHEET_NAME); 5 const sheet = SpreadsheetApp.getActiveSheet(); 6 // const values = sheet.getDataRange().getValues();//値で処理 7 const values = sheet.getDataRange().getDisplayValues();//文字列で処理 8 values.splice(0, 1);//見出し行を除外 9 const today = new Date();//今日の日付 10 // today.setHours(0, 0, 0, 0);//時刻をクリア(値で処理) 11 const todayStr = Utilities.formatDate(today, 'JST', 'yyyy/MM/dd');//日付を文字列に(文字列で処理) 12 for (let i = 0; i < values.length; i++) { 13 // const date = new Date(values[i][1 - 1]);//値で処理 14 const dateStr = values[i][1 - 1];//文字列で処理 15 //タスク処理日が今日であるとき 16 // if (today.getTime() == date.getTime()) {//値で処理 17 if (todayStr == dateStr) {//文字列で処理 18 //ルームID 19 const roomId = values[i][2 - 1];//B列 20 //タスクの担当者 21 const userId = values[i][3 - 1];//C列 22 //タスクの本文を作成 23 let message = '[info][title]'; 24 // message += values[i][?? - 1];//??列(タイトル) 25 message += 'タイトルのテスト';//タスクのタイトル 26 message += '[/title]'; 27 message += values[i][4 - 1];//D列(タスク本文) 28 message += '[/info]'; 29 message += '※注釈のテスト';//タスクの注釈 30 //タスク期限 31 const dateLimit = new Date(values[i][5 - 1]);//E列 32 let limit = dateLimit.getTime() / 1000; 33 limit = limit.toFixed(); 34 //タスクの追加 35 addTask(token, roomId, message, limit, userId); 36 } 37 } 38}

(追記)
タスク内容の追記事項をタスク内容に続けて挿入する場合の修正例です。
★の行を追加または変更します。

JavaScript

1 let message = '[info][title]'; 2 // message += values[i][?? - 1];//??列(タイトル) 3 message += 'タイトルのテスト';//タスクのタイトル 4 message += '[/title]'; 5 message += values[i][4 - 1];//D列(タスク本文) 6 message += '\n';//改行を一つ挿入(★行追加) 7 message += values[i][5 - 1];//E列(タスク追記)(★行追加) 8 message += '[/info]'; 9 message += '※注釈のテスト';//タスクの注釈 10 //タスク期限 11 const dateLimit = new Date(values[i][6 - 1]);//F列(★変更[5 - 1] → [6 - 1])

投稿2023/08/26 05:32

編集2023/08/30 06:36
codemaker

総合スコア39

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

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

codemaker

2023/08/26 05:38

タスク本文やタイトル、注釈の加工がaddTask(...)の方にあるなら23−29行を適宜修正してみてください。
NECOICE

2023/08/28 02:01

ご回答ありがとうございます! やりたかったものは「車検満了日の一か月前にタスクを追加する」内容で 台数が多いのであらかじめスプレットシートに車検の車と期限の1ヵ月前を入力し設定して その日になったら自動で担当者にタスクが追加されるようにしたかったのです 早速GASを入力してみたのですが エラーは出ず実行完了はするものの チャットワークに飛んでいかないです トークンは編集したのですが他に編集が必要な個所はございますか? GASに関して全くの初心者なのでご教授いただけますと幸いです よろしくお願いいたします。
codemaker

2023/08/28 03:48

その日になったら自動で担当者にタスクが追加されるようにしたかった → トリガー設定で時間帯を指定して実行すれば、希望の動作になると思います。 エラーは出ず実行完了はするものの チャットワークに飛んでいかないです → addTask(token, roomId, message, limit, userId);の「前の行」に console.log(`token:${token} roomId:${roomId} userId: ${userId}`); const limitStr = Utilities.formatDate(new Date(limit * 1000), 'JST', 'yyyy/MM/dd'); console.log(`limit: ${limitStr}`); console.log(`message: ${message}`) の4行をここからコピペして挿入するとaddTaskに渡っている情報をログで確認できます。 情報が正しく渡っているのであれば、addTaskの方に原因があると思われますので、 addTaskの内容を掲載してみてください。
NECOICE

2023/08/28 08:09

17:06:01 お知らせ 実行開始 17:06:01 情報 token:★ roomId:★ userId: ★ 17:06:01 情報 limit: 2023/09/01 17:06:01 情報 message: [info][title]タイトルのテスト[/title]テストテスト[/info]※注釈のテスト 17:06:02 エラー ReferenceError: addTask is not defined noticeTask @ コード.gs:39 このように出てしまいました ★で情報は隠してあります💦 すみません本当に初心者なので addTaskの内容はこちらでよろしいでしょうか?
codemaker

2023/08/28 08:14

エラーは出ず実行完了はするものの チャットワークに飛んでいかないです → ということでしたが、 今回はエラーが発生するようになったとすれば、 4行を追加した際に function addTask() { で始まる行をなにか変えてしまっていませんでしょうか。
NECOICE

2023/08/28 08:29

function noticeTask() { const token = '★'; // const ss = SpreadsheetApp.openById(SS_ID); // const sheet = ss.getSheetByName(SHEET_NAME); const sheet = SpreadsheetApp.getActiveSheet(); // const values = sheet.getDataRange().getValues();//値で処理 const values = sheet.getDataRange().getDisplayValues();//文字列で処理 values.splice(0, 1);//見出し行を除外 const today = new Date();//今日の日付 // today.setHours(0, 0, 0, 0);//時刻をクリア(値で処理) const todayStr = Utilities.formatDate(today, 'JST', 'yyyy/MM/dd');//日付を文字列に(文字列で処理) for (let i = 0; i < values.length; i++) { // const date = new Date(values[i][1 - 1]);//値で処理 const dateStr = values[i][1 - 1];//文字列で処理 //タスク処理日が今日であるとき // if (today.getTime() == date.getTime()) {//値で処理 if (todayStr == dateStr) {//文字列で処理 //ルームID const roomId = values[i][2 - 1];//B列 //タスクの担当者 const userId = values[i][3 - 1];//C列 //タスクの本文を作成 let message = '[info][title]'; // message += values[i][?? - 1];//??列(タイトル) message += 'タイトルのテスト';//タスクのタイトル message += '[/title]'; message += values[i][4 - 1];//D列(タスク本文) message += '[/info]'; message += '※注釈のテスト';//タスクの注釈 //タスク期限 const dateLimit = new Date(values[i][5 - 1]);//E列 let limit = dateLimit.getTime() / 1000; limit = limit.toFixed(); //タスクの追加 console.log(`token:${token} roomId:${roomId} userId: ${userId}`); const limitStr = Utilities.formatDate(new Date(limit * 1000), 'JST', 'yyyy/MM/dd'); console.log(`limit: ${limitStr}`); console.log(`message: ${message}`) addTask(token, roomId, message, limit, userId); } } } 今このような内容になっております 本当に無知で申し訳ございません
codemaker

2023/08/28 08:37

元々のご質問の function addRegularTasks() { というスクリプトの参考にしたサイトに function addTask() { のスクリプトと使い方がありませんでしたか?
NECOICE

2023/08/29 04:13

ご返信ありがとうございます!!! 記事にありました function addTask(token,room_id,body,limit,to_ids){ var params = { headers : {"X-ChatWorkToken" : token}, //APIトークン method : "post", payload : { body : body, //タスク内容 limit : limit, //タスク期限 to_ids : to_ids //アカウントID } }; var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks"; UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト } こちらの内容も必要だったのですね💦 追加しましたら無事に作成することができました ご教示いただき本当にありがとうございました!!!
NECOICE

2023/08/30 04:52

何度もすみません 例えば内容のセルを増やしたい場合には どこを編集すればよろしいでしょうか? ご教授いただけますと幸いです
codemaker

2023/08/30 04:56

内容のセルとは? 具体的に何を増やして、どの列に入力しておくのでしょう? 現在は A列タスク投稿日 B列ルームID C列ユーザーID D列タスク内容 E列タスク期限 となっていますが、
NECOICE

2023/08/30 05:16

ご返信ありがとうございます! A列タスク投稿日 B列ルームID C列ユーザーID D列タスク内容 ★E列タスク内容の追記次項 F列タスク期限 という形にしたいです
NECOICE

2023/08/30 06:50

ご丁寧に本当にありがとうございました!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問