Google表格可安装触发器:整个功能都在try-catch内,但仍然会发生错误

时间:2019-05-15 15:36:12

标签: javascript google-apps-script google-sheets error-handling try-catch

我在try-catch中包含了一个完整的函数,但是仍然收到错误通知。

该捕获应该忽略此错误,因为它是良性的。即,在捕获错误后,我不会重新抛出该错误。

function myOnEdit(event){
  try{
    //stuff
  }catch(e){
    if((e.message).indexOf("Must be") != -1){
      return;
    }else{
      //e-mail me the error and display a user-friendly dialogue to the end user
    }
  }
}

我希望不会收到任何包含“必须”字样的错误的通知。此代码与具有数据验证功能的电子表格绑定在一起,并且所有数据验证错误均自定义为错误消息“必须”,后跟所需格式。例如,一列列出了电话号码,因此数据验证错误为“必须为###-###-####”。

相反,我收到了自动的Google电子邮件“失败摘要”,其中列出了有关这些数据验证的错误:

  

您的脚本SED代码-PRD最近未能成功完成。故障摘要如下所示。要配置此脚本的触发器,或更改您的设置以接收将来的故障通知,请单击此处。

     

该脚本由文档SED-PRD使用。

     

摘要:

     

错误消息计数

     

必须为###-###-####。 7


  

开始功能错误消息触发结束

     

19-5-14上午5:55 myOnEdit必须为###-###-####。编辑5/14/19 5:55

其他人正在使用此电子表格(我几乎不使用它-我只是技术人员),而且我无法重现此错误。大约有70个人使用它,他们也不精通技术-即使我要求他们,他们也可能不会告诉我他们正在遇到此错误。

但是,错误通知电子邮件分散了潜在的“实际”错误。因此,我不仅要关闭错误通知。

这些错误也未在Stackdriver Error Reporting中列出,这令人困惑。我知道它们正在发生的唯一原因是由于电子邮件通知。

1 个答案:

答案 0 :(得分:0)

GoogleScripts(.gs)与标准js不同。 在这种情况下,您不需要e.message。应该是:

if((e).indexOf("Must be") != -1){

如果您使用(e).indexOf,则以下测试应通过,但应以(e.message).indexOf失败:

  1. 创建一个空的电子表格并在下面添加脚本
  2. 将'onMyEdit(B1)'添加到单元格A1
  3. 在单元格A2中添加“ testfunction(B1)”
  4. 在B2中输入3
function onMyEdit(input){
  var inputString = ''+input;
  if(inputString.indexOf(3)!=-1) {
     throw "Must be";
    } else {
     Logger.log('success', input);
     return 0;
   }
}

function testfunction(cell) {
  try {
    onMyEdit(cell);
  } catch (e) {
    if((e).indexOf("Must be")!==-1) {
      return 'failure';
    }
  }
  return 'success';
}