我有一个脚本,它将在第4列中的单元格具有文本“ Assign”时将日期和时间写入第14列。我现在面临的问题是,当我不直接在第4列中输入“分配”时,第14列将不会更改。
例如:我告诉电子表格第4列的单元格4 = I4,并且在I4中有文本“分配”,第14列将不显示当前日期时间。
当我手动将第4列的单元格4设置为“分配”时,第14列将显示日期时间。
脚本在onEdit上有效,这可能是问题吗?我是Google Apps脚本的新手。
function onEdit(e) {
var sh = e.source.getActiveSheet();
var col = e.range.getColumn();
var val = e.range.getValue();
//check if sheet is 'Blad1', column edited is 'C' & value is 'assign'
if (sh.getSheetName() === 'Blad1' && col === 4 && val === 'Assign') {
var row = e.range.getRow();
var tz = e.source.getSpreadsheetTimeZone();
var date = Utilities.formatDate(new Date(), tz, 'dd-MM-yyyy hh:mm:ss');
//set date in column 14 for same row
sh.getRange(row, 14).setValue(date);
}
}
仅当我将文本直接放在第4列中时,脚本才起作用。我希望每当第4列中的单元格更改为“分配”时,脚本就起作用。
P.S。电子表格将从名为“应用程序表”的程序中获取新数据。当应用表格将第4列更改为“分配”时,我需要显示当前时间。
答案 0 :(得分:0)
此脚本仅在更新第4列时才执行setValue()
,这是if
语句专门检查的事情之一:
if (sh.getSheetName() === 'Blad1' && col === 4 && val === 'Assign') {
如果您希望每次编辑工作表并val === 'Assign'
都运行此操作,那么您要做的就是从if
语句中删除列检查,并使用{{ 1}},而不是事件对象val
。
getRange()