【问题标题】:looping in google script在谷歌脚本中循环
【发布时间】:2016-10-19 17:24:16
【问题描述】:

我正在寻求有关如何在 Google 脚本中为我正在为 Google 工作表(附加到 Google 表单)编写的部分功能运行循环的帮助。

此循环的目的是执行我认为可以称为反向 v 查找的操作(即“索引”列位于定义范围的最左侧而不是最右侧)。

这是我的代码:

//Formula to align email addresses with ticket number
function getTicketNumber(input) {

//Step 1: define spreadsheet and select sheet
  var sp = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = sp.getSheetByName("LMS-emails");

//Step 2: define sheet range
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();  
var range = sheet.getRange(1,1,lastRow,lastColumn)
var values = range.getValues();

//Step 3: forumla   
  for (var i=0; i <=lastRow; i++) { 
    if (values[i][3] == input) {
      return "BOOM!";}
    else {return "fizzle..."}
  }

}

我已经检查了导致 for 循环的代码的每个步骤,并且一切正常。如果我定义“值”的行号,它将与我的“输入”进行比较并返回“BOOM!”当预期。

但是,当我运行包含 for 循环的函数时,该函数既不返回“BOOM!”也不是“失败……”;单元格只是空白。任何关于我做错了什么或在 Google 脚本中运行 for 循环的特殊性的想法都非常感谢!

【问题讨论】:

    标签: javascript google-apps-script google-sheets google-sheets-api


    【解决方案1】:
    for (var i=0; i <lastRow.length; i++) { 
    

    var lastRow = sheet.getLastRow() 是一个整数,整数的长度是未定义的,因此它永远不会进入 for 循环。 尝试在函数末尾添加 return "zzz"。查看 zzz 是否显示在工作表中,然后从那里返回,使用 Logger 和执行记录来查看发生了什么

    【讨论】:

    • 谢谢!您可以在下面看到我对另一个答案的评论...我已将 for 循环中的第二个语句更正为:“ i
    • 这就是 Logger 的帮助所在。或返回值,以便您了解比较出错的原因。您需要在函数中创建自己的反馈并在此基础上解决它。
    • 嗨贾斯珀 - 谢谢。使用 Logger 正是我所需要的。非常感谢自学成才的新手。
    【解决方案2】:

    getLastRow() 返回工作表中包含内容的最后一行的位置。如果您有 10 行内容,这将返回 9 并将其分配给 lastRow

    您的问题在于您的 for 循环条件:i &lt; lastRow.length。您没有将 i 与工作表中的行数进行比较 - 您能弄清楚这里到底出了什么问题吗?

    【讨论】:

    • 啊!谢谢 - 愚蠢的错误。我已将 for 循环更新为:
    • 对不起 - 按错键 - 无论如何,我的 for lop 现在显示为: for (var i=0; i
    【解决方案3】:

    对于任何可能会查看此问题以回答自己的问题的人 - 解决方案如下:

    旧代码

    //Step 3: forumla   
      for (var i=0; i <=lastRow; i++) { 
        if (values[i][3] == input) {
          return "BOOM!";}
        else {return "fizzle..."}
      }
    

    新代码

     //Step 3: forumla   
      for (var i=2; i <=lastRow; i++) { 
        if (values[i][3] == input) {
          return "BOOM!";}
        else {return "fizzle..."}
      }
    

    第 3 行(新代码中的 i=2)是我想要迭代的数据实际上在电子表格中开始的位置,但我不知道 为什么 那是解决方案.欢迎提出想法/解释!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 2021-12-28
      • 2020-03-16
      相关资源
      最近更新 更多