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

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

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

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

Q&A

1回答

804閲覧

Google apps script 単語帳 スプレッドシートから順番に問題を表示する

umasan

総合スコア12

Google Apps Script

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

0グッド

1クリップ

投稿2019/07/13 07:47

前提・実現したいこと

GASをつかって、単語帳のアプリを作りたいのですが、ランダムに問題が出るのではなく、「WEB上にある”次へ”のボタン」を押すと2行目(1行目タイトル)から順番通りに問題と答えがWEB上で、表示されるようにしたいです。次の問題は、同じく「次へ」を押すと、次の問題が表示される。

For i ~  で作ってみましたが、うまくいきませんでした。ランダムの作り方は分かるのですが、順番どおりの表示の仕方が分かりません。

当方、独学で見よう見まねで作っております。今回は、WEB上にある情報を元に作っております、是非、お知恵をお貸しください。

参考元:https://qiita.com/Suibari_cha/items/87503c55d984ff0f43e6

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

エラーメッセージは出ませんが、希望の内容が表示されません。

該当のソースコード

index.html <html> <head> <title>Quiz Web App</title> <script> // 次へボタンがクリックされたとき呼び出されるハンドラ function onbtnclickk(){ // html読み取り var answer = document.getElementById("answer"); var btn = document.getElementById("btnk"); if(answer.style.visibility == "hidden"){ // 答えが表示されていないので、答えを表示しボタンを「次の問題」に btn.innerHTML = "問題(国語)"; answer.style.visibility = "visible"; } else { // 答えが表示されているので、問題・答えを取得して答えを非表示にしボタンを「答えを見る」に new_quiz(); btn.innerHTML = "答え(国語)"; answer.style.visibility = "hidden"; } } // サーバ側スクリプトnew_quiz_sv()が実行成功したとき呼び出されるハンドラ function onSuccess (res){ // html読み取り var quiz = document.getElementById("quiz"); var answer = document.getElementById("answer"); // 問題のセット quiz.innerHTML = res[0]; // 回答のセット answer.innerHTML = res[1]; answer.style.visibility = "hidden"; } // サーバサイド関数を稼働させて、問題・答えを取得する関数 function new_quiz() { .script.run.withSuccessHandler(onSuccess).new_quiz_sv(); } </script> </head> <body> <table style="width: 100%;" cellspacing="100" cellpadding="0"> <tbody> <tr> <td style="vertical-align: top;" align="left"> <div id="quiz" style="font-size: 300%;"><br></div> </td> </tr> <tr> <td style="vertical-align: top;" align="left"> <button type="button" id="btnk" style="width: 30%; height: 200%; color: white; background: rgb(80, 184, 216) none repeat scroll 0% 0%; font-size: 400%;" onclick="onbtnclickk()">次へ</button>     </td> </tr> <tr> <td style="vertical-align: top;" align="left"> <div id="answer" style="font-size: 300%;"></div> </td> </tr> </tbody> </table> <script> // 最初にHTMLが読み込まれたときに問題・答えを設定する new_quiz(); </script> </body> </html> ---------------- main.gs // GASが呼び出されたときに実行。HTMLを表示する function doGet(e) { var htmlOutput = HtmlService.createTemplateFromFile("index").evaluate(); htmlOutput .setTitle('学習')//タイトルを付ける return htmlOutput; } // スプレッドシート処理関数 function new_quiz_sv(){ // スプレッドシート処理 var sheet = SpreadsheetApp.openByUrl('https://xxxxxxxxxxxxxxx/') .getSheetByName('国語'); var lastRow = sheet.getLastRow(); // 問題文、回答文の取得 for (var i=2; i<=lastRow; i++) { var text_quiz = sheet.getRange("B" + i).getValue(); var text_answer = sheet.getRange("D" + i).getValue(); } return [text_quiz, text_answer]; } ソースコード

試したこと

for (var i=2; i<=lastRow; i++) {
var text_quiz = sheet.getRange("B" + i).getValue();
var text_answer = sheet.getRange("D" + i).getValue();
}

ここに問題に対して試したことを記載してください。

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

動作環境
windows7
chrome

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

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

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

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

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

guest

回答1

0

そういう動きをするには、今が何問目かをサーバ側スクリプトに教えてあげる必要があります。

  1. htmlにhiddenなどで何問目かを持ちます。
  2. new_qui()をクライアントで実行するときに、↑のあたいをサーバ側に引数として渡します(script.run.withSuccessHandler(onSuccess).new_quiz_sv(i))
  3. サーバ側でiをforでループせずに、sheet.getRangeするときにクライアントから渡された引数を一つ増やした行を一行だけとるようにする

投稿2019/07/13 14:31

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問