我根据此处的代码编写了以下循环:
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。"
造成这种情况的原因是什么?
答案 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())具有特定的上限,否则你将拥有一个无限循环的代码。