我尝试了几种方法来编码插入行,但它们反复给出错误的输出。
在电子表格中,当我在单元格 C2 中键入 IF 时,应在 C2 IF 之后插入一个空白行。这发生并且是正确的。但是当我随后在单元格 C3 中键入 IF 时,GAS 解释器在 C3 行插入了一个空行并将 C3 IF 推送到 C4。这不应该发生。它应该在 C3 IF 所在的行之后插入一个空白行,但它没有。当我使用 AND、WHEN 和 OR 时会发生同样的事情。每个都有不同的插入代码。 IF、AND、WHEN 和 OR 的行之间不应有任何空白行。有解决方案吗?
我在以下位置分享了我的简化 Google Sheet 和简化代码(一个最小的可重现示例):
https://docs.google.com/spreadsheets/d/11skN3VLxSqQOqT7NX6tXTUY6kFYivbr9w-Yn2pI4z1s/edit?usp=sharing
这是为便于分析而简化的代码:
function onEdit(e) {
let c = e.range
let cvalue = e.value;
if (cvalue == "IF") {
c.getSheet().insertRowAfter(c.rowStart);
}
if (cvalue == "AND") {
c.getSheet().insertRows(c.rowStart + 1,1);
}
if (cvalue == "WHEN") {
c.getSheet().insertRowsAfter(c.rowStart, 1);
}
if (cvalue == "OR") {
c.getSheet().insertRowAfter(c.getRowIndex());
}
}
我还附上了两张图片:第一张是应该发生的事情,另一张是错误的输出,因为 GAS 解释器出现故障:最佳答案
事件顺序:
IF
在 C2 中并按 Enter 解决方法:
.activateAsCurrentCell()
)自动选择上一行和新行,使 UI 快速无缝地重新悔改。 解决方法脚本:
function onEdit(e) {
const c = e.range
const cvalue = e.value;
console.log({rg:c.getA1Notation(),e})
if (cvalue == "IF") {
c.getSheet().insertRowAfter(c.rowStart);
}
if (cvalue == "AND") {
c.getSheet().insertRows(c.rowStart + 1,1);
}
if (cvalue == "WHEN") {
c.getSheet().insertRowsAfter(c.rowStart, 1);
}
if (cvalue == "OR") {
c.getSheet().insertRowAfter(c.getRowIndex());
}
if(/OR|WHEN|AND|IF/g.test(cvalue)){
c.activateAsCurrentCell();
SpreadsheetApp.flush();
c.offset(1,0).activateAsCurrentCell()
};
}
关于google-apps-script - GAS/Google Sheets在insertRows、insertRowAfter、insertRowsAfter的应用中出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69642336/