在谷歌脚本中循环

时间:2016-10-19 17:24:16

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

我正在寻找有关如何在Google脚本中运行循环的帮助,以获取我为Google表格(附加到Google表单)编写的部分功能。

这个循环的目的是做我认为可以称为反向v-lookup的东西(即'index'列位于定义范围的最左边而不是最右边)。

这是我的代码:

//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循环的代码的每一步,一切正常。如果我定义'values'的行#,它将与我的'input'进行比较并返回“BOOM!”预计时。

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

3 个答案:

答案 0 :(得分:1)

for (var i=0; i <lastRow.length; i++) { 

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

对于任何可能会回答这个问题的人来回答他们自己的问题 - 解决方案如下:

旧代码

//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)是我想要迭代的数据实际上是从电子表格开始的,但我不知道为什么这就是解决方案。欢迎思考/解释!