javascript - 为什么我的 Google 脚本在每次执行后都会添加 3 行?

标签 javascript google-apps-script google-sheets

我整理了以下代码来检查B列<>A列是否。 如果为 TRUE,则将A 列数据粘贴到B 列中。

这工作正常除了每次执行后都会添加 3 行! 我就是不明白为什么。

有人能解释一下为什么会发生这种情况吗? 我尝试分解这个脚本以了解每个部分的机制,但无法得出结论。

function RefreshSheets() {

 
  var ss = SpreadsheetApp.openById("1YWjysA9uuGez3grhvMR3_JaAuBp5AsigOmDbxlk7d6c");
  var sh = ss.getSheetByName("Front Sheet");

  var rA = sh.getRange(6, 1, sh.getLastRow() - 0, 1);
  var vA = rA.getValues();

  var rD = sh.getRange(6, 4, sh.getLastRow() - 0, 1);
  var vD = rD.getValues();

  var rB = sh.getRange(6, 2, sh.getLastRow() - 0, 1);
  var vB = rB.getValues();


  for (var i = 0; i < vB.length; i++) {
    if (vB[i][0] != vA) {
      vB[i][0] = vA;
    }
  }
  rB.setValues(vA)

}

最佳答案

尝试这样:

范围中的第三个参数是行数而不是最后一个行号。如果您使用最后一个行号但不从第 1 行开始,那么您将直接从数据底部进行迭代。

vA 和 vB 是二维数组,因此它们需要两个索引来指定单个单元格。

function RefreshSheets() {
  var ss = SpreadsheetApp.openById("1YWjysA9uuGez3grhvMR3_JaAuBp5AsigOmDbxlk7d6c");
  var sh = ss.getSheetByName("Front Sheet");
  var rA = sh.getRange(6,1,sh.getLastRow()-5,1);
  var vA = rA.getValues();
  var rD = sh.getRange(6,4,sh.getLastRow()-5,1);
  var vD = rD.getValues();
  var rB = sh.getRange(6,2,sh.getLastRow()-5,1);
  var vB = rB.getValues();
  for (var i=0;i<vB.length;i++) {
    if (vB[i][0] != vA[i][0]) {
      vB[i][0] = vA[i][0];
    }
  }
  rB.setValues(vA)

}

关于javascript - 为什么我的 Google 脚本在每次执行后都会添加 3 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60600506/

相关文章:

javascript - 如何重复调用JavaScript函数

使用 Google App 脚本的电子邮件名称 - 让用户名出现在收件人电子邮件的 "From"部分中

javascript - If/Else 函数是做两个部分而不是一个部分

google-sheets - 为什么 SCAN/LAMBDA 会给出意想不到的结果?

google-apps-script - 用于复制和重命名电子表格的 Google Sheets 脚本

javascript - WebSocket 和发送时重用 ArrayBuffer

javascript - 使用 React Router 4 和 Redux 时,React View 不会渲染

javascript - 单击时的单选按钮不起作用,但在 fiddler 中工作正常

javascript - 如何使用数组元素作为 indexOf 方法的参数?

google-sheets - 如何设置多行文本格式以便轻松粘贴到 Google 电子表格中?