🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

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

Google Apps Script

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2959閲覧

GASで部分的に多次元の配列をスプレッドシートに出力したいが、[Ljava.lang.Object;@…というエラーが出る

tatsu3

総合スコア11

Google スプレッドシート

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

Google Apps Script

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2019/10/07 07:15

GASでパースしたデータを再編し、一部が多次元になっている配列にしてみました。
それを定時パースするたびにスプレッドシートに追加出力したいと考えています。
appendRowを使ってみたら、多次元になっている部分が表題のようなエラーになってしまいます。

function myFunction() { var array = ["a","b","c"] var tempArray1 = []; var tempArray2 = ["e","f","g"] var tempArray3 = ["h","i","j"] tempArray1.push(tempArray2); tempArray1.push(tempArray3); array.push(tempArray1); Logger.log(array); // [a, b, c, [[e, f, g], [h, i, j]]] Logger.log(array[3][0]); // [e, f, g] Logger.log(array[3][0][0]); // [e] var sht = SpreadsheetApp.getActiveSheet(); sht.appendRow(array); } ```aとbとcは、それぞれ別の列のセルに収まるのに、[[e,f,g],[h,i,j]]の部分に該当する列のセルがエラーとなってしまうのです。 ログ出力で示したように、多次元の奥の方のデータも取れるので、配列としては成り立っているのではないかと思うのですが…。 エラー表示で検索してみたら、String()が有効とあったので試してみました。 ```ここに言語を入力 <1> array.push(tempArray1);   ↓ array.push(String(tempArray1)); <2> tempArray1.push(tempArray2); tempArray1.push(tempArray3); ↓   tempArray1.push(String(tempArray2)); tempArray1.push(String(tempArray3)); <3> <1>と<2>の両方 ```このうち<2>と<3>は値がひとつの列に入りましたが、入れ子がなくなり、データがフラットになってしまいました。 イメージとしては、ひとつのセルに[e, f, g], [h, i, j]と入るなど、いずれにせよシステマチックに適宜取り出したり、一部データでソートしたりできるようにしたいと思うのですが…。 勉強中の身ゆえ、配列とは何かが根本的に分かっていないのかもしれません。 どなたかご教唆いただけないでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

配列の[]はあくまで記号なので、そもそも出力できるようなものではありません。
ログに[]が出力されているのはいいように表示してくれているだけです。

セルに表示したければ、そのように文字列加工するしかないと思います。

投稿2019/10/07 09:06

macaron_xxx

総合スコア3191

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

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

tatsu3

2019/10/07 12:10

どうもありがとうございました。 「配列の[]はあくまで記号」というご指摘、完全に分かっていないかもしれませんが、目から鱗が落ちた気がします。 目的はスプレッドシート(SS)に「表示」することよりも、保存・蓄積して再編集、再加工しやすくしたいということでした。「表示」するには、それ用に文字列加工しなくてはならない、ということでしょうか。であれば、目指すことと違うことに悩んでいたのかもしれません。 いずれにしても、ご親切な対応に感謝いたします。
macaron_xxx

2019/10/08 00:29

>保存・蓄積して再編集、再加工しやすくしたい であれば、スプレッドシートにデータを落とすよりも、jsonファイルなどにしてドライブ上に保存するほうがよいと思います。
tatsu3

2019/10/08 00:53

どうもありがとうございます! jsonでドライブ上に保存する方法、勉強して試してみます。 しばし立ち止まったままの状態から、今後の方向性が見つかりました。 心より感謝申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問