77Lifeworkベータ版

77Lifeworkベータ版

IT関係の話(ツール開発・インフラ構築)をメインとして、その他私の趣味や雑記用のブログです。ここに書いた内容が少しでも参考になれば嬉しいです。

スプレッドシートでTodoリスト作成(GAS)

はじめに

今回はGoogleスプレッドシートとGAS(Google Apps Script)を使って簡単なTodoリストを作成してみます。
正直、「すぐにTodoリストを使いたい」という目的ならば自作ではなく、世の中に出ているアプリを使うのが手っ取り早いです。
が、今回はGASの使い方を学ぶ意味で自分で作成してみました。

Todoリストの機能

以下のようなイメージのシートを作成します。シート1が未完了のタスク、シート2が完了済みのタスクを記載するシートとなっています。
f:id:J-back:20200903120550p:plain:w600
f:id:J-back:20200903120611p:plain:w600


シート1のタスクの中で、完了したタスクの行のチェックボックスにチェックを入れると、完了したタスクの行がシート1からシート2へ転記されます。
シート2の「完了日」にはチェックを入れた日(つまり、本日日付)が入るようにしています。
詳細な動きについては以下動画をご覧ください。


GASでTodoリスト作成


コード

onEdit(e)を使って、スプレッドシート編集時に処理が走るようにしています。
さらに、編集されたセルが「1列目」かつ「チェックボックスにチェックが入っていない状態からチェックが入っている状態になった」場合のみ転記操作が実行されます。

function onEdit(e) {
  
  if ((e.range.getColumn() == 1) && (e.oldValue == 'false') && (e.value == 'TRUE')) {
    
    // 操作中のシート取得
    var operationSheet = SpreadsheetApp.getActiveSheet();
    var destinationSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート2')
    var sourceRow = e.range.getRow();
    var sourceData = operationSheet.getRange(sourceRow + ':' + sourceRow).getValues();    
    var lastRow = destinationSheet.getLastRow();
    var destinationRow = lastRow + 1;
    
    // 現在日付を書き込み
    sourceData[0][0] = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd');
 
    destinationSheet.getRange(destinationRow + ':' + destinationRow).setValues(sourceData);
    operationSheet.deleteRow(sourceRow);
    
  }
}

おわりに

今回は以上です。GASもいろいろな場面で使えそうですね。