无法返回数组[Google apps脚本]

时间:2014-05-28 11:59:15

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

我们遇到了问题。我们现在的代码工作,但我们无法让数组在html页面上返回。我们从html页面发送一个数字,然后发生returnData函数。虽然它去了,它通过loopsheetGewoon,然后它返回一个数组。数组返回到returnData,函数以数组的返回结束。

问题是,当我们尝试将数组放到html页面以便我们可以从电子表格中获取单个数据时,它会返回undefined。我们还尝试将javascript值传递给谷歌应用程序脚本代码,但这不起作用。

function loopSheetGewoon(data, studentNr){
    var SpreadSheetKeyA = "1h8fDwCUUPHRdmTHu-5gMyqU294ENZxCZcHCNCuN6r_Y";
    var sheet1 = SpreadsheetApp.openById(SpreadSheetKeyA).getActiveSheet();
    var array = [];
    for (var y = 0; y < data.length; ++y ) {
        var datum = Utilities.formatDate(data[y][0], "CET", "dd-MM-yyyy hh:mm");
        var nummer = data[y][2];
        if(studentNr.equals(nummer)){
            for (var x = 0; x < 35; x++ ) {
                array.push(data[y][x]);
            }
            return array;        
        }    
    }
}

以下是启动的功能。

function returnData(stuNr){
    var SpreadSheetKeyA = "1h8fDwCUUPHRdmTHu-5gMyqU294ENZxCZcHCNCuN6r_Y";
    var sheet1 = SpreadsheetApp.openById(SpreadSheetKeyA).getActiveSheet();
    var data = sheet1.getDataRange().getValues();
    var array = [];
    array = loopSheetGewoon(data, stuNr);
    Logger.log(array);
    return array;
}

以下是我们从html页面运行的功能。单击一个按钮时,它会向returnData函数发送一个数字(它存储为字符串值)。它现在应该用数组填充变量d,但是它会一直返回undefined。

$("#oph").click(function ophalen(){
    var s = $("#nummer").val();
    var displayEl = document.getElementById("nummer");
    var d = [];
    alert(s);
    d = google.script.run.returnData(s);

    //for( var y = 0; y < d.length(); ++y){
        //var naam = data[y][1];
        //var studentnr = data[y][2];
        //var document = data[y][32];
    //}
    alert(d);
    var div = document.getElementById('block');
    div.innerHTML = naam;
});

所以我不确定我们做错了什么,因为函数本身工作正常,直到它返回到html页面为止。

2 个答案:

答案 0 :(得分:0)

  

google.script.run:   返回   void - 此方法是异步的,但不是   直接回归;但是,服务器端功能可以返回一个   客户端的值作为传递给成功处理程序的参数;也,   返回类型受参数类型的限制,   除了表单元素不是合法的返回类型

你应该这样做:

var onSuccess = function(d){
    //for( var y = 0; y < d.length(); ++y){
        //var naam = data[y][1];
        //var studentnr = data[y][2];
        //var document = data[y][32];
    //}
    alert(d);
    var div = document.getElementById('block');
    div.innerHTML = naam;
}

$("#oph").click(function ophalen(){
    var s = $("#nummer").val();
    var displayEl = document.getElementById("nummer");
    var d = [];
    alert(s);
    google.script.run.withSuccessHandler(onSuccess).returnData(s);
});

答案 1 :(得分:0)

不幸的是,google.script.run的记录限制之一(自2019年3月起仍然有效)是您不能以任何方式(包括作为数组的一部分)传递Date对象。

您可以在某个范围内调用getDisplayValues()而不是getValues()来仅获取一个以字符串开头的数组,也可以通过处理getValues()数组将Date对象转换为String。