グーグルサイトで作成したリストをスプレッドシートに自動同期させて管理する方法

To Doを管理する時にグーグルサイトのリストを使って管理しています。

このリストは非常に便利なのですが、金額を合計できなかったり、特定の項目の数の合計をカウントしたりが出来ません。
そこで、グーグルのスプレッドシートにリストのデータをインポートさせて、リストの作成はグーグルサイト、編集したり、自分の好みに変更したりはスプレッドシートで管理する方法を試行錯誤してようやく完成しました。

ざっくりと手順は下記二点です。

  • まずはスプレッドシート上のエディタにGoogle Apps Scriptで下記スクリプトを記載
  • その後、Tasks APIを有効にしてタスクを取り込めるようにします。

備忘記録として残しておきます。

まずはグーグルサイトでリストを作成する

これはグーグル先生に聞けば腐るほど情報が出てくるので割愛しますが、テストで作成したサイトが下記になります。
https://sites.google.com/site/todolistofclt/list

次にスプレッドシートを作成してエディタにスクリプトを記載する。
これもやり方は割愛します。

スクリプトは下記の通り

——————————————————————————-

function onOpen(){
var mySpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var myMenuEntries = [];
myMenuEntries.push({name: “Update”, functionName: “getPageItem”});
mySpreadsheet.addMenu(“Action”, myMenuEntries);
}

function getPageItem(){
var sheet = SpreadsheetApp.getActiveSheet();
var site = SitesApp.getSiteByUrl(“https://sites.google.com/site/todolistofclt/list”);
var page = site.getChildByName(“list”)
var cols = page.getColumns();
var items = page.getListItems();
var last = sheet.getLastRow();

try{
var sheet = SpreadsheetApp.getActiveSheet();
sheet.clearContents();
}catch(e){
Browser.msgBox(e);
}

for(var i = 0;i < cols.length;i++){ Logger.log(cols[i].getName()); sheet.getRange(1, i + 1).setValue(cols[i].getName()); for (var j = 0;j < items.length;j++){ Logger.log(items[j].getValueByIndex(i)); sheet.getRange(j + 2, i + 1).setValue(items[j].getValueByIndex(i)); } } }
——————————————————————————-

作成したスプレッドシートがこれ
https://docs.google.com/spreadsheets/d/1DeW-PbFet-upR2KxonKKLRmdDh9S1-nsR9TZgcwHi2Y/edit#gid=0

このままスクリプトを実行してもリストで作成したItemを取り込んでくれません。
そこでTasks APIを有効にして実行します。

….と思ってたのですが、特に有効にしなくてもItemの取り込みが実行されました。

まぁ、もし出来ない、もっと詳細を知りたい方はお問い合わせください。