我正在编写一个脚本来绑定两个单元格,以便在每次编辑后始终保持相同的值。到目前为止我的脚本看起来像这样:
function myEdit(event){
var ss = event.source.getActiveSheet();
var r = event.source.getActiveRange();
var bind1 = ss.getRange("D11:D11").getCell(1,1);
var bind2 = ss.getRange("D10:D10").getCell(1,1);
var editedCell = r.getCell(1,1);
Logger.log("checking");
if (editedCell === bind1){
Logger.log("Condition was Met!");
bind1.copyTo(bind2);
}
else if (editedCell === bind2){
Logger.log("Condition was met!");
bind2.copyTo(bind1);
}
else{
Logger.log("No condition was met.");
}
当我更改任一绑定单元格中的值时,不会在其他任何位置复制任何内容。当我检查执行日志时,看起来一切都很顺利
[14-07-21 10:47:06:215 EDT] Execution succeeded [0.884 seconds total runtime]
但是当我检查Logger日志时,我得到了
[14-07-21 10:55:49:260 EDT] checking
[14-07-21 10:55:49:260 EDT] No condition was met.
出于某种原因,当我编辑单元格D11时,程序无法识别editedCell和bind1是同一个对象。
通过检查bind1和editedCell的值,值是相同的,因此它们必须引用相同的单元格,但是相等运算符不能检查它们是否是相同的范围。
答案 0 :(得分:0)
出于某种原因,当我编辑单元格D11时,程序无法识别editedCell和bind1是同一个对象。
标识运算符===
在这种情况下不起作用的原因是所比较的是Range,而不是这些范围中单元格的内容。像桑迪建议的那样,你需要先得到这些值,然后对它们进行比较。
然而,不需要比较,是吗?您声明的目标是确保每次编辑后D10和D11包含相同的值。由于唯一可以影响的编辑是对自身的更改,因此您可以忽略对除D10或D11之外的任何单元格所做的任何编辑。此外,如果其中任何一个发生更改,并且myEdit()
被调用,则知道它们是不同的,因此您只需将新更改的值复制到另一个单元格。
这样的事情:
function myEdit(event){
// To check whether we need to do anything, find which cell was edited.
// Get the A1 notation for the changed cell.
var cellA1 = event.range.getA1Notation();
if (cellA1 == "D10") {
// D10 changed, so copy value to D11
event.range.offset(1,0).setValue(event.value);
}
else if (CellA1 == "D11") {
// D11 changed, so copy value to D10
event.range.offset(-1,0).setValue(event.value);
}
// Any other cell, do nothing.
}