昨天我问了一个有关我正在执行的脚本的问题,因为我无法检测到正在修改的单元格,因此我直接链接到该问题:
Stuck with Google spreadsheet script
现在我正在尝试使脚本成为条件脚本,但是我无法区分watchRange1和watchRange2,这是两个不同的单元格区域,它们具有特定的单元格,我要在其中写入每个范围的修改时间。
现在,即使我修改了其他范围,条件语句也总是在watchRange1的单元格中写入修改时间。
你能告诉我我在做什么吗?
这是我要提到的脚本:
function onEdit(e){
var curDate = Utilities.formatDate(new Date(), "GMT+01:00", "hh:mm");
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test2');
var range = e.range;
//var colIndex = range.getColumn();
var colIndex = range.getColumnIndex(); //Same as getColumn()
var rowIndex = range.getRowIndex(); //Same as getRow()
var DateCol1 = "K9"; //Cell you want to have the date
var DateCol2 = "U9"; //Cell you want to have the date
var watchRange1 = {
top : 11, // start row
bottom : 109, // end row
left : 3, // start col
right : 11, // end col
};
var watchRange2 = {
top : 11, // start row
bottom : 109, // end row
left : 13, // start col
right : 21, // end col
};
if(colIndex >= watchRange1.left || colIndex <= watchRange1.right &&
rowIndex >= watchRange1.top || rowIndex <= watchRange1.bottom &&
e.getValue() != 0){
SpreadsheetApp.getActiveSheet().getRange(DateCol1).setValue(curDate);
//Write the date in the cell
}else if (colIndex >= watchRange2.left || colIndex <= watchRange2.right &&
rowIndex >= watchRange2.top || rowIndex <= watchRange2.bottom &&
e.getValue() != 0){
SpreadsheetApp.getActiveSheet().getRange(DateCol2).setValue(curDate);
//Write the date in the cell
}else{
SpreadsheetApp.getActiveSheet().getRange(DateCol1).setValue("Error");
};
}
答案 0 :(得分:0)
您使用的是“或” ||
,而不是“和” &&
。
颜色大于或等于左,或者小于或等于右。在第一个范围内,颜色将始终大于左。这意味着第一个if
语句始终为true(如果您在两个范围中的任何一个中进行编辑)。
if(colIndex >= watchRange1.left || //should be &&
colIndex <= watchRange1.rigth && //right is misspelled
rowIndex >= watchRange1.top || //should be &&
rowIndex <= watchRange1.bottom &&
e.value != 0) //access key value instead of call function
此外,事件对象e
没有关联的功能。它们具有key:value对。 e.value
是您访问值的方式。