【问题标题】:Loop in Google Apps Script, handle an error, fatal error, stops the script, loop stops在 Google Apps 脚本中循环,处理错误,致命错误,停止脚本,循环停止
【发布时间】:2017-08-15 05:55:34
【问题描述】:

我正在使用 Google Apps 脚本

我有一个 Google 表格,其中第 1 列有 120 个域名(120 行),我需要在第 7 列中将这些域的状态写为“域已验证”/“域未验证”

我编写了一个脚本,该脚本使用 Admin Directory API 服务并使用 AdminDirectory.get.domains.verified 生成布尔值(True = 域已验证,False = 域未验证)来检查域的状态以查看它们是否在 google 中经过验证的域。

我下面的脚本工作得很好,它检查每个域名行并将状态放在第 7 列中,但问题是我的循环一旦涉及尚未在 Google 中注册的任何域就会停止,在日志中显示“执行失败:未找到域。(第 36 行,文件“代码”)[1.412 秒总运行时间]”

无论结果如何,我都希望它运行到最后一行(第 120 行)。

我真正想要的是,无论结果如何,我的循环都应该覆盖所有 120 行,你能帮忙吗?

这是我的脚本-:

function domainList() {

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getActiveSheet()
  var data = sheet.getRange("B2:B").getValues()
  var customer = "my_customer"

  for(i=0; i<data.length; i++){
    var dcheck = AdminDirectory.Domains.get(customer, data[i]);

    var status = dcheck.verified
    if(status === true){
      status = "Domain Verified"}
    else if(status === false){
    status = "Domain Not Verified"}
    else if(status === ({})){
      continue;
    }

    Logger.log(status)

    var range = ss.getSheets()[0].getRange(2+i, 7).clear()

 var range = ss.getSheets()[0].getRange(2+i, 7)
    range.setValue(status)
  }}

【问题讨论】:

    标签: javascript loops for-loop google-apps-script


    【解决方案1】:

    您可以尝试将一些代码放入try/catch,如果有错误,只需继续循环:

    try {
      var dcheck = AdminDirectory.Domains.get(customer, data[i]);
    
      if (dcheck) {//Check for truthy value
        var status = dcheck.verified;
      } else {
        continue;//If "get" returned a falsy value then continue
      }
    } catch(e) {
      continue;//If error continue looping
    }
    

    【讨论】:

      【解决方案2】:

      这是做同样事情的另一种方式。我不清楚这个if(status === ({})) 是什么,所以我认为让第三种选择不那么狭窄可能会很有趣,因为如果它预期是布尔值并且它既不是真也不是假,那么我不清楚还有什么是左边。这可能需要一段时间,但我会尝试使用调试器来运行它。但我对 AdminDirectory 不熟悉,所以我有点猜测。

      function domainList() 
      {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getActiveSheet();
        var data = sheet.getRange("B2:B").getValues();
        var customer = "my_customer";
        var value = '';
        for(i=0; i<data.length; i++)
        {
          value = '';
          var dcheck = AdminDirectory.Domains.get(customer, data[i]);
          var status = dcheck.verified;
          switch(status)
          {
            case true:
              value = 'Domain Verified';
              break;
            case false:
              value = 'Domain Not Verified';
              break;
            default:
              value = 'unknown';    
          }
          Logger.log(status);
          var range = ss.getSheets()[0].getRange(2+i, 7)
          range.clear();
          range.setValue(value);
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-23
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        相关资源
        最近更新 更多