我正在寻找有关如何在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循环的特殊性都非常感谢!
答案 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)是我想要迭代的数据实际上是从电子表格开始的,但我不知道为什么这就是解决方案。欢迎思考/解释!