Как решить значение #N/A с помощью функции Google Sheet =importxml

У меня есть лист, который хочет импортировать значение результата поиска Google с помощью функции importxml. Иногда я получаю #N/A в ячейке A2.

Я использовал цикл while, чтобы продолжать пытаться получить данные, и все же я не получаю данные, даже если жду долгое время. Можно ли настроить таймер JavaScript так, чтобы он работал до тех пор, пока я не получу значение в ячейке A2, а затем таймер остановится и позволит продолжить выполнение остального кода?

Что делать, чтобы избежать подобных случаев и всегда получать значение по ячейке А2? Любое альтернативное решение?

  var queryString = Math.random();

  var cellFunction1 = '=IMPORTXML("' + SpreadsheetApp.getActiveSheet().getRange('C2').getValue() + '&randomNumber=' + queryString + '","'+ SpreadsheetApp.getActiveSheet().getRange('D2').getValue() + '")';
  SpreadsheetApp.getActiveSheet().getRange('A2').setValue(cellFunction1);

  var stop = 0;
  while (SpreadsheetApp.getActiveSheet().getRange('A2').getValue() === "#N/A" && stop++<10) {
            Utilities.sleep(5000);
            var queryString3 = Math.random();
          var cellFunction1 = '=IMPORTXML("' + SpreadsheetApp.getActiveSheet().getRange('C2').getValue() + '&randomNumber=' + queryString3 + '","'+ SpreadsheetApp.getActiveSheet().getRange('D2').getValue() + '")';
          SpreadsheetApp.getActiveSheet().getRange('A2').setValue(cellFunction1);
      }

person user1788736    schedule 17.10.2015    source источник
comment
Что у вас есть в C2 и D2?   -  person Mogsdad    schedule 17.10.2015


Ответы (1)


Я столкнулся с той же проблемой. Я подозреваю, что это потому, что код пытается получить .getValue из ячеек до того, как значения ячеек будут обновлены из IMPORTXML.

Мой обходной путь состоял в том, чтобы написать две отдельные функции, одну для принудительного обновления IMPORTXML, а другую для записи данных на лист. Затем я дал IMPORTXML триггер для запуска каждые 5 минут, а затем функцию записи с собственным триггером.

Возможно, вы захотите попробовать это:

function refresher() {
  var ss = SpreadsheetApp.getActiveSheet();
  var sheet = ss.getSheetById("input");
  // Cell input!A2 holds the formula '=IMPORTXML(A1, XMLpath)'
  //So now we give input!A1 a URL with a random ?number behind...
  //...to force IMPORTXML to refresh
  sheet.getRange(1, 1)
    .setValue("http://www.urlWhereInfoResides.com/?" + Math.floor(Math.random() * 40));
}

^ Дайте refresh() триггер для запуска каждые 5 минут

function writer() {
  var ss2 = SpreadsheetApp.getActiveSheet();
  //assumes desired value sits in cell input!A2
  var input = ss2.getSheetById("input")
    .getRange(2, 1)
    .getValue();
  //adds input value into a new row in output sheet
  var outputSheet = ss2.getSheetById("output");
  var output = outputSheet.getRange(outputSheet.getLastRow() + 1, 1)
    .setValue(input);
}

^ Дайте Writer() триггер, который будет запускаться каждые 5 минут или сколько угодно раз.

person dzorug    schedule 19.10.2015