我有一个工作表,其中有一定数量的列,并且有一个时间戳专用的第一列。我的代码有效,但是每次都更新,我希望它仅在第一次编辑时更新。
我试图添加一些我发现但没有成功的代码。
function onEdit(e) {
var s = e.source.getActiveSheet(),
cols = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
colStamp = 1,
ind = cols.indexOf(e.range.columnStart)
if (s.getName() !== 'Feedback' || ind == -1) return;
e.range.offset(0, parseInt(colStamp - cols[ind]))
.setValue(e.value ? new Date() : null);}
{ if (e.range.offset(0, parseInt(colStamp - cols[ind])).getValue() === '')
{ e.range.offset(0, parseInt(colStamp - cols[ind])).setValue(e.value ? new Date() : null);}}
我没有任何错误消息,处于活动状态时的最后一部分代码使整个代码无法正常工作。
答案 0 :(得分:0)
在该行的第一次编辑时将时间戳记添加到单元格。
在设置日期值之前,请使用onEdit(e)
简单触发器和if
语句来确保timestamp列为空。
function onEdit(e) {
var sh = e.source.getActiveSheet();
var row = e.range.getRow();
var col = e.range.getColumn();
var stampCol = sh.getRange(row, 1);
//check if "stampCol" is empty
if (!stampCol.getValue()) {
var tz = e.source.getSpreadsheetTimeZone();
var date = Utilities.formatDate(new Date(), tz, 'dd-MM-yyyy hh:mm:ss');
stampCol.setValue(date); //set timestamp
}
}
我已将var stampCol
定义为已编辑同一行的第1列。然后,if
语句检查stampCol
是否为空,如果为空,则为该行加上时间戳。通过检查stampCol
是否为空,它将阻止脚本在每次编辑时将时间戳记写入该行,因为该脚本仅在第一次运行时才为空。
然后使用Utilities.formatDate()
创建一个时间戳,该时间戳具有脚本中定义的格式,您可以将其更改为想要的显示方式。当前,它使用的是var tz
中电子表格的时区,您也可以更改此时区以使用首选时区设置。
以下是Google Apps脚本中的一些时区选项:
//use spreadsheet timezone setting
var tz = e.source.getSpreadsheetTimeZone();
//use script timezone setting
var tz = Session.getScriptTimeZone();
//enter your own time zone
var tz = 'GMT+0';
答案 1 :(得分:0)
很抱歉,您的回复很晚!
非常感谢您的回答和解释,看来效果很好。
如果有问题,我会在这里发表评论。
干杯!