GASでGoogle Tasks(ToDo)の完了済みタスクもすべて取得する方法
- [記事公開]2022.05.10
- GAS
- GAS, Google Tasks
GmailにあるToDoを重宝に使っています。PCでもスマホでも使えるので便利です。デフォルトで存在する「MyTask」に何もかも記録しては完了、記録しては完了を繰り返してきましたが、ある日の完了件数や、あのタスクはいつ完了したんだっけ?ということを調べたくなりました。
参考にしたサイト
今回ToDoのタスクを取得するにあたって参考にしたのが、上記のサイトです。
こちらのサイトにほとんどコードは載っていますし、どうやってGoogle Taskにアクセスするかも説明してありますので、私のブログでは省略します(他力本願)。
唯一、物足りなかったのがこちらです↓
デフォルトで完了済みタスクは取得しないっぽい。完了済みはどうやって取るんだろう。
この方が書いているとおり、コードを実行しても、現在のタスクしか取得できません。
でも私は完了した分も見たいのです。
完了済みのタスクも抽出する方法
完了済みのタスクを抽出する方法は、こちらのサイトを参考にしました。
【GAS】Google Apps Script 活用事例 Google Task APIを使ってみよう。
このサイトにあったコードを実行してみたら、generateArray_()のところで未定義でエラーとなったため、私の環境では実行不可でした。でも、コードの内容はとても参考になったので、さきほどのベイマックスさんのコードをカスタマイズする形で実装しました。
ベイマックスさんの56行目
const tasks = Tasks.Tasks.list(taskList.id).getItems(); // リストからタスクを取得
これを
const tasks = Tasks.Tasks.list(taskList.id,options).getItems(); // リストからタスクを取得
↑こんな風に、optionsを引数に追加しました。
optionsの中身は↓です。
//タスク全部取得オプション
const options = {
showCompleted: true,
showDeleted: true,
showHidden: true,
};
実行した結果はこんな風になりました。
完成コード
// シート取得
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const sheetToDo = spreadSheet.getSheetByName("ToDo");
//タスク全部取得オプション
const options = {
showCompleted: true,
showDeleted: true,
showHidden: true,
};
/**
* Google Tasksのリストからタスクを取得してスプレッドシートにセット
*/
function getToDo(){
// シート2行目以下をクリア
const lastRow = sheetToDo.getLastRow();
const lastColumn = sheetToDo.getLastColumn();
sheetToDo.getRange(2, 1, lastRow, lastColumn).clearContent();
// タスク取得
const table = getLists_();
if (table.length) {
sheetToDo.getRange(2, 1, table.length, table[0].length).setValues(table); // シートに出力
spreadSheet.toast(`${table.length}件のタスクを取得しました。`, 'Google Tasks 取得完了', 5); // 完了メッセージ表示
} else {
spreadSheet.toast('取得結果が0件です。', 'Google Tasks 取得完了', 5); // エラーメッセージ表示
}
}
/**
* Google Tasksからリストを取得
* @return {Array} 取得結果の二次元配列
*/
function getLists_(){
const lists = Tasks.Tasklists.list().getItems(); // リストを全て取得
let table = new Array(); // 配列初期化
for (let i = 0; i < lists.length; i++) {
table = table.concat(getTasks_(lists[i])); // テーブルにデータを追加
}
return table
}
/**
* Google Tasksのリストからタスクを取得
* @param {TaskList} taskList 取得対象リストのオブジェクト
* @return {Array} 取得結果の二次元配列
*/
function getTasks_(taskList) {
const tasks = Tasks.Tasks.list(taskList.id,options).getItems(); // リストからタスクを取得
const table = new Array(); // 配列初期化
if (tasks) {
for (let i = 0; i < tasks.length; i++) {
let row = new Array();
row.push(taskList.title); // リスト名
row.push(tasks[i].parent); // 親タスク
row.push(tasks[i].title); // 件名
row.push(tasks[i].status); // ステータス
let due = tasks[i].due ? new Date(tasks[i].due) : "";
row.push(due); // 期限
let updated = tasks[i].updated ? new Date(tasks[i].updated) : "";
row.push(updated); // 更新日時
row.push(tasks[i].notes); // メモ
Logger.log(row);
table.push(row); // 配列に追加
}
} else {
Logger.log(`リスト「${taskList.title}」にタスクはありません`);
}
return table
}
/**
* メニュー追加
*/
function onOpen() {
const ui = SpreadsheetApp.getUi(); // UIクラス取得
const menu = ui.createMenu("GAS"); // メニュー名セット
menu.addItem("Google Tasks取得", "getToDo"); // 関数セット
menu.addToUi(); // スプレッドシートに反映
}
-
前の記事
休日をまたぐ深夜労働の勤怠管理【休日と労働日の区別】 2022.05.09
-
次の記事
PC起動時にバッチファイルで自動化【作業効率化で時間短縮】 2022.05.11