为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 API 响应映射到 Google 表格

如何将 API 响应映射到 Google 表格

婷婷同学_ 2022-07-01 16:58:59
我不是一个真正的技术人员,但我一直在尝试学习 JavaScript 代码,因为我待在家里并决定在 API 上尝试一下。我已经能够成功地进行 API 调用并将响应保存在一个数组中,但发现将结果设置为谷歌表是一个挑战。我将不胜感激这方面的任何帮助。这是我的代码。API调用:var call_token = 'token';var endpoint =  'projects?'; var call_url = 'url'var pages = 2500function get_All_Projects() {var options = {    method: 'get',    headers: {      Authorization: 'Bearer ' + call_token    }  };var url = call_url + endpoint +'auth='+ call_token + pagesvar response = UrlFetchApp.fetch(url,options); var info= JSON.parse(response); var content = info.data;var project_arr=[];var identity={}if(content.length > 0 ){for (var i = 0; i<content.length; i++) {      identity.Project_ID=content[i].id      identity.Project_Name=content[i].name      identity.Project_Start_Date=content[i].starts_at      identity.Project_End_Date=content[i].ends_at      identity.Project_Status=content[i].project_state project_arr.push(identity)   return (identity); Logger.log(project_arr) } }}这就是我将它传递给谷歌表的挑战。我没有收到任何错误,但我没有看到数据被附加到工作表中。function getSheet() {    var info = get_All_Projects()    var ss = SpreadsheetApp.getActiveSpreadsheet();    var sheet = ss.getActiveSheet();    for (var j = 0; j < info.length; j++) {        sheet.getRange(2 + j, 1).setValue(info[j].Project_Status);        sheet.getRange(2 + j, 2).setValue(info[j].Project_End_Date);        sheet.getRange(2 + j, 3).setValue(info[j].Project_Start_Date);        sheet.getRange(2 + j, 4).setValue(info[j].Project_ID);        sheet.getRange(2 + j, 5).setValue(info[j].Project_Name);    }}
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

问题:

return关键字结束当前函数执行。因此,返回get_All_Projects()的不是数组project_arr,而是对象字面identity量,其中第一个元素的属性是info.data:函数在第一次迭代时返回(第一次找到return关键字时)。这个对象没有长度函数,所以info.length是未定义的。当尝试将此与 中的数字 0 进行比较时j < info.length,它返回 false,因此代码永远不会进入 中的for循环getSheet()。因此,没有值被写入工作表。


解决方案:

return关键字应该用于在循环结束后返回数组,project_arr以便for它具有来自 的所有数据info.data,如下所示:


for (var i = 0; i<content.length; i++) {

  // Code inside for

}

return project_arr

删除无用代码:

现在,您正在创建一个新数组 ( project_arr),info.data其中基本上具有相同的信息。为此,您将遍历所有项目并将元素逐个info.data推送到。project_arr这样做没有意义。您可以info.data这样做直接使用:


通过在声明之前get_All_Projects()返回来结束函数:info.dataproject_arr

return info.data;

在getSheet()中,更改要写入工作表的属性:

sheet.getRange(2 + j, 1).setValue(info[j].project_state);

sheet.getRange(2 + j, 2).setValue(info[j].ends_at);

sheet.getRange(2 + j, 3).setValue(info[j].starts_at);

sheet.getRange(2 + j, 4).setValue(info[j].id);

sheet.getRange(2 + j, 5).setValue(info[j].name);


查看完整回答
反对 回复 2022-07-01
  • 1 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号