質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

3040閲覧

GAS スプレットシートとTrelloの連携エラー

leilani1103

総合スコア5

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2019/08/28 02:30

編集2019/08/29 00:46

前提・実現したいこと

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つ目に貼ったソース)、スプレットシートにメニューが表示されなかった為、最上部へ移動したらメニューバーに表示されるようになりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/28 03:27

マークダウンを適切に使用してください。内容が頭に入ってこないです。。。
leilani1103

2019/08/29 00:48

せっかく見ていただいてのに申し訳ございません。 コードを囲ってみたのですが、見やすくなりましたでしょうか?
guest

回答1

0

ベストアンサー

関数のスコープですね。

AddTrelloCardはmyFunctionの内部で宣言されているので、外からアクセスできません。
function addTrelloCard(){ から対応する} までをmyFunctionの外に出せばよいのでは?
(外に出した結果動かなくなるかどうかまでは見てません)

投稿2019/08/28 08:47

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leilani1103

2019/09/02 01:21

ご回答いただきありがとうございました! ご教示いただきました通りに処理したところ、当初のエラーは回避されましたが、別のエラーがでてしまいました。
macaron_xxx

2019/09/05 00:14

どれが最新のコードで新たなエラーはなんですか? わかりません。
papinianus

2019/09/08 15:56

apikeyとかが見えなくなってるんでしょうね。 もう面倒なんで、onOpenで指定するfunctionNameをmyFunctionにして、myFunctionの最後の行に、addTrelloCard();と書いたらいいんじゃないかと思います
leilani1103

2019/09/12 09:58

コメントをいただきました皆様 無事解決いたしました。 初心者過ぎて質問もまともにできず、ご迷惑をお掛けし大変申し訳ございませんでした。 お忙しい中ご相談にのっていただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問