我们遇到了问题。我们现在的代码工作,但我们无法让数组在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页面为止。
答案 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。