みなさん、こんにちは!うえはら(@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にカードを作成するツールを作成します。







