みなさん、こんにちは!うえはら(@tifoso_str)です。
今シリーズでは「スプレッドシートとGASでTrelloのリストにカードを作成するツール」をお伝えしています。
前回の記事はこちらです。
GASでTrelloのAPIにアクセスして、まず、ボード情報を取得してスプレッドシートに書き出しました。
次にリスト情報とメンバー情報を取得しますが、先に取得したボード情報のボードIDを利用します。
普通であれば、ボードIDをそのまま指定しますが、今回はツールとして利用しやすいようにボード名からボードIDを検索しました。
また、ボード名の選択も入力規則を利用して、ドロップダウンリストとしています。
今回はいままで紹介したことをまとめて、「スプレッドシートとGASでTrelloのリストにカードを作成するツール」を作成します。
リスト名からリストIDを特定する
どのリストにカードを作成するか、「B2」セルでリスト名を選択します。
このリスト名を元にリストIDを特定します。
リストIDを特定する部分のスクリプトは下記となります。
//リストID取得 var sheetCard = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('card'); var listName = sheetCard.getRange(2,2).getValue(); var sheetList =SpreadsheetApp.getActiveSpreadsheet().getSheetByName('list'); var lists = sheetList.getDataRange().getValues(); for (var i=0 ; i<lists.length ;i++) { if (lists[i][0] === listName) { var LIST_ID = lists[i][1]; break; } }
やってることは、前回、ボードIDを特定したときと同じです。
3行目でB2セルのリスト名取得します。
listシートはこのようになっているので、
5行目でlistシートから取り込んだ「lists」配列は、下記のような2次元配列となります。
[[カード新規作成,000000],[カード移動先,111111],[カードアーカイブ待ち,222222],・・・]
各要素の先頭がB2セルのリスト名と同じか繰り返し判定して、同じだった場合にそのリストIDを変数に格納します。
メンバー名からメンバーIDを特定する
次はメンバーIDを特定する方法です。
カードの作成は一枚ごと処理を行うので、作成するカードが複数の場合、メンバーIDは作成するカードの枚数ごとに取得する必要があります。
リストIDを検索する方法と同じようにすると、for文の中でfor文を使用することになり、リーダブルじゃないですね!
それではどうするかというと、オブジェクト(連想配列)を利用します。
メンバー名をキー、メンバーIDを値とするオブジェクトは下記のようになります。
{うえはら:ID001、おおしろ:ID002、ひが:ID003、・・・}
オブジェクトからキーに対応する値を取り出すときは下記となります。
一度、オブジェクトに格納してしまえば、後は簡単にメンバーIDを検索できます。
メンバー名とメンバーIDをオブジェクトに格納するスクリプトは下記のようになります。
//メンバーID取得の為の準備 var sheetMember = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('member'); var members= sheetMember.getDataRange().getValues(); var objMembers = {}; for (var i=0 ; i<members.length ;i++) { objMembers[members[i][0]] = members[i][1] }
あとはobjMembers[“うえはら”]等とすれば、メンバーIDを呼び出すことができます。
Trelloのリストにカードを作成する
それでは、これまでの全体をまとめたスクリプトです。
function createCard() { var scriptProperties = PropertiesService.getScriptProperties(); const Trello_KEY = scriptProperties.getProperty('Trello_KEY'); const Trello_TOKEN = scriptProperties.getProperty('Trello_TOKEN'); const URL = 'https://api.trello.com/1/cards/'; var sheetCard = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('card'); var lastRow = sheetCard.getLastRow(); var cardsInfo = sheetCard.getRange(5, 1, lastRow - 4, 3).getValues(); //リストID取得 var listName = sheetCard.getRange(2,2).getValue(); var sheetList =SpreadsheetApp.getActiveSpreadsheet().getSheetByName('list'); var lists = sheetList.getDataRange().getValues(); for (var i=0 ; i<lists.length ;i++) { if (lists[i][0] === listName) { var LIST_ID = lists[i][1]; } } //メンバーID取得の為の準備 var sheetMember = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('member'); var members= sheetMember.getDataRange().getValues(); var objMembers = {}; for (var i=0 ; i<members.length ;i++) { objMembers[members[i][0]] = members[i][1] } for (var i=0 ; i<cardsInfo.length ;i++){ var MEMBER_ID = objMembers[cardsInfo[i][1]]; var payload = {'key':Trello_KEY, 'token':Trello_TOKEN, 'idList' : LIST_ID, 'name' : cardsInfo[i][0], 'idMembers': MEMBER_ID, 'due': cardsInfo[i][2]}; var option = {'method':'POST', 'payload':payload}; UrlFetchApp.fetch(URL,option); } }
31行がメンバーIDを取り出しているところです。
37行で直接指定してもかまいませんが、今回はわかりやすいように、一度、MEMBER_IDに取り出しています。
カードを作成する部分は、シリーズの1回目で開設していますので、ご覧下さい。
はい、これで、スクリプトは完成です!
しかしこのままだと、関数を実行するのに、いちいちスクリプトエディタを開く必要があります。
面倒ですよね。
そこで、簡単に関数を実行できる方法をお伝えしますので、もう少々お付き合い下さい。
スプレッドシートのメニューに項目追加
スプレッドシートのメニューの部分ですが、実は項目を追加できます!
この部分です。
ここに、上記の関数を実行する項目を追加すれば、スクリプトエディタを開かなくても実行できます。
項目を追加するスクリプトは下記となります。
function onOpen(e) { var ui = SpreadsheetApp.getUi(); ui.createMenu('Trello') .addItem('カード作成', 'createCard') .addSeparator() .addItem('ボード取得', 'getBoardInfo') .addItem('リスト・メンバー取得', 'getMemberAndList') .addToUi() }
詳細については下記の記事をご覧下さい!
このスクリプトを追加して、保存したら、スプレッドシートを開きなおしてください。
このように追加されていると思います。
これで、スクリプトエディタを開かなくても、関数を実行できます!
ようやくツール完成です!
まとめ
今回はシリーズの最後として、「スプレッドシートとGASでTrelloのリストにカードを作成するツール」についてまとめました。
メニューに関数を実行する項目を追加すれば、スクリプトエディタを開かなくても実行できて便利です。
今回は手動で実行するようにしていますが、毎週同じカードを作成するのであれば、トリガー設定して完全自動化もできます。
皆さんの環境に合わせて、カスタマイズして下さい。
それでは、最後までありがとうございました。
連載目次:スプレッドシートとGASでTrelloにカードを作成するツール
毎週、毎月Trelloに同じカードを作成している方必見です。 スプレッドシートとGoogle Apps Scriptを使用して、Trelloにカードを作成するツールを作成します。