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

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

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

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

Q&A

解決済

1回答

3404閲覧

GASで、スプレッドシートの値をHTMLに表示したい

masaof

総合スコア7

Google Apps Script

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

0グッド

0クリップ

投稿2021/06/18 15:45

スプレッドシートの値をHTMLに表示したい

スプレッドシートのセル(C4)の値を
HTMLのテキストエリアに表示したい

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

JSONからの取得が不可能

エラーメッセージ

特になし

該当のソースコード

GAS

1function doGet() { 2 var html = HtmlService.createHtmlOutputFromFile('top.html'); 3 html.setTitle("情報"); 4 html.setFaviconUrl("https://drive.google.com/uc?id=13wY_LsPFagcYs2UwCAkn4WeBNS3hnu__&.ico"); 5 return html; 6} 7 8//リンクをHTML側に返してあげる関数 9function poplink(){ 10 var sheet = "ID"; 11 //シートを取得 12 var list = SpreadsheetApp.openById(sheet).getSheetByName("検索").getRange("C4").getValue(); 13 Logger.log(list); 14 //取得データを返す 15 return JSON.stringify(list); 16} 17

HTML

1 <script> 2 //スプレッドシート側からデータを取得する 3 google.script.run.withSuccessHandler(onSuccess3).poplink(); 4 5 function onSuccess3(data){ 6 var json = JSON.parse(data); 7 8 //ラベルを入れる 9 var link_html = ""; 10 //textareaタグの頭を入れる 11 link_html += "<textarea name="link" id="link" cols="110" rows="1" type="text">"; 12 13 //HTMLデータの生成 14 link_html += json; 15 16 //textareaタグの下を入れる 17 link_html += "</textarea>"; 18 19 //プルダウンメニューを設置する 20 document.getElementById("link").innerHTML = link_html; 21 } 22 </script> 23 <div > 24 <span id="link";></span> 25 </div>

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

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

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

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

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

guest

回答1

0

ベストアンサー

SpreadSheetのデータなど基本的にGASを使ってGoogleのサービスで得たデータををHTMLに表示したいのであれば createTemplateFromFileを使ってHTMLTemplateでGASで取得したデータを埋め込むのが良いと思います。(なにか他に特別な事情がなければ)

参考https://developers.google.com/apps-script/guides/html/templates#calling_apps_script_functions_from_a_template

つまり、doGet関数の最初の行を

function doGet() { var html = HtmlService.createTemplateFromFile('top.html').evaluate() // ...

のようにして、またpoplinkでJSONを返してるところを、

function poplink(){ // .... (中略) return list; }

と返して、このpoplink()関数を、テンプレートで埋め込むと良いように思います。

top.html

1<div > 2 <span id="link"> 3 <textarea name="link" id="link" cols="110" rows="1" type="text"> 4 <?= poplink() ?> 5 </textarea> 6 </span> 7</div> 8

実際コードを試しているわけではないのですが、たぶんこれで希望のことができるんじゃないかと思います。

投稿2021/06/18 19:10

nobkz

総合スコア320

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

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

masaof

2021/06/19 08:24

ありがとうございます。 自分が行いたいようにできたのですが、1点だけ気になる点がありますので もし可能であれば、教えてください。 現在C4の値をテキストエリアに表示することは可能になりました。 しかし、18個分のホワイトスペースが頭にはいってしまいます。 これはなぜでしょうか。。
nobkz

2021/06/19 10:36

あー、テキストエリアの埋め込むときに、変数にうっかり空白文字が入ってしまっている、またはpoplink()取得セルに空白文字が入ってしまっているかどっちかかなーと思います。
masaof

2021/06/20 23:23

確認遅れてしまいました。 取得セルには空白文字がないので、 前者かとおもいます。 解決策としては、 変数の中の最初の18文字を削除していれるという処理をかけばよろしいでしょうか
masaof

2021/06/20 23:27

再度見返したところ、後ろ18文字にも空白がありました。
masaof

2021/07/09 12:55

<textarea></textarea>を改行したことにより、 インデントが<textarea>の中に入るというものでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問