当我编辑列
B
时,我尝试在列A
中添加时间戳,并在编辑列E
时在列D
中添加时间戳。这些时间戳应该只显示时间,没有日期。
我试过这个:
/** @OnlyCurrentDoc */
function onEdit(e){
const sh = e.source.getActiveSheet();
sh.getRange ('M' + e.range.rowStart)
.setValue (new Date())
.setNumberFormat ('MM/dd/yyyy HH:MMam/pm');
}
但是每次我编辑行中的任何单元格时,此代码都会对列
M
进行时间戳记,而不是仅对 A
到 B
和 D
到 E
进行时间戳记。
如何仅在编辑某些列时添加时间戳,并根据编辑的列将这些时间戳放在不同的列中?
您可以检查编辑了哪一列,并在 B 或 D 列中添加时间戳,如下所示:
/** @OnlyCurrentDoc */
function onEdit(e) {
if (e.range.getColumn() == 1 || e.range.getColumn() == 3) {
const sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(e.range.getRow(), e.range.getColumn() + 1)
.setValue(new Date())
.setNumberFormat('HH:MMam/pm');
}
}
有许多经过尝试和测试的时间戳脚本。您可能想使用其中之一,而不是从头开始编写自己的。
要使用我的 yetAnotherTimestamp_ 脚本执行您要求的操作,请在脚本中使用这些参数:
// [START modifiable parameters]
{
sheets: /^(.+|Sheet2|Sheet3)$/i,
watch: {
columns: ['A', 'D',],
values: /./i,
rowStart: 2,
rowEnd: +Infinity,
},
stamp: {
columns: ['B', 'E',],
format: 'hh:mm am/pm',
overwrite: true,
eraseOnDelete: false,
},
},
// [END modifiable parameters]
要添加更多列,请编辑两个
columns
数组。要选择脚本响应哪个 sheets
和触发器 values
,请编辑相关
正则表达式.
我链接的脚本经过优化并使用 事件对象
e
。它比使用 e.range.getColumn()
和 e.range.getRow()
的较短脚本运行得更快。请参阅这些 onEdit(e) 优化技巧。