Я получаю сообщение об ошибке сервера из google-apps-script, как мне выяснить причину этого? - PullRequest
2 голосов
/ 16 апреля 2020

Я учу себя app-script и создал простую функцию для удаления строки в случае ошибки. Вот код:

//GLOBALS
 
var SS = SpreadsheetApp.openById("the_sheet_ID"); //just a placeholder because I didn't want to post the real ID
var SHEET = SS.getSheetByName("300x250");
var RANGE = SHEET.getDataRange();
 
 
var DELETE_VAL = "#N/A";
var COL_TO_SEARCH = 2; // The column to search for the DELETE_VAL (Zero is first)
 
  
function deleteEachRow(){
  
  var rangeVals = RANGE.getValues();
  
  //Reverse the 'for' loop.
  for(var i = rangeVals.length-1; i >= 0; i--){
    if(rangeVals[i][COL_TO_SEARCH] === DELETE_VAL){
      
      SHEET.deleteRow(i+1); 
    };
  };
};

Я получаю электронные письма от скрипта приложения, в которых сообщается, что произошла ошибка сервера. Ниже приведена копия электронного письма:

Ваш скрипт, Deleting_Rows, недавно не смог успешно завершиться. Краткое описание неисправностей показано ниже. Чтобы настроить триггеры для этого сценария или изменить настройки получения уведомлений о будущих ошибках, нажмите здесь.

4/16/20 1:27 deleteEachRow К сожалению, произошла ошибка сервера. Пожалуйста, подождите немного и попробуйте снова. основанный на времени 16.04.20 1:27

С уважением,

Скрипт Служб Google

Функция рассчитана на запуск каждую минуту, поэтому обычно исправляет себя. Я видел эту проблему для триггеров от удаленных функций или для сломанной ссылки нажмите здесь, но моя функция не удалена, и ссылка работает. Я не смог найти никакой информации о том, что является причиной ошибки, как ее исправить, если ошибка связана с моим кодом или серверами Google. Любая информация или понимание кого-либо было бы очень полезно!

1 Ответ

0 голосов
/ 17 апреля 2020

Поскольку это sporadi c ошибка сервера, вы можете обойти ее, перехватив ошибку с помощью оператора try / catch и, в случае ошибки, попробуйте выполнить код после небольшого ожидания с sleep функция, код будет выглядеть так:

function deleteEachRow(){
  var i= 0;
  while(i < 3) {
    try {
      //GLOBALS
      var SS = SpreadsheetApp.openById("1e-JtL0KacshxjWMRSIwwCzHeg0oj7OtzIw_-m_VV8HQ"); //just a placeholder because I didn't want to post the real ID
      var SHEET = SS.getSheetByName("300x250");
      var RANGE = SHEET.getDataRange();

      var DELETE_VAL = "#N/A";
      var COL_TO_SEARCH = 2; // The column to search for the DELETE_VAL (Zero is first)
      var rangeVals = RANGE.getValues();

      //Reverse the 'for' loop.
      for(var i = rangeVals.length-1; i >= 0; i--){
        if(rangeVals[i][COL_TO_SEARCH] === DELETE_VAL){

          SHEET.deleteRow(i+1); 
        };
      };
      // If it gets here, there were no errors
      break;
    }
    catch(e) {
      sleep(5000);
      i++;
    }     
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...