Javascript 在设置API响应中的值时,如何避免覆盖google工作表中的行
我有一个JavaScript代码,可以从API获得响应,并在google电子表格上设置值 我得到的数据是一个项目的用户,我需要将其记录到电子表格中的表格中 我需要帮助的唯一挑战是避免在后续循环中覆盖现有图纸数据,我如何处理 第一部分获取项目代码并使用它进行API调用,其中所有项目的团队都包含在响应中Javascript 在设置API响应中的值时,如何避免覆盖google工作表中的行,javascript,loops,google-apps-script,google-sheets,Javascript,Loops,Google Apps Script,Google Sheets,我有一个JavaScript代码,可以从API获得响应,并在google电子表格上设置值 我得到的数据是一个项目的用户,我需要将其记录到电子表格中的表格中 我需要帮助的唯一挑战是避免在后续循环中覆盖现有图纸数据,我如何处理 第一部分获取项目代码并使用它进行API调用,其中所有项目的团队都包含在响应中 function readDates() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getAc
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 < range1.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]
};
var options = {
method: 'get',
headers: {
Authorization: 'Bearer ' + AUTH
}
};
var url = tknurlL + Endpoint + data.project_id + '/users?auth=' + AUTH
var response = UrlFetchApp.fetch(url, options);
var team = JSON.parse(response);
var content = team.data;
team_array.push(content);
var ss = SpreadsheetApp.getActive().getSheetByName('Team');
const lr = sheet.getLastRow();
for (var j = 0; j < content.length; j++) {
ss.getRange(2 + j, 1).setValue(content[j].id);
ss.getRange(2 + j, 2).setValue(content[j].first_name);
ss.getRange(2 + j, 3).setValue(content[j].last_name);
ss.getRange(2 + j, 4).setValue(content[j].display_name);
ss.getRange(2 + j, 5).setValue(content[j].email);
ss.getRange(2 + j, 6).setValue(content[j].user_type_id);
ss.getRange(2 + j, 7).setValue(content[j].role);
}
}
}
}
函数readDates(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getActiveSheet();
var range1=sheet.getRange(“C2:C”+sheet.getLastRow()).getValues();
var searchString=“项目”;
var ahead=nextweek()
var behind=lastweek()
var team_数组=[];
对于(变量i=0;i 如果(range1[i][0]>=在后面&&range1[i][0]这个修改怎么样
修改点:
- 在脚本中,每次循环中都使用相同的
getRange(2+j,1)
范围作为开始范围。这样,新的内容就会覆盖这些值
- 在此修改中,删除了
内容
的for循环,并将值放在for循环的外部。检索到的内容
被添加到第一个for循环中的内容
数组中。这样,所有内容
值(内容
)可以通过setValues
将其放入Team
的工作表中,并且可以稍微降低流程成本
修改脚本:
修改脚本时,请按以下方式修改
发件人:
var团队_数组=[];
对于(变量i=0;i=后面和后面的range1[i][0]=后面和后面的range1[i][0]0){
var dstSheet=SpreadsheetApp.getActive().getSheetByName('Team');
var values=contents.map(e=>([e.id,e.first\u name,e.last\u name,e.display\u name,e.email,e.user\u type\u id,e.role]);
dstSheet.getRange(2,1,values.length,values[0].length).setValues(values);
}
参考:
您能提供一份经过消毒的示例表吗?@willy感谢您的回复。我很高兴您的问题得到了解决。
var team_array = [];
for (var i = 0; i < range1.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]};
var options = {method: 'get',headers: {Authorization: 'Bearer ' + AUTH}};
var url = tknurlL + Endpoint + data.project_id + '/users?auth=' + AUTH
var response = UrlFetchApp.fetch(url, options);
var team = JSON.parse(response);
var content = team.data;
team_array.push(content);
var ss = SpreadsheetApp.getActive().getSheetByName('Team');
const lr = sheet.getLastRow();
for (var j = 0; j < content.length; j++) {
ss.getRange(2 + j, 1).setValue(content[j].id);
ss.getRange(2 + j, 2).setValue(content[j].first_name);
ss.getRange(2 + j, 3).setValue(content[j].last_name);
ss.getRange(2 + j, 4).setValue(content[j].display_name);
ss.getRange(2 + j, 5).setValue(content[j].email);
ss.getRange(2 + j, 6).setValue(content[j].user_type_id);
ss.getRange(2 + j, 7).setValue(content[j].role);
}
}
}
var contents = []; // Added
var team_array = [];
for (var i = 0; i < range1.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]};
var options = {method: 'get',headers: {Authorization: 'Bearer ' + AUTH}};
var url = tknurlL + Endpoint + data.project_id + '/users?auth=' + AUTH
var response = UrlFetchApp.fetch(url, options);
var team = JSON.parse(response);
var content = team.data;
team_array.push(content);
contents = contents.concat(content); // Added
}
}
// I added below script.
if (contents.length > 0) {
var dstSheet = SpreadsheetApp.getActive().getSheetByName('Team');
var values = contents.map(e => ([e.id, e.first_name, e.last_name, e.display_name, e.email, e.user_type_id, e.role]));
dstSheet.getRange(2, 1, values.length, values[0].length).setValues(values);
}