无法返回数组 [Google 应用脚本]

Mar*_*Nab 3 html javascript arrays jquery google-apps-script

我们出现了问题。我们现在的代码可以工作,但是我们无法让数组返回到 html 页面上。我们从 html 页面发送一个数字,然后 returnData 函数发生。当它运行时,它会经过loopsheetGewoon,然后返回一个数组。将数组返回给returnData,函数以数组的返回结束。

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

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;        
        }    
    }
}
Run Code Online (Sandbox Code Playgroud)

下面是启动的功能。

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;
}
Run Code Online (Sandbox Code Playgroud)

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

$("#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;
});
Run Code Online (Sandbox Code Playgroud)

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

小智 7

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

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