В скрипте Google Sheets периодически появляется ошибка #NAME? - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть скрипт в Google Sheets, который планируется запускать каждый час. Сценарий иногда запускается успешно, но он заканчивается с #NAME? ошибка в других случаях.

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

function recordHistory() {
SpreadsheetApp.flush();
Utilities.sleep(99000);  //just trying a long wait to see if that works
var ss = SpreadsheetApp.getActiveSpreadsheet();
var portfolioSheet = ss.getSheetByName("Portfolio");
var historySheet = ss.getSheetByName("Portfolio History");
var data = [      
    Date(),
    portfolioSheet.getRange('C36').getValue(),
    portfolioSheet.getRange('H36').getValue(),
    portfolioSheet.getRange('A100').getValue(),
    'plaintext'
]
historySheet.appendRow(data);
};

Есть мысли?

1 Ответ

1 голос
/ 02 марта 2020

Вы можете попробовать сделать вызовы API и получить ответ перед копированием значений

Пример:

function forTheBooks() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var portfolioSheet = ss.getSheetByName('Portfolio');
  var historySheet = ss.getSheetByName("Portfolio History");

  // Make API call & put values in "Portfolio" sheet.
  var api_content = UrlFetchApp.fetch('https://restframework.herokuapp.com/users/?format=json').getContentText();
  portfolioSheet.getRange('A1').setValue(api_content);

  // Make another API call & put more values in "Portfolio" sheet.
  api_content = UrlFetchApp.fetch('https://restframework.herokuapp.com/snippets/?format=json').getContentText();
  portfolioSheet.getRange('A2').setValue(api_content);

  var data = [      
    Date(),
    portfolioSheet.getRange('A1').getValue(),
    portfolioSheet.getRange('A2').getValue(),
    'plaintext'
  ]
  historySheet.activate().appendRow(data);
}

Таким образом, код, который копирует эти значения в лист истории, фактически ожидает ответ API первым.

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