私は GAS HTMLService を使用して Web アプリを設計していますが、克服できない大きなハードルにぶつかっています。
標準の doGet を使用して、テンプレートを作成し、HTML を適切に表示できます。
function doGet(e){
var ss = SpreadsheetApp.openById('SpreadSheetKey');
var usersheet = ss.getSheetByName('UserInfo');
var lastRow = usersheet.getLastRow();
var Userrange = usersheet.getRange(2, 1, lastRow-1, 4);
var Uservalues = Userrange.getValues();
var length = Uservalues.length;
var template = HtmlService.createTemplateFromFile('Form.html');
template.stuff = {};
template.stuff = Uservalues;
template.action = ScriptApp.getService().getUrl();
return template.evaluate();
}
HTML ファイルから次のコードを削除する限り、HTML は正常にレンダリングされます。
$('#chkP').click(function(){
var email = '<?=email?>';
var usename = $('#myuserName').val();
for(var i=0;i<num;i++){
var name = '<?!=stuff[i][0]?>';
alert(name);
}
});
この問題は、「i」変数を使用しようとしたことに関連しているようです。次を使用して適切な情報を取得できます。
'<?=stuff[2][0]?>' // THIS WORKS
<?=stuff[i][0]?> //THIS DOES NOT -- IT IS ALWAYS undefined
// it's like 'i' and <?stuff?> aren't in the same scope??
だから私は ServerSide 配列を持っているという理論を持っています:
(Spreadsheetapp.blahblah.getValues();)
クライアント側で遊ぶことはできません。
皆さんへの私の質問は、このデータをスプレッドシートから HTML フォームに取得し、単純な「for」ループを使用して配列として反復処理できるようにする方法です....
または、より良い方法はありますか?