首页 > 解决方案 > Google Apps 脚本在 for 循环中神秘地停止运行

问题描述

我正在构建一个系统来将数据从一张纸复制到另一张纸(在不同的电子表格上)。它运行良好,直到它应该复制数据。之后,它什么也不做。for不会抛出错误,但不会在循环中弹出警告框。这是我的代码:

function onEdit() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var master = SpreadsheetApp.openById('13x7AvyYTaocCVBxVZ3ckBjzgxcZfjg9RYM1cE_0VNbU');
  var sheets = master.getSheets();
  var test = DriveApp.createFile('Test', 'fetching user data...');
  var name = test.getOwner().getName();
  test.setTrashed(true);
  var add = true;
  for (var i = 0, n; i < sheets.length; i++) {
    n = sheets[i];
    if (n.getName() == name) {
      add = false;
      updateSheet(n, name);
    }
  }
  if (add) {
    newSheet(master, name);
  }
}

function updateSheet(m, name) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn());
  var nr = range.getNumRows();
  var nc = range.getNumColumns();
  for (var i = 1; i <= nr.length; i++) {
    for (var n = 1, s; n <= nc.length; n++) {
      s = range.getCell(i, n);
      m.getRange(i, n).getCell(1, 1).setValue(s.getValue());
    }
  }
}

function newSheet(master, name) {
  var m = master.insertSheet(name);
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn());
  var nr = range.getNumRows();
  var nc = range.getNumColumns();
  for (var i = 1; i <= nr.length; i++) {
    for (var n = 1, s; n <= nc.length; n++) {
      s = range.getCell(i, n);
      m.getRange(i, n).getCell(1, 1).setValue(s.getValue());
    }
  }
}

我已经搜索了代码,但找不到任何错误。

标签: google-apps-script

解决方案


显而易见的答案(感谢@Rubén)

for循环中,它说nc.lengthand nr.length。两者都getNumRows返回getNumColumns数字。由于这些是整数.length因此没有必要。


推荐阅读