如何通过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> 
+0

谢谢,科里! 这完美的作品......你为我节省了一大笔挫折和头痛。再次感谢!!! – user2348688 2013-05-15 21:05:59