为什么这个for循环在Google脚本中不起作用

时间:2016-08-11 16:51:33

标签: javascript google-apps-script

我根据此处的代码编写了以下循环:

How do I iterate through table rows and cells in javascript?

function myRowLooper() {
var inputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('INPUT');
var inputRange = inputSheet.getRange(2,inputSheet.getLastColumn(),inputSheet.getLastRow());

    for (var i = 0, row; row = inputRange.rows[i]; i++) {
       Logger.log(row);
         for (var j = 0, col; col = row.cells[j]; j++) {
          Logger.log(col);
  }  
 }
}

但是当我将它应用到Google脚本时会抛出错误:" TypeError:无法读取属性" 0"来自undefined。"

造成这种情况的原因是什么?

2 个答案:

答案 0 :(得分:0)

因为您无法从inputRange.rows [i]'中获取任何价值。

您可以这样做:

function myRowLooper() {
  var inputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');  
  for(var i = 1; i<=inputSheet.getLastRow(); i++){
    for(var j = 1; j<=inputSheet.getLastColumn(); j++){
      var cell = inputSheet.getRange(i,j).getValue();
      Logger.log(cell);
    }
  }
}

希望这会对你有所帮助。

感谢。

答案 1 :(得分:0)

你的代码非常草率。您正在尝试组合变量并不必要地压缩,这会导致代码中的错误。添加&#34;效率&#34;没有用处。如果它导致错误和错误。

尝试这样的事情 -

function yourFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Name");
  var lastRow = sheet.getLastRow();
  var lastColumn = sheet.getMaxColumns();
  var conditionToCheckColumn = (lastColumn - 1);
  var conditionRange = sheet.getRange(2, checkColumn, (lastRow - 1), 1);
  var check = checkRange.getValues();
  for (var i = 0; i < check.length; i++) {
    if (check[i] == condition) {
      continue;
    } else {
      //your code here
    }
  }
}

这将拉出一个范围,您可以检查它的值/条件,如果匹配,它什么都不做。如果不匹配,它将执行代码。然后它将循环到下一行,直到检查范围中包含数据的最后一行。

警告 - 尽管单元格明显为空,但函数仍计为数据。如果你的工作表使用像= QUERY这样的函数,除非你的= QUERY(或其他fx())具有特定的上限,否则你将拥有一个无限循环的代码。