前提・実現したいこと
Googleスプレッドシートに作成した情報を選択し、スプレットシートに使いしたメニューを操作して、
Trelloにカード作成ができるようにしたいです。
スプレッドシートのメニューからaddTrellocardを実行すると下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
スクリプト関数 addTrelloCard が見つかりません。詳しくは https://developers.google.com/apps-script/reference/base/menu#addItem(String,String) をご覧ください。
GAS
1 function onOpen() { 2 // メニューバーにカスタムメニューを追加 3 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 var entries = [ 5 {name : "addTrelloCard" , functionName : "addTrelloCard"}, 6 ]; 7 spreadsheet.addMenu("GAS", entries); 8} 9 10function myFunction() { 11// ユーザー名 12// URLにも使用されている 13var user_name = 'hixxxxxx1'; 14 15// APIキーとトークン 16// https://trello.com/app-key 17// 上記にアクセスしてKeyとTokenを取得する。※Tokenは『generate a Token.』から作成する。 18var api_key = '83a4cxxxx70effe8c2da4xxxxx08'; 19var api_token = '48e3xxxxx4e93fc4bf5xxxxe3d684fb864xxd8f1e'; 20 21// ボードID 22// getBoardsを実行して取得する 23var board_id = '5xxxxxxxxxx3'; 24 25// リストID 26// getListsを実行して取得する 27var list_id = '5xxxxxxxx74'; 28 29// カード名の列番号 30var title_column_no = 1; 31// カード詳細説明の列番号 32var description_column_no = 2; 33 34function getBoards() { 35 var url = 'https://api.trello.com/1/members/' + user_name + '/boards?key=' + api_key + '&token=' + api_token + '&fields=name'; 36 Logger.log(UrlFetchApp.fetch(url, {'method':'get'})); 37} 38 39function getlists() { 40 var url = "https://trello.com/1/boards/" + board_id + "/lists?key=" + api_key + "&token=" + api_token + "&fields=name"; 41 Logger.log(UrlFetchApp.fetch(url, {'method':'get'})); 42} 43 44function getLabels() { 45 var url = "https://trello.com/1/boards/" + board_id + "/labels?key=" + api_key + "&token=" + api_token + "&fields=name"; 46 Logger.log(UrlFetchApp.fetch(url, {'method':'get'})); 47} 48 49function addTrelloCard() { 50 51 // 選択しているセルの開始行番号を取得 52 var ss = SpreadsheetApp.getActiveSpreadsheet(); 53 var sheet = ss.getActiveSheet(); 54 var upper_left_cell = sheet.getActiveCell(); 55 var start_row = upper_left_cell.getRow(); 56 57 // 選択しているセルの行数を取得 58 var range = SpreadsheetApp.getActiveRange(); 59 var rows = range.getNumRows(); 60 61 // カード作成 62 for (var i = 0; i < rows; i++) { 63 var row = start_row + i; 64 var card_title = sheet.getRange(row, title_column_no).getValue(); 65 var card_description = sheet.getRange(row, description_column_no).getValue(); 66 var url = 'https://api.trello.com/1/cards/?key=' + api_key + '&token=' + api_token; 67 var options = { 68 'method' : 'post', 69 'muteHttpExceptions' : true, 70 'payload' : { 71 'name' : card_title, 72 'desc' : card_description, 73 'due' : '', 74 'idList' : list_id, 75 // 'idLabels' : 'ラベルを使用したい場合はgetLabelsを実行してよしなに', 76 'urlSource' : '' 77 } 78 } 79 var response = UrlFetchApp.fetch(url, options); 80 // 作成したカードのURLをセルに出力したい場合は下記コメントアウトはずしてよしなに。 81 // var response_data = JSON.parse(response.getContentText()); 82 // sheet.getRange(row, 3).setValue(response_data['shortUrl']); 83 } 84} 85} 86
GAS
1 2// ユーザー名 3// URLにも使用されている 4var user_name = 'ここにユーザー名を記載する'; 5 6// APIキーとトークン 7// https://trello.com/app-key 8// 上記にアクセスしてKeyとTokenを取得する。※Tokenは『generate a Token.』から作成する。 9var api_key = 'ここにAPIキーを記載する'; 10var api_token = 'ここにAPIキーを記載する'; 11 12// ボードID 13// getBoardsを実行して取得する 14var board_id = 'ここにボードIDを記載する'; 15 16// リストID 17// getListsを実行して取得する 18var list_id = 'ここにリストIDを記載する'; 19 20// カード名の列番号 21var title_column_no = 1; 22// カード詳細説明の列番号 23var description_column_no = 2; 24 25function getBoards() { 26 var url = 'https://api.trello.com/1/members/' + user_name + '/boards?key=' + api_key + '&token=' + api_token + '&fields=name'; 27 Logger.log(UrlFetchApp.fetch(url, {'method':'get'})); 28} 29 30function getlists() { 31 var url = "https://trello.com/1/boards/" + board_id + "/lists?key=" + api_key + "&token=" + api_token + "&fields=name"; 32 Logger.log(UrlFetchApp.fetch(url, {'method':'get'})); 33} 34 35function getLabels() { 36 var url = "https://trello.com/1/boards/" + board_id + "/labels?key=" + api_key + "&token=" + api_token + "&fields=name"; 37 Logger.log(UrlFetchApp.fetch(url, {'method':'get'})); 38} 39 40function addTrelloCard() { 41 42 // 選択しているセルの開始行番号を取得 43 var ss = SpreadsheetApp.getActiveSpreadsheet(); 44 var sheet = ss.getActiveSheet(); 45 var upper_left_cell = sheet.getActiveCell(); 46 var start_row = upper_left_cell.getRow(); 47 48 // 選択しているセルの行数を取得 49 var range = SpreadsheetApp.getActiveRange(); 50 var rows = range.getNumRows(); 51 52 // 確認ダイアログ 53 var message = ''; 54 var start_card_title = sheet.getRange(start_row, title_column_no).getValue(); 55 message += start_card_title; 56 if (rows > 1) { 57 message += ' など' + rows + '枚'; 58 } 59 var result = Browser.msgBox('カードを作成します。よろしいですか?', message, Browser.Buttons.OK_CANCEL); 60 61 if (result == 'cancel') { 62 return; 63 } 64 65 // カード作成 66 for (var i = 0; i < rows; i++) { 67 var row = start_row + i; 68 var card_title = sheet.getRange(row, title_column_no).getValue(); 69 var card_description = sheet.getRange(row, description_column_no).getValue(); 70 71 var url = 'https://api.trello.com/1/cards/?key=' + api_key + '&token=' + api_token; 72 var options = { 73 'method' : 'post', 74 'muteHttpExceptions' : true, 75 'payload' : { 76 'name' : card_title, 77 'desc' : card_description, 78 'due' : '', 79 'idList' : list_id, 80 // 'idLabels' : 'ラベルを使用したい場合はgetLabelsを実行してよしなに', 81 'urlSource' : '' 82 } 83 } 84 var response = UrlFetchApp.fetch(url, options); 85 // 作成したカードのURLをセルに出力したい場合は下記コメントアウトはずしてよしなに。 86 // var response_data = JSON.parse(response.getContentText()); 87 // sheet.getRange(row, 3).setValue(response_data['shortUrl']); 88 } 89} 90 91function onOpen() { 92 // メニューバーにカスタムメニューを追加 93 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 94 var entries = [ 95 {name : "addTrelloCard" , functionName : "addTrelloCard"}, 96 ]; 97 spreadsheet.addMenu("GAS", entries); 98}
元々のスクリプトは2つ目になります。
スクリプトの実行ではエラーにはならないのですが、スプレットシートからメニューで実行するとエラーになり、Trelloカードは作成されません。
function onOpen()はfunction addTrelloCard()の次ではないといけないのでしょうか?
お分かりになる方がいらっしゃいましたら、対処方法をご教示いただけますと助かります。
どうぞよろしくお願いいたします。
◆問題に対して試したこと
function onOpen() は元々最下部にあったのですが(※2つ目に貼ったソース)、スプレットシートにメニューが表示されなかった為、最上部へ移動したらメニューバーに表示されるようになりました。
回答1件
あなたの回答
tips
プレビュー