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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

Q&A

解決済

2回答

2405閲覧

GASでスプレッドシートのセル内にメソッドを記載し更新させたい。

dendenmushi

総合スコア98

Google Apps Script

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

0グッド

0クリップ

投稿2019/06/01 03:17

編集2019/06/01 22:30

前提・実現したいこと

Googleスプレッドシートの1セルに値を入れてその値をGASの引数にして、その横のセルに返却値を表示したい。

###実装内容

GAS

1function method_geo(address) { 2 if (address === '') { 3 return 4 } 5 var api_url = "https://maps.googleapis.com/maps/api/geocode/json?address=" + encodeURI(address); 6 api_url += '&key=[API Keyをここに書きました。]' 7 var response = UrlFetchApp.fetch(api_url); 8 var result = JSON.parse(response); 9 var location = result['results'][0] 10 if (typeof location === 'undefined') { 11 return 12 } 13 location = location['geometry']['location'] 14 return {lat: location['lat'], lon: location['lng']} 15}

APIを有効にし、Keyも発行しソースコードに記載しました。
イメージ説明

式を入れて更新しても、GASの

発生している問題・エラーメッセージ

イメージ説明

試したこと

①スプレッドシートの右側セルに=コード.gs.method_desu(A1)とGASと連携するために記述⇒状況かわらず
②GASの黒▲実行押下⇒状況変わらず
③おそらくマニュアルにのっている基礎内容だと思うのですがそのページを探したのですが見つけられず

方法は2つあると思っています。1つはGASのjapascript記載でスプレッドシートのセルを指定して実行操作する方法。もうひとつはGASにメソッドだけ作り、スプレッドシートのセル内にメソッド記載して実行表示する方法。後者の方で利用したいです。どなたかアドバイスよろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

win10
Google App Script

###自己解決した部分(2019/06/02追記)
頂いた膨大なマニュアルの中自分が目当てとするところがどうしても見つけられず他サイトを探したところ、以下が見つかりました。

スプレッドシートからスクリプトエディタを開く

私が連携を取れなかった原因は、今までスプレッドシートとGASを別々に作成していたために連携が取れなかったということがわかりました。

###まだ残る課題
リターン値でエラーが起きてしまいました。

GAS

1var idotokeido = ""←ステートメントに;がありませんエラー 2str idotokeido = ""←ステートメントに;がありませんエラー 3 4function geo(address) { 5 if (address === '') { 6 return 7 } 8 var api_url = "https://maps.googleapis.com/maps/api/geocode/json?address=" + encodeURI(address); 9 api_url += 'APIキー' 10 var response = UrlFetchApp.fetch(api_url); 11 var result = JSON.parse(response); 12 var location = result['results'][0] 13 if (typeof location === 'undefined') { 14 return 15 } 16 location = location['geometry']['location'] 17 location['lat'] 18 idotokeido = str(location['lat']) + "," + str(location['lng'])←indexに1がありませんエラー 19 idotokeido = location['lat'] + "," + location['lng']←indexに1がありませんエラー 20 return idotokeido 21}

ひとつのセルに12345,6789というように緯度経度を出したいのですが、そもそもstrではなくvar宣言が間違っているのでしょうか。GASの文法にはstrがそもそもなく自動認識varとして記載してもだめでした。

###エラーがなくなるが0になってしまった
+ではなく&で繋げました。
でもリターンが0としてスプレッドシートには表示されてしまいました。

GAS

1var tr = "" 2function geo_method(address) { 3 if (address === '') { 4 return 5 } 6 var api_url = "https://maps.googleapis.com/maps/api/geocode/json?address=" + encodeURI(address); 7 api_url += 'APIキー' 8 var response = UrlFetchApp.fetch(api_url); 9 var result = JSON.parse(response); 10 var location = result['results'][0] 11 if (typeof location === 'undefined') { 12 return 13 } 14 location = location['geometry']['location'] 15 tr = location['lat'] & "," & location['lng'] 16 return tr 17}

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

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

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

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

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

papinianus

2019/06/03 00:33

これを > tr = location['lat'] & "," & location['lng'] こうしたらよいのでは? > tr = location['lat'] + "," + location['lng']
dendenmushi

2019/06/03 02:49

ありがとうございます。それを起こったのですが、indexが1ではありませんエラーと;がありませんエラーが連発してしまいました…
papinianus

2019/06/03 10:11

どういうエラーか翻訳せずそのままにして、また行数を書いてください。もしくはapiキーの取得方法を教えて下さい
dendenmushi

2019/06/05 13:13

すいません今気付きました。回答訂正提案ありがとうございます。なんとか対応策得ることができました。お手数おかけして申し訳ありませんでした。
guest

回答2

0

ベストアンサー

マニュアルは以下です。

Extending Google Sheets
Spreadsheet Service

投稿2019/06/01 09:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

dendenmushi

2019/06/01 13:57

回答ありがとうございます。これを見る限り2つめの方法の『GASにメソッドだけ作り、スプレッドシートのセル内にメソッド記載して実行表示する方法』はできないということでしょうかね。
退会済みユーザー

退会済みユーザー

2019/06/01 15:54

いえ、できますよ。 =method_geo(A1) とでもしてやると動きます。 Logger.log()で値がどこまで取れているのか確認すると良いです。 権限以外の問題としては、return がオブジェクトなので、それを適切に処理してあげる必要があると思います。
dendenmushi

2019/06/01 22:44

ありがとうございます。私はスプレッドシートとスクリプトをばらばらに作っていたために連携ができていませんでした。ただreturnの『適切に処理』がいまだにできず苦戦しております。お手数ですがご教授頂けないでしょうか。
退会済みユーザー

退会済みユーザー

2019/06/02 00:35

今のコードはご自身で書かれたものですか? ご自身の行いたい処理を明確にして、それを実装するのが適切です。 私が検証のために動かしたコードでは、(検証のために表示できればよかったので) return の際、文字列にしてみました。
dendenmushi

2019/06/03 02:48

一番上にある初めの緯度経度取得コードはgoogle検索で見つけたコードになります。自分なりに作ってみます。文字列で行ってみます。回答ありがとうございました。
guest

0

①スプレッドシートを作成して、そこからスクリプトを選択すれば連携できるようになった。

②リターン値におけるエラーはlng lat 緯度経度を別々にしてobject型ではなく出力するようにしてスプレッドシートの別の列に出すようにして2列出力するようにしたことでエラーが起きなくなりました。

投稿2019/06/05 13:17

dendenmushi

総合スコア98

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問