javascript - 如何将 API 响应映射到 Google Sheet

标签 javascript arrays google-apps-script google-sheets javascript-objects

我并不是真正的技术人员,但我呆在家里一直在尝试学习 JavaScript 代码,并决定在 API 上尝试一下。我已经能够成功进行 API 调用并将响应保存在数组中,但发现将结果设置到谷歌表是一个挑战。我将不胜感激任何帮助。这是我的代码。

API 调用:

var call_token = 'token';
var endpoint =  'projects?'; 
var call_url = 'url'
var pages = 2500



function get_All_Projects() {

var options = {
    method: 'get',
    headers: {
      Authorization: 'Bearer ' + call_token
    }
  };
var url = call_url + endpoint +'auth='+ call_token + pages
var 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);

    }

}

postman 的响应示例

"data": [
        {
            "id": 1800301,
            "name": "TEST Project ONE",
            "ends_at": "2020-06-30",
            "starts_at": "2017-07-03",
            "project_state": "Confirmed",
            "tags": {
                "paging": {
                    "self": "/api/v1/projects/1894300/tags?per_page=0&page=1",
                    "next": null,
                    "previous": null,
                    "page": 1,
                    "per_page": 0
                },
                "data": []
            }
        },
        {
            "id": 1800301,
            "name": "TEST Project4 TWO",
            "ends_at": "2020-06-30",
            "starts_at": "2017-07-03",
            "project_state": "Confirmed",
            "tags": {
                "paging": {
                    "self": "/api/v1/projects/1894301/tags?per_page=0& page=1",
                    "next": null,
                    "previous": null,
                    "page": 1,
                    "per_page": 0
                },
                "data": []
            };

最佳答案

问题:

return关键字结束当前函数的执行。因此,从 get_All_Projects() 返回的是什么?不是数组 project_arr ,但是对象字面量 identity ,具有 info.data 中第一个元素的属性:函数在第一次迭代中返回(第一次找到 return 关键字)。该对象没有长度函数,因此 info.length未定义。当尝试将其与 j < info.length 中的数字 0 进行比较时,它返回 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.data在声明project_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);

引用:

关于javascript - 如何将 API 响应映射到 Google Sheet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61255201/

相关文章:

javascript - 如何在 Javascript 中计算对象数组内的值?

c++ - 在 C++ 中循环遍历 3d 索引的 1d 数组

javascript - 从名字中获取数字

javascript - 如何为其他用户远程启用/禁用 tampermonkey 脚本

javascript - 从 db 调用返回对象

javascript - 与Jquery不同,屏幕宽度为1050px时移除class

Java 检查 array[] 项是否存在

.net - IDisposable : Method 'X' has multiple definitions with identical signatures

javascript - 如何在谷歌应用程序脚本中使用javascript从谷歌电子表格数据库获取日期值

google-apps-script - 左侧转移无效。 (第 1 行, "Tests"文件)