如何通过HTMLService(Google App脚本)将电子表格数据导入到客户端数组中
问题描述:
我正在使用GAS HTMLService来设计Web应用程序,并且遇到了一个我似乎无法克服的主要障碍 - 所以我希望从你们那里得到一些帮助。如何通过HTMLService(Google App脚本)将电子表格数据导入到客户端数组中
我能够正确地创建模板并显示HTML使用标准的doGet:
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);
}
});
问题似乎与试图用“我”变量 - 我可以用得到正确的信息:
'<?=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??
所以我有,我有一个服务器端阵列的理论:
(Spreadsheetapp.blahblah.getValues();)
是不适用于客户端一起玩。
我给你的人的问题是我如何才能从电子表格到HTML表格和提供此数据作为通过使用一个简单的for循环数组迭代....
还是有更好的方法?
答
你是正确的,该阵列是在服务器上。 <? .. ?>
内的任何代码都是服务器代码),并且客户端上不可用。
你可以做的是整个阵列复制到客户端,这样就可以通过它以后迭代:
假设你已经在服务器上的数组:
<? var serverStuff = [1, 2, 3]; ?>
你可以告诉模板,将其复制到客户端(基本上,写它的值直接进入客户端代码。
<script>
...
var clientStuff = <?!= JSON.stringify(serverStuff) ?>;
...
// Now you have it on the client! You can use it here:
alert(clientStuff[0]);
</script>
你可以看到什么是通过记录TEMPL的内容发生吃在服务器上(评估后):
Logger.log(template.evaluate().getContent());
这将使你这个实际的客户端代码,以写入它的阵列的复制:
<script>
...
var clientStuff = [1, 2, 3];
...
// Now you have it on the client! You can use it here:
alert(clientStuff[0]);
</script>
谢谢,科里! 这完美的作品......你为我节省了一大笔挫折和头痛。再次感谢!!! – user2348688 2013-05-15 21:05:59