みなさん、こんにちは!うえはら(@tifoso_str)です。
今シリーズでは「スプレッドシートとGASでTrelloのリストにカードを作成するツール」をお伝えしています。
前回は「GASでスプレッドシートのデータを元にTrelloのカードを作成する方法」をお伝えしました。
今回はGASでTrelloの情報を取得して、スプレッドシートに記入後、リスト選択出来るようにしたいと思います。
ボード情報を取得してスプレッドシートに記入する
まずは、下記のようにboardシートにTrelloのボード情報を記入する部分です。
ボード名、ボードIDの取得方法は下記をご覧下さい。
スプレッドシートにも記入できるようにした、getBoardId関数は下記となります。
/** *Trelloのボードを取得する */ function getBoardId() { var scriptProperties = PropertiesService.getScriptProperties(); const Trello_KEY = scriptProperties.getProperty('Trello_KEY'); const Trello_TOKEN = scriptProperties.getProperty('Trello_TOKEN'); var URL = "https://trello.com/1/members/me/boards?key=" + Trello_KEY + "&token=" + Trello_TOKEN + "&fields=name"; var response = UrlFetchApp.fetch(URL); var json = JSON.parse(response.getContentText()); var boards = [['ボード名','ID']]; for (var i=0 ; i<json.length ; i++) { var id =json[i].id; var name = json[i].name; boards.push([name,id]); } var sheetBoard =SpreadsheetApp.getActiveSpreadsheet().getSheetByName('board'); sheetBoard.clearContents(); sheetBoard.getRange(1, 1, boards.length, 2).setValues(boards); }
「boards」配列に繰り返し[ボード名,ボードID]を追加してします。
ボードの増減も考慮して、21行で一度シートの値を消去した後に、スプレッドシートに書き込んでいます。
ボード名をリスト選択できるようにする
それでは、「card」シートの「B1」セルを、リスト選択できるようにします。
メニューから「データ」→「データの入力規則」で設定します。
条件の範囲は「board!A2:A10」として、利用するボードがある程度増えてもいいように余裕を持って範囲設定しました。
みなさんの環境に合わせて、調整してください。
リスト情報とメンバー情報の取得
次は、C1セルのボード名を元に、ボードIDを特定してリスト情報とメンバー情報を取得します。
どちらもTrelloのKEYとToken,ボードIDがわかれば取得できるので、これらの値を仮引数で受ける関数を作成します。
リスト情報を取得する関数
まずは、リスト情報を取得するgetListId関数です。
こちらの記事も併せてご覧下さい。
/** * ボードにあるリストを取得して、スプレッドシートに記入 * @param {Trello_KEY} * @param {Trello_TOKEN} * @param {BOARD_ID} */ function getListId(Trello_KEY,Trello_TOKEN,BOARD_ID) { var URL = 'https://trello.com/1/boards/'+ BOARD_ID + '/lists?key=' + Trello_KEY + '&token=' + Trello_TOKEN; var response = UrlFetchApp.fetch(URL); var json = JSON.parse(response.getContentText()); var lists=[['リスト名','ID']] for (var i=0 ; i<json.length ; i++) { var id =json[i].id; var name = json[i].name; lists.push([name,id]); } var sheetList =SpreadsheetApp.getActiveSpreadsheet().getSheetByName('list'); sheetList.clearContents(); sheetList.getRange(1, 1, lists.length, 2).setValues(lists); }
ボード情報を取得するスクリプトとほぼ同じです。
TrelloのKEYとToken,ボードIDを仮引数で受けるのでこちらの方がスッキリしていますね。
このgetListId関数を実行すると下記のようにリスト名とリストIDを取得します。
メンバー情報を取得する関数
次にメンバー情報を取得するgetMemberId関数です。
こちらの記事も合わせてご覧下さい。
/** * ボードに登録のメンバーを取得して、スプレッドシートに記入 * @param {Trello_KEY} * @param {Trello_TOKEN} * @param {BOARD_ID} */ function getMemberId(Trello_KEY,Trello_TOKEN,BOARD_ID) { var URL = 'https://api.trello.com/1/boards/' + BOARD_ID + '/members?key=' + Trello_KEY + '&token=' + Trello_TOKEN; var respons = UrlFetchApp.fetch(URL); var json = JSON.parse(respons.getContentText()); var members=[['メンバー名','ID']] for (var i=0;i<json.length;i++) { var fullname = json[i].fullName; var id = json[i].id; members.push([fullname,id]); } var sheetMember = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('member'); sheetMember.clearContents() sheetMember.getRange(1, 1, members.length, 2).setValues(members); }
はい、先程のリスト取得とほぼ同じです。
このgetMemberIdを実行すると下記のようにメンバー名とメンバーIDを取得します。
(この文言も同じですね(^^ゞ)
ボード名からボードIDを取得する関数
次がメインのgetMemberAndList関数となります。
ボード名からボードIDを取得して、上の二つの関数を呼び出します。
スクリプトは下記のようになります。
/** * cardシートのボード名から、boardシートの対応するidを取得する。 * その後、メンバーとリストに関する処理を実行する関数を呼び出す。 */ function getMemberAndList() { var scriptProperties = PropertiesService.getScriptProperties(); const Trello_KEY = scriptProperties.getProperty('Trello_KEY'); const Trello_TOKEN = scriptProperties.getProperty('Trello_TOKEN'); var sheetBoard =SpreadsheetApp.getActiveSpreadsheet().getSheetByName('board'); var lastRow = sheetBoard.getLastRow(); var boards = sheetBoard.getRange(2, 1, lastRow-1, 2).getValues(); var sheetCard = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('card'); var boardName = sheetCard.getRange(1,2).getValue(); Logger.log(boards.length) for (var i=0;i<boards.length;i++){ if (boards[i][0] == boardName) { var boardId = boards[i][1]; break; } } getMemberID(Trello_KEY,Trello_TOKEN,boardId) getListId(Trello_KEY,Trello_TOKEN,boardId) }
スプレッドシートのデータを取り込んだ「boards」配列は下記のような2次元配列になっています。
[[ボード名,ボードID],[ボード名,ボードID],[ボード名,ボードID],・・・]
ボード名を検索して、B2セルのボード名と一致した場合に、ボードIDを取得します。
一致した後はその後の検索は必要ないので、break文でfor文のループを抜けます。
リスト名とメンバー名をリスト選択できるようにする
ボード名をリスト選択したときと同じように、「B2」セルに入力規則を設定します。
B5~B24セルには、メンバー名を取得するように入力規則を設定します。
まとめ
今回は、GASでTrelloの情報を取得して、スプレッドシートに記入後、リスト選択出来る様にしました。
次回、ボード名からボードIDを取得したときと同じように、リスト名、メンバー名からそれぞれのIDを取得する方法を解説しています。
シリーズも完結しますので、是非ご覧下さい。
今回も最後までありがとうございました。
連載目次:スプレッドシートとGASでTrelloにカードを作成するツール
毎週、毎月Trelloに同じカードを作成している方必見です。 スプレッドシートとGoogle Apps Scriptを使用して、Trelloにカードを作成するツールを作成します。