スプレッドシートとGASでTrelloのリストにカードを作成するツール

カード作成
みなさん、こんにちは!うえはら(@tifoso_str)です。

今シリーズでは「スプレッドシートとGASでTrelloのリストにカードを作成するツール」をお伝えしています。

前回の記事はこちらです。

GASで取得したTrelloのボード情報をスプレッドシートでリスト選択にする
シリーズでスプレッドシートとGoogle Apps Scriptを使用して、Trelloにカードを作成するツールをお伝えしています。 今回は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回目で開設していますので、ご覧下さい。

GASでスプレッドシートのデータを元にTrelloのカードを作成する
毎週、毎月Trelloに同じカードを作成している方必見です。 スプレッドシートとGoogle Apps Scriptを使用して、Trelloにカードを作成するツールを作成します。 今回は指定のリストにカードを作成します。

はい、これで、スクリプトは完成です!

しかしこのままだと、関数を実行するのに、いちいちスクリプトエディタを開く必要があります。

面倒ですよね。

そこで、簡単に関数を実行できる方法をお伝えしますので、もう少々お付き合い下さい。

スプレッドシートのメニューに項目追加

スプレッドシートのメニューの部分ですが、実は項目を追加できます!

この部分です。

スプレッドシートのメニュー

ここに、上記の関数を実行する項目を追加すれば、スクリプトエディタを開かなくても実行できます。

項目を追加するスクリプトは下記となります。

function onOpen(e) {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Trello')
  .addItem('カード作成', 'createCard')
  .addSeparator()
  .addItem('ボード取得', 'getBoardInfo')
  .addItem('リスト・メンバー取得', 'getMemberAndList')
  .addToUi()
}

詳細については下記の記事をご覧下さい!

Google Apps Scriptでスプレッドシートに独自のメニューを追加する方法
Google Apps ScriptでonOpenイベントハンドラとSpreadsheetオブジェクトのaddMenuメソッドを使って、スプレッドシートに独自のメニューを追加する方法をお伝えします。

このスクリプトを追加して、保存したら、スプレッドシートを開きなおしてください

このように追加されていると思います。

メニュー追加

これで、スクリプトエディタを開かなくても、関数を実行できます!

ようやくツール完成です!

まとめ

今回はシリーズの最後として、「スプレッドシートとGASでTrelloのリストにカードを作成するツール」についてまとめました。

メニューに関数を実行する項目を追加すれば、スクリプトエディタを開かなくても実行できて便利です。

今回は手動で実行するようにしていますが、毎週同じカードを作成するのであれば、トリガー設定して完全自動化もできます。

皆さんの環境に合わせて、カスタマイズして下さい。

それでは、最後までありがとうございました。

連載目次:スプレッドシートとGASでTrelloにカードを作成するツール

毎週、毎月Trelloに同じカードを作成している方必見です。 スプレッドシートとGoogle Apps Scriptを使用して、Trelloにカードを作成するツールを作成します。

  1. GASでスプレッドシートのデータを元にTrelloのカードを作成する
  2. GASで取得したTrelloのボード情報をスプレッドシートでリスト選択にする
  3. スプレッドシートとGASでTrelloのリストにカードを作成するツール
タイトルとURLをコピーしました