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

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

詳細はこちら
Google Apps Script

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

Q&A

解決済

2回答

6295閲覧

GASの.gsファイルで構文エラー

slimat

総合スコア57

Google Apps Script

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

0グッド

1クリップ

投稿2019/11/26 09:08

編集2019/11/28 07:22

こんにちは.

GASで, 以下スクリプトを 公開→ウェブアプリケーションとして導入 を選択し, 提示されるurlに飛ぶと, 下記エラーがブラウザウィンドウに出てしまいます.
どうしたら良いでしょうか. 宜しくお願い致します.

ソースコード作成の参考にしたサイトは以下です.
Google Apps ScriptでWebアプリケーションを作る最初の一歩
Google Apps Scriptで作るWebページにスクリプトの結果を出力して表示してみる
Google Apps ScriptでWebアプリケーションにスプレッドシートの値を出力する

// code.gs function doGet() { return HtmlService.createTemplateFromFile("hello").evaluate(); }

html

1<!-- hello.html --> 2 3<!DOCTYPE html> 4<html> 5 <head> 6 <base target="_top"> 7 </head> 8 <body> 9 <? 10 var repeat = 1; 11 var myData = SpreadsheetApp.getActiveSheet(); 12 Logger.log('hello'); 13 14 function answerButtonClick(click_value) { 15 output.append('answerButtonClickが呼び出された'); 16 for(var j=1; j<=4; ++j) { // 選択肢でループ 17 if (click_value == "Button" + j){ // ループの選択肢がユーザ選択と一致した場合 18 if(myData.getRange("F" + (repeat + 1)).getValues() == click_value){ 19 output.append('正解'); 20 } else { 21 output.append('不正解'); 22 } 23 ++repeat; 24 } 25 } // for 26 } // function 27 28 do { 29 output.append('<p>' + "問題" + repeat + "</P>"); // 問題番号を表示 30 output.append('<li>' + myData.getRange("A" + (repeat + 1)).getValues() + '</li>'); // 問題文を取得 31 } while(); 32 ?> 33 <input type="button" id="Button1" value="1" onclick="answerButtonClick(this.value)"> 34 <input type="button" id="Button2" value="2" onclick="answerButtonClick(this.value)"> 35 <input type="button" id="Button3" value="3" onclick="answerButtonClick(this.value)"> 36 <input type="button" id="Button4" value="4" onclick="answerButtonClick(this.value)"> 37 38 </body> 39</html>

error

1SyntaxError: 構文エラー。(行 2、ファイル「code」、プロジェクト「テスト」)

追記①

ご回答ありがとうございます.
大学のパソコンでgasをブラウザで表示させたまま帰宅して家のパソコンで同じプロジェクトを開くと, 「サーバー エラーが発生しました。ブラウザの [再読み込み] を押してください。」というエラーが再読み込みしても表示されるので家での修正は諦めます. 明日の正午にはご教授頂いたように修正して結果を提示したいと思います.


追記②

とりあえず, 以下のようにgsファイルを修正したところ, 以下のエラーが発生したので, "gsファイルに構文ミスは見受けられない"とのご指摘を加味するとhtmlファイルで構文エラーが起こっているという考えに帰着しました.

gs

1function doGet() { 2 var template = HtmlService.createTemplateFromFile("hello"); 3 return template.evaluate(); 4}

error

1SyntaxError: 構文エラー。(行 3、ファイル「code」)

以降はhtmlファイルの修正に取り組みたいと思います.


追記②

ひとまず, gsの方で構文エラーが出ていましたが, 実際はhtmlファイルの方の構文エラーであるということが分かったのでこの投稿は閉じます.
ご回答下さった皆様, 誠にありがとうございました.

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

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

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

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

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

guest

回答2

0

ベストアンサー

hello.htmlがいろいろおかしいです。

  1. Spreadsheetに紐付ていないスクリプトからはSpreadsheetApp.getActiveSheet()は正常に動きません。

JavaScript

1 ↓ これはエラーになります。 2var myData = SpreadsheetApp.getActiveSheet();
  1. <? ~ ?>内はサーバーサイドで実行されます。そのためanswerButtonClick関数はクライアントサイドでは実行できません。

クライアントサイドで実行したいなら、<script>タグを追加してそのなかで関数を定義してください。
その場合は、スプレッドシートのデータを直接読むことはできないので別途考慮が必要ですが。

HTML

1 ↓ 参照できません。 2<input type="button" id="Button1" value="1" onclick="answerButtonClick(this.value)">

投稿2019/11/26 11:58

draq

総合スコア2577

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

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

0

まず、どのようなサイトを参考にしたのかを明示した方が良いです、貴殿がどのような作業をしたのかがわかりやすいです。

次に、問題のポイントを見分けるため、可能な限りシンプルにして試してください。
今回は2つあります。
1)メソッドは分けて実行する

gas

1 return HtmlService.createTemplateFromFile("hello").evaluate(); 2

 この部分ですが、2分に分けられます。

gas

1 var temlate = HtmlService.createTemplateFromFile("hello"); 2 return template.evaluate();

 分けることで問題が発生した行番号が2行目か3行目かがわかると、どちらに問題があるのかが切り分けられます。

2)htmlをシンプルに
何を参照されたのかわかりませんが、単にhelloだけを表示するものに置き換えて試すことで、他に発生するかもしれない問題を排除し、現在発生している問題のみに注力できます。

HTML

1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 </head> 6 <body> 7 <p>Hello!!</p> 8 </body> 9</html>

その上で、エラーメッセージを見ると、HtmlService部分に問題があるとのことです。
構文的に問題は見受けられないので、現時点でこれ以上の回答は私にはできません。
hello.htmlを適切に作成しているのですよね?

投稿2019/11/26 10:39

t_obara

総合スコア5488

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

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

slimat

2019/11/26 12:44 編集

ご回答ありがとうございます. 仮に, スクリプトA中でスクリプトBを呼び出しているというスクリプト関係があった場合, スクリプトAに構文エラーがなくとも, スクリプトBに構文エラーがあった場合, スクリプトA中のスクリプトBを呼び出しているところで構文エラーとして現れるということはありえることなのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問