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

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

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

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

Google Apps Script

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

JavaScript

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

Q&A

解決済

1回答

3247閲覧

Google Apps Scriptの出力スクリプトレットタグでリストを取得したい

funmas

総合スコア31

Google スプレッドシート

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

Google Apps Script

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

JavaScript

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

0グッド

0クリップ

投稿2020/02/27 05:16

編集2020/02/27 05:18

前提・実現したいこと

Google Apps Scriptのgsファイルの関数を、
HTMLからリスト型で呼び出したい。

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

list = ['リンゴ', 'イチゴ', 'スイカ'];
上記listを取得すると、

>> リンゴ,イチゴ,スイカ
という文字列になってしまい、

list[0]とすると、
>> リ
となってしまう。

これを、
>>リンゴ
と表示させたい。

該当のソースコード

gs

1function main() { 2 var html = HtmlService.createTemplateFromFile("dialog").evaluate(); 3 SpreadsheetApp.getUi().showModalDialog(html, "選択してください"); 4}; 5 6function getData() { 7 var hoge = ['リンゴ', 'イチゴ', 'スイカ']; 8 return hoge; 9};

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 <script type='text/javascript'> 6 function htmlA() { 7 var lista = <?= getData(); ?>; 8 alert(lista[0]); 9 } 10 </script> 11 </head> 12 <body> 13 <a href="#" onclick="htmlA()">テスト</a> 14 </body> 15</html>

試したこと

var lista = <?= getData(); ?>;
alert(lista[0]);

上記で、listaに、getData関数の返り値を代入していますが、
list型にならないため、lista[0]で、「リ」と出力されます。

標準スクリプトレットタグ(<? ?>)だと、
gs内に書いてあることを直接htmlの中に書けば、一応は実現できますが、
可読性や、メンテナンス性が落ちるので、

できることであれば、
出力スクリプトレットタグ(<?= ?>)で実現したいと考えています。

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

Google Spread Sheet
Google Apps Script
(Chrome V8は無効)

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

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

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

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

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

guest

回答1

0

ベストアンサー

HTMLテンプレートでスクリプトレットを使って値がHTMLへ挿入されると文字列に変換されます。これが問題の原因と思われます。そこで今の場合、一つの解決策として、次のような変更はいかがでしょうか。

From

javascript

1var lista = <?= getData(); ?>;
  • この場合、文字列として'リンゴ','イチゴ','スイカ'listaへ代入されます。

To

javascript

1var lista = (<?= getData(); ?>).split(",");
  • solit()を使って文字列の'リンゴ','イチゴ','スイカ'を配列に分離しています。

他の方法

他の方法として、getData()return hoge;return JSON.stringify(hoge);に変更し、var lista = <?= getData(); ?>;var lista = JSON.parse(<?= getData(); ?>);に変更することでも配列として使用することが可能です。

投稿2020/02/27 05:59

kisojin

総合スコア899

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

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

funmas

2020/02/27 06:57

課題について、お教えいただいた、 2つの方法で見事に解決することができました! また、こちらの質問に記載がなく大変恐縮なのですが、二次元配列で開発を進めていたので、 「他の方法」のJSONを再変換する形で、見事に課題をクリアできました。 大変助かりました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問