首页 > 解决方案 > 为什么每次执行后我的 Google 脚本都会添加 3 行?

问题描述

我已经把下面的代码放在一起检查是否Column B <> Column A。如果为真,则将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)

}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


试试这种方式:

范围中的第三个参数是行数而不是最后一行数。如果您使用最后一行编号但不从第 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)

}

推荐阅读