私の意図は、Google アプリ スクリプトを使用して小さなクイズ スクリプトを作成することです。質問と可能な回答のデータは、Google スプレッドシートにあります。スプレッドシートの範囲はスクリプトによって呼び出され、2D 配列として使用されます。ほとんどの場合、スクリプトは正常に実行されますが、
「typeerror は未定義のプロパティ '0' を読み取ることができません」
ランダムに出てくるようです。
私はおそらく配列機能を間違って使用していますが、それを理解することはできません。
1 配列に関するほとんどの例では、for ループが使用されています。私の配列のデータは変更されないので、これを for ループを使用することは依然として必須ですか?
2 スプレッドシートのデータをキャッシュに保存すると便利ですか?
function drawQuestion (){
var app = UiApp.getActiveApplication();
var cache = CacheService.getPrivateCache();
//Add Spreadsheet DB
var sheet = SpreadsheetApp.openById(SPREADSHEET_ID);
var data = sheet.getDataRange().getValues();
var min =1;
var max = MAX;
var xnumber = (Math.floor(Math.random() * (max - min + 1)) + min);
//for (var i = 0; i < data.length; i++) {
var question1 = String(data[xnumber][0]); //when I change this '0' in a '1' it gives me a typeerror cannot read property 1 - message.
var answer1 = String(data[xnumber][1]);
var answer2 = String(data[xnumber][2]);
var answer3 = String(data[xnumber][3]);
var answer4 = String(data[xnumber][4]);
var correct1 = Number(data[xnumber][5]);
// var background1 = data[xnumber][6];
// var explanation1 = data[xnumber][7];
// }
//Write the new Question
var statusLabel = app.getElementById("statusLabel");
statusLabel.setText(question1);
//Answer1
var button1 = app.getElementById("button1");
button1.setText(answer1);
//Answer2
var button2 = app.getElementById("button2");
button2.setText(answer2);
//Answer3
var button3 = app.getElementById("button3");
button3.setText(answer3);
//Answer4
var button4 = app.getElementById("button4");
button4.setText(answer4);
//Store correct answer & explanation in cache
cache.put('correct1', Number(correct1));
//cache.put('explanation1', explanation1);
}