Извлечение данных из внешнего API в Google Sheets с помощью Google Script - PullRequest
0 голосов
/ 05 января 2020

Я извлекаю данные из внешнего API в Google Sheet, и он работает нормально. Проблема в том, что мне нужно сделать что-то вроде «l oop», чтобы получить нужные мне данные. В качестве примера, я поместил OrderId в строку, и сценарий возвращает статус из API.

Он отлично работает с первой строкой, но что я должен изменить в своем сценарии, чтобы сделать его более динамичным c? Привести все данные из каждой строки в столбце «А»?

Ниже фрагмента скрипта, который вставляет данные в лист:

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"); 
}

Я не разработчик, поэтому я я изо всех сил пытаюсь заставить это работать =) Ценю помощь

1 Ответ

0 голосов
/ 07 января 2020

Спасибо за ваш ответ. Как вы уже догадались, это можно решить с помощью al oop. В этом случае for идеально подходит, так как он " запускает один и тот же код снова и снова, каждый раз с другим значением. " Вы можете прочитать о них здесь .

  1. Сначала мы получаем последнюю строку листа (я предполагаю, что Лист содержит только те данные, которые вы показали).
  2. Использование getValues для сохранения идентификаторов заказа в двумерном массиве, поскольку getValue получает только значение верхней левой ячейки диапазона.
  3. Объявляйте переменную url каждый раз внутри for l oop. Как видите, я использую orders[i][0], где i - строка, а 0 - столбец. Если вы также использовали столбец B, следующий столбец будет 1. Представление этого "2D" массива:

enter image description here

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.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...