return语句完成函数的执行并退出
我有这样的代码,如果项目符合条件(在两个日期之间(,它会从google工作表中获取项目ID,并将其用于API以获取项目中的用户。之后,getTeam函数将响应(Team(附加到工作表中。我面临的挑战是,我无法在getTeam函数中将所有用户附加到工作表中。我在readDates中没有很好地构建循环。我将帮助构建代码,让所有用户都能进入工作表。
function readDates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range1 = sheet.getRange("C2:C" + sheet.getLastRow()).getValues();
var searchString = "Project";
var ahead = nextweek()
var behind = lastweek()
var team_array = [];
for (var i = 0; i < range.length; i++) {
if (range1[i][0] >= behind && range1[i][0] <= ahead) {
var lastRow = sheet.getRange(2 + i, 1, 1, 8).getValues();
var dateval = lastRow[0][2]
var data = {
'project_id': lastRow[0][3] // There are 6 projects ID meeting criteria, each project has 7 users
};
var options = {
method: 'get',
headers: {
Authorization: 'Bearer ' + token
}
};
var url = tknurl + Endpoint + data.project_id + '/users?auth=' + token
var response = UrlFetchApp.fetch(url, options);
var team = JSON.parse(response);
var content = team.data;
team_array.push(content);
}
}
return(content)
}
getTeam函数。我只得到一个项目的用户,而不是所有6个项目
function getTeam() {
var ss = SpreadsheetApp.getActive().getSheetByName('Team');
var Pro_data = readDates()
for (var j = 0; j < Pro_data.length; j++) {
ss.getRange(2 + j, 1).setValue(Pro_data[j].id);
ss.getRange(2 + j, 2).setValue(Pro_data[j].first_name);
ss.getRange(2 + j, 3).setValue(Pro_data[j].last_name);
ss.getRange(2 + j, 4).setValue(Pro_data[j].display_name);
ss.getRange(2 + j, 5).setValue(Pro_data[j].email);
ss.getRange(2 + j, 6).setValue(Pro_data[j].user_type_id);
ss.getRange(2 + j, 7).setValue(Pro_data[j].role);
}
}
- 在
for
循环中使用return(content)
- 因此,函数将在第一次迭代后退出
- 相反,您应该创建一个数组,在每次迭代中将每个项目的数据附加到该数组中
- 返回退出
for
循环后包含所有数据的数组
样本:
...
var myArray = [];
for (var i = 0; i < range1.length; i++) {
...
var content = team.data;
myArray.push(content);
...
}
return content;
...
旁注:
您可以替换嵌套的if语句
if (range1[i][0] >= behind) {
if (range1[i][0] <= ahead) {
...
}
}
通过一个组合:
if (range1[i][0] >= behind && range1[i][0] <= ahead) {
...
}
您只返回readDates函数中的第一个结果。您的返回指令在循环中,您需要在某个地方聚合所有结果,您可以在执行返回之前使用数组。
var contents = [];
for (var i = 0; i < range.length; i++) {
...
contents.push(content);
} //close if2
} //close if1
}//close for
return contents;