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

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

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

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

1816閲覧

複数のGoogleスプレッドシートの内容をjsonデータとして使いたい

tanaka_akio

総合スコア7

Google スプレッドシート

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/05/19 04:07

Google spread sheetで、シートの内容をjavascriptでJSONで取り出す場合、
1つのシートから値を取り出すことはできますが、複数のシートでそれぞれの
JSONファイルを作ってAPIとjavascriptでシートごとのデータを読み込むことはできるのでしょうか?

例)
シート1 JSON data 1 ******
シート2 JSON data 2 ******
シート3 JSON data 3 ******

シート1,2,3のJSONをそれぞれ分けて、javascriptで使いたい。

function getData(id, sheetName) { var sheet = SpreadsheetApp.openById(id).getSheetByName(sheetName); var rows = sheet.getDataRange().getValues(); var keys = rows.splice(0, 1)[0]; return rows.map(function(row) { var obj = {} row.map(function(item, index) { obj[keys[index]] = item; }); return obj; }); } function doGet(request) { var func = 'jsondata'; var data = getData('xxx_スプレッドシートのURL_xxx', 'Sheet1'); return ContentService.createTextOutput(func + '(' + JSON.stringify(data, null, 2) + ')') .setMimeType(ContentService.MimeType.JAVASCRIPT); }

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

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

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

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

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

guest

回答1

0

理解がずれていたらすみません。
それぞれのシートの値を取得し一つの配列にしてjsonにして渡してやるというのではダメですか?

gas

1 2var resluts = { 3 sheet1:getData('xxx_スプレッドシートのURL_xxx', 'Sheet1'), 4 sheet2:getData('xxx_スプレッドシートのURL_xxx', 'Sheet1'), 5 sheet3:getData('xxx_スプレッドシートのURL_xxx', 'Sheet1') 6} 7 8 return ContentService.createTextOutput(func + '(' + JSON.stringify(resluts, null, 2) + ')') 9 .setMimeType(ContentService.MimeType.JAVASCRIPT); 10 11

投稿2021/05/19 04:51

Tatsunosuke

総合スコア599

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

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

tanaka_akio

2021/05/19 06:38

Tatsunosukeさん、ありがとうございます。このようにシートをまとめてデータ化できるんですね。すごいです。 出来上がった JSONを javascript 側でパースして 各シートごとのJSONデータの中身の配列をjavascriptの中で表示させたいのですが、いまいちパースのやり方がわかりません。調べているのですがなかなかやり方が見つからないのですが、何か参考になるコード、もしくはサイトなどがあればアドバイスいただけないでしょうか。
Tatsunosuke

2021/05/19 06:45

var json = api で渡されたjson  var data = JSON.parse(json); これで、 var data{ sheet1:"シート1のデータ", sheet2:"シート2のデータ", sheet3:"シート3のデータ" } になってるはずなので、それぞれの好きなところを使ってもらえれば! console.log()でそれぞれを見ればどんな感じでの配列になっているか 確認できると思います。
tanaka_akio

2021/05/19 10:27

Tatsunosukeさん ありがとうございます。 1つ疑問点があります。 google spread sheet 側で 出来たURLをダイレクトに開くと直接JSONのデータが見えるようになりましたが(下記のURL) https://script.google.com/macros/s/*****/exec これをそのまま  var data ='https://script.google.com/macros/s/*****/exec' var json = data var data = JSON.parse(json); のようには出来ないのでしょうか? var json = api で渡されたjson   ーー>この部分は調べてみると fetchのコードを使ってJSONとして取り出す? みたいなことが書いていたのですが、fetch のコードを使う必要がありますか?
Tatsunosuke

2021/05/19 10:35 編集

アクセス先 = GAS(API) アクセス元 = ??? ??? => GAS => JSON => ??? こんな流れなんですが、???は何で行ってますか? phpやJsやPythonや色々あります。。。 jsの場合であれば、おっしゃるようにfetchやaxios使ったりします。
tanaka_akio

2021/05/19 10:52

ありがとうございます。javascriptです。 ↓を見ながら挑戦していますが、なかなかうまくデーターが得られません。(汗;) このfetch codeで出来ますか? https://qiita.com/Molly95554907/items/730220dfc1178e78d7ce const url = //任意のAPIのhttpアドレス //APIからJSONデータを取得する fetch(url) .then((response) => { return response.json() //ここでBodyからJSONを返す }) .then((result) => { Example(result); //取得したJSONデータを関数に渡す }) .catch((e) => { console.log(e) //エラーをキャッチし表示 }) })
Tatsunosuke

2021/05/19 10:58

↑これの結果はどうでしたか? console.logの結果見せていただけると!
tanaka_akio

2021/05/19 11:26 編集

const url ="https://script.google.com/macros/s/AKfycbzdU4Md20DUSfQFcqJJbUG81LIFGh42WmAQZN_9r3wh3SKSJknB/exec"; //APIからJSONデータを取得する fetch(url) .then((response) => { return response.json() //ここでBodyからJSONを返す }) .then((result) => { Example(result); //取得したJSONデータを関数に渡す }) .catch((e) => { console.log(e) //エラーをキャッチし表示 }) //JSONデータを引数に受け取ってDOM操作を行う関数を作成 function Example(jsonObj){ const data = jsonObj.results[0] name.textContent = data.name; age.textContent = data.age; } コンソール [object Error] { ... }
Tatsunosuke

2021/05/19 13:25

? コンソール [object Error] { ... }←これは、どこのlogですか? .catch((e) => {   console.log(e) //エラーをキャッチし表示   ↑これですか?  }) logに出たきた内容これで全部でした?
tanaka_akio

2021/05/20 02:03

Tatsunosukeさん 試行錯誤の連続でした。そして、今朝なんとか、JSONを得ることに成功です。 こちらがコードです。 https://d.kuku.lu/a5be221f6 そして、得られたJSONの形がこれ https://d.kuku.lu/9fd3e279c このJSONから sheet1だけの要素を抜き出すやり方がわかりません。 やりたいのは、sheet1から"英語”のところだけの要素を抜き出して、配列にしたいです。 var English = [car,apple,lemon] のようにして、javascriptでいじりたいです。どうしたらいいのでしょうか?
tanaka_akio

2021/05/20 03:32

Tatsunosukeさん ありがとうございます。 午前中ずっと試行錯誤してついにできました。 text.sheet1.英語 これでいけそうです。 最後に教えて下さい。 fetchでJSONをスプレッドシートから持ってくると、非同期通信のため javascrpit側で表示させると、たまに配列が空でundefinedとでてしまいます。 fetchでデータをもらったのを確認してから配列に入れるようにするには何かいい方法はありますか?
tanaka_akio

2021/05/21 02:52

ありがとうございます。昨日遅くまでasyncとawaitをトライしていました。 なかなかやり方が難しいのですが、ようやくなんとかできそうです。あともう少しがんばります!ありがとうございます。
Tatsunosuke

2021/05/21 09:43

はい!頑張ってください!応援してます!
tanaka_akio

2021/05/21 15:43

本当に感謝です!!!嬉しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問