【问题标题】:Fetching data from external API to Google Sheets using Google Script使用 Google Script 从外部 API 获取数据到 Google 表格
【发布时间】:2020-01-05 20:12:16
【问题描述】:

我正在从外部 API 将数据提取到 Google 表格中,并且工作正常。问题是我需要做一种“循环”来带来我需要的数据。举例来说,我将 OrderId 放在一行中,脚本从 API 中获取状态。

第一行效果很好,但我应该对脚本进行哪些更改以使其更具动态性?将每行的所有数据带到“A”列?

在将数据插入工作表的脚本部分下方:

function getOrder() {

var sheet = SpreadsheetApp.getActiveSheet()
var order = sheet.getRange(3,1).getValue()  
var url = ("https://myendpoint.com/orders/"+order);

try
{
  var response = UrlFetchApp.fetch(
    url,
    {
      "headers":{
        "Accept":"application/json"
      }
    }
  );

  var fact = response.getContentText();
  var data = JSON.parse(fact);

  Logger.log(data["status"]);
  sheet.getRange(3,2).setValue(data["status"]);
}
catch(error)
{ 
  Logger.log(error);
  sheet.getRange(3,2).setValue("Error"); 
}

我不是开发人员,所以我正在努力让它发挥作用 =) 感谢帮助

【问题讨论】:

  • 您好,我不确定我是否理解您的问题。当您说“第一行效果很好”时,您指的是range(3,2)吗?那么data["status"] 的每个值都取决于每行 A 列中的值?此外,分享您的工作表示例会非常有帮助。
  • 嗨@Jescanellas!是的,你明白我的意思。 data["status"] 的每个值取决于每行 A 列中的值。 A列我输入orderId(3,1)和B列我返回取决于每一行的结果(OrderStatus)。我认为我需要在脚本中创建一种循环或其他东西以使其适用于整个列.这是表格:docs.google.com/spreadsheets/d/… 感谢您的帮助
  • 我已经用我正在使用的完整脚本更新了线程;)

标签: google-apps-script google-sheets


【解决方案1】:

感谢您的回复。如您所料,这可以通过循环来解决。在这种情况下,for 非常适合,因为它意味着“一遍又一遍地运行相同的代码,每次都使用不同的值。”你可以阅读它们 here

  1. 首先我们得到last row 工作表的(我假设工作表只包含你的数据 显示)。
  2. 使用 getValues 将订单 ID 存储在二维数组中,因为 getValue 仅获取 Range 左上角单元格的值。
  3. 每次在for 循环内声明url 变量。如您所见,我使用的是orders[i][0],其中i 是行,0 是列。如果您也使用了 B 列,则下一列将是 1。这个“2D”数组的表示:

function getOrder(){


  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow(); //Value is 15
  var orders = sheet.getRange(3, 1, lastRow - 2).getValues(); //Deduce 2, as it gets the values from Row 3 + 15 rows.


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

    var url = ("https://myendpoint.com/orders/"+orders[i][0]);

    try 
    {
      var response = UrlFetchApp.fetch(
        url,
        {
          "headers":{
            "Accept":"application/json"
          }
        }
      );

      var fact = response.getContentText();
      var data = JSON.parse(fact);

      Logger.log(data["status"]);
      sheet.getRange(i+3, 2).setValue(data["status"]);

    } 
    catch(error)
    {
      Logger.log(error);
      sheet.getRange(i+3, 2).setValue("Error");
    }

  }
}

其余代码几乎相同,除了 setValue,我们使用 i 迭代器写入正确的行。我们添加 3,因为数组索引从 0 开始,但数据从第 3 行开始。

希望这会有所帮助!

【讨论】:

  • 非常感谢您的代码和解释,@Jescanellas =) 它与这些更改完美配合.. 救了我的命!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多