【问题标题】:How to get Spreadsheet Data into clientside array via HTMLService (Google App Scripts)如何通过 HTMLService (Google App Scripts) 将电子表格数据放入客户端数组
【发布时间】:2013-05-09 03:34:11
【问题描述】:

我正在使用 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??

所以我有一个服务器端数组的理论:

 (Spreadsheetapp.blahblah.getValues();) 

客户端无法使用。

我的问题是如何将电子表格中的这些数据放入 HTML 表单中,并使用简单的“for”循环作为数组进行迭代......

或者有更好的方法吗?

【问题讨论】:

    标签: javascript jquery html arrays google-apps-script


    【解决方案1】:

    您是正确的,阵列在服务器上。 &lt;? .. ?&gt; 中的任何代码都是服务器代码),在客户端上不可用。

    你可以做的就是将整个数组复制到客户端,这样你以后就可以遍历它:

    假设你在服务器上有一个数组:

    <? 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>
    

    您可以通过在服务器上记录模板的内容(评估后)来查看发生了什么:

    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>
    

    【讨论】:

    • 谢谢你,科里!这很有效……你为我省去了很多挫折和头痛。再次感谢!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2012-08-12
    相关资源
    最近更新 更多