Todoistでタスクを完了したらスプレッドシートに追加する
概要・背景
GoogleカレンダーとTodoistを使用してタスク管理をしていますが、完了したタスクを一覧で確認したいです。
IFTTTでスプレッドシートへ追加することはできるのですが、Todoistから追加すると、日付は"May 15, 2023 at 10:30AM"のような形式になっています。
そこで、GASを使用してこの形式を"2023年5月15日 10:30"に変換します。
また、"2023年5月15日 10:30"から時間を削除し、"2023年5月15日"にします。
今回のタスク管理では、時間は重要ではないため、削除します。日付のみでフィルタリングできるのが利点です。
TodoistとIFTTTを準備する
Todoistと特定のGoogleカレンダーを、あらかじめめ同期しておきます。無料プランで大丈夫です。
Todoistの設定で、「完了した場合はカレンダーから削除する」としておきます。カレンダーがスッキリしますので。
IFTTTを作成します。無料プランで大丈夫です。
IFTTTで、Todoistを完了すると、SpreadsheetのROWの行に追加されるという指示を作ります。
Spreadsheetに追加する時、「Formatted row」を修正します。
これで、B列から値が追加されるようになります。
|||{{DueDate}}|||{{TaskContent}}||| {{TaskDescription}}||| {{LinkToTask}}
日付を変換するGASを追加
B列に値があり、かつ対応するA列に値がまだ存在しない行を対象に、値を変換します。
トリガーは、2つ用意します。
- スプレッドシートを「変更時」// 通常はIFTTTで追加時に更新される
- 日付ベースの午前0時〜1時 // 変更時のトリガーでモレがあっても対応
function convertDateTime() {
// スプレッドシートを取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
// 操作するシートを取得 シート名は実際に合わせてください
var sheet = ss.getSheetByName("シート1");
// シートの最終行を取得
var lastRow = sheet.getLastRow();
// B列に値があり、対応するA列に値がない行を探す
for (var i = 1; i <= lastRow; i++) {
var cellB = sheet.getRange("B" + i);
var cellA = sheet.getRange("A" + i);
var valueB = cellB.getValue();
var valueA = cellA.getValue();
if (valueB && !valueA) {
// "at "を削除
var dateText = valueB.replace(' at ', ' ');
// AM/PMを24時間形式に変換
var timeFormat = dateText.slice(-2);
var time = dateText.slice(-7, -2).trim();
var hours = Number(time.split(':')[0]);
var minutes = Number(time.split(':')[1]);
// 時間部分が存在しない場合
if (isNaN(hours) || isNaN(minutes)) {
// 期待する形式に日付を調整
var date = new Date(dateText);
} else {
if (timeFormat.toLowerCase() === 'pm' && hours !== 12) {
hours += 12;
} else if (timeFormat.toLowerCase() === 'am' && hours === 12) {
hours = 0;
}
var formattedTime = hours.toString().padStart(2, '0') + ':' + minutes.toString().padStart(2, '0');
var formattedDateText = dateText.slice(0, -7) + formattedTime;
// 期待する形式に日付を調整
var date = new Date(formattedDateText);
}
// 日本時間に変換
var japanTime = Utilities.formatDate(date, "Asia/Tokyo", "yyyy'年'M'月'd'日'");
// 変換した日時を別のセルに書き込む
cellA.setValue(japanTime);
}
}
}
表示について
スプレッドシートでは、行に日付が整っていれば「条件でフィルタ」で「その間にあるxxxとxxx」で表示できるので
「2023年4月1日」から「2023年4月30日」のタスク一覧を表示することも可能です。
おわりに
これで、Googleカレンダーでタスクを作成し、Todoist側で完了したタスクががスプレッドシートで一覧で表示されます。
自分の作業を定期的に可視化することで、効率化を考えたり、業務範囲を見直したりできます。
Discussion