Пользовательская функция листа Google иногда возвращает неопределенные значения - PullRequest
1 голос
/ 13 октября 2019

Я написал функцию возврата последней недельной цены закрытия в скрипте Google Sheet Apps.
Но при использовании этого в Google Sheets некоторые ячейки получают неопределенные данные. Но одни и те же ячейки иногда получают правильные значения. Не могу понять, в чем здесь проблема. Также есть ли возможность отладить мой код при выполнении функции из ячейки googlesheet?

function getWeeklyClosing(stockName){

  var date =new Date()
  var endDate = Utilities.formatDate(new Date(), "GMT+1", "yyyy/MM/dd")

  var startDate = Utilities.formatDate(new Date(date.getTime()-10*(24*3600*1000)), "GMT+1", "yyyy/MM/dd")

  var url ='https://www.quandl.com/api/v3/datasets/BSE/BOM'+stockName+'?start_date='+startDate+'&end_date='+endDate+'&collapse=weekly&api_key=3VCT1cPxzV5J4eGFwfvz';
  var options =
      {
        'muteHttpExceptions': true,
        "contentType" : "application/x-www-form-urlencoded",
        "headers":{"Accept":"application/json"}
      }; 
  var response = JSON.parse(UrlFetchApp.fetch(url, options))
  var weeklyEma=response.dataset.data[0][4];
  return weeklyEma;
}

Ответы [ 2 ]

4 голосов
/ 13 октября 2019

Этот ответ соответствует ред. Вопроса 3 с заголовком «Как использовать Promise в приложении?»

В заголовке вопроса ставится вопрос о попытках решения, а не о фактическомпроблема (проблема XY). Предположение, что UrlFetchAp.fetch является асинхронным, неверно (см. Является ли сценарий приложений Google синхронным? );настоящая проблема заключается в получении неопределенных значений в определенных ячейках.

Решение будет зависеть от того, что вы хотите сделать, когда ответ на выборку вызывает неопределенные значения. Один из вариантов - заменить неопределенные значения на "" (пустая строка) перед отправкой значений в электронную таблицу, что приведет к появлению пустой ячейки в Google Sheets.

С другой стороны, может случиться так, что запрашиваемый API не возвращает JSON, который вы думаете, поэтому сначала вы должны понять его, а затем установить правила о том, как отправить результат в электронную таблицу. как не всегда возможно преобразовать JSON в простую структуру таблицы.

3 голосов
/ 14 октября 2019

UrlFetchApp.fetch(url) возвращает объект ответа HTTP. Этот ответ включает HTTP-код ответа, который может 200 для успешной выборки, но может возвращать другие коды по нескольким причинам.

Некоторые люди в прошлом предлагали использовать алгоритм, называемый экспоненциальной отсрочкой, напримерв этом случае Сообщение об ошибке: «Не удается подключиться к Gmail» . Будьте осторожны, чтобы не превысить ограничение времени выполнения 30 секунд.

Связано

...