[英]Google Apps Script (Spreadsheet) - selecting an array in spreadsheet based on a condition in cells
[英]How to tell if two cells are equal in Google Apps Script for Google Spreadsheet
我正在编写一个脚本来绑定两个单元格,以使其每次编辑后始终保持相同的值。 到目前为止,我的脚本如下所示:
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]
但是当我检查记录仪日志时,我得到
[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的值,它们是相同的,因此它们必须引用同一单元格,但是相等运算符无法检查它们是否在相同范围内。
由于某种原因,当我编辑单元格D11时,程序无法识别editedCell和bind1是同一对象。
身份运算符===
在这种情况下不起作用的原因是,要比较的是范围,而不是那些范围中单元格的内容。 就像桑迪建议的那样,您需要首先获取值,然后进行比较。
但是,不需要比较,是吗? 您声明的目标是确保每次编辑后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.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.