首页 > 解决方案 > 我从 google-apps-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,最近未能成功完成。故障摘要如下所示。要为此脚本配置触发器,或更改您的设置以接收未来的失败通知,请单击此处。

20 年 4 月 16 日凌晨 1:27 deleteEachRow 很抱歉,发生服务器错误。请稍等,然后重试。基于时间的 20 年 4 月 16 日凌晨 1 点 27 分

真挚地,

Google Apps 脚本

该函数定时为每分钟运行一次,因此它通常会自行修复。我已经看到这个问题来自已删除函数的触发器,或者损坏的单击此处链接,但我的函数没有被删除,并且链接有效。如果错误与我的代码或谷歌的服务器有关,我无法找到有关导致错误的原因、如何修复它的任何信息。任何人拥有的任何信息或见解都会非常有帮助!

标签: javascriptgoogle-apps-scriptserviceserverserver-error

解决方案


由于这是一个偶发的服务器错误,您可以通过使用 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++;
    }     
  }
};

推荐阅读