javascript - 为什么每次执行后我的 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)
}
解决方案
试试这种方式:
范围中的第三个参数是行数而不是最后一行数。如果您使用最后一行编号但不从第 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)
}
推荐阅读
- ios - 如何快速更改启动屏幕图像?
- python - Python list.pop(i) 时间复杂度?
- javascript - 当用户在加载的页面(NextJS、ReactJS)之间导航时,加载指示器不显示
- fortran - 这个语法在 fortran 中是什么意思?
- laravel - Laravel - 限制用户的帖子数量
- ios - 如何在 Flutter 中覆盖supportedInterfaceOrientations?
- character-encoding - Notepad++更新到Windows 10 18363.592后无法显示汉字
- php - 重试模式,如何确定 PHP 中的失败类型
- database - 在规范化之前将原始表划分为子表?
- python - 如何在 Ebay 中迭代页面