我有一个脚本,该脚本会在编辑第一列时添加当前日期,但是当粘贴值时,此脚本目前不起作用。
是否可以使此脚本为粘贴到第1列的范围的每一行添加日期?
function onEdit(e) {
if (e.range.getSheet().getSheetName() == 'Add Statements Here' && e.range.getColumn() == 1) {
e.range.offset(0,10).setValue(e.value.length>0 ? new Date() : '');
}
}
答案 0 :(得分:0)
这确实是很奇怪的行为,但是我想我对发生的事情有一个大概的了解。 onEdit()
的{{3}}提供了属性value
,但请注意,这是最后一句话
编辑后的新单元格值。 仅在编辑范围是 单个单元格。
似乎,如果将粘贴在上,则Google会将操作视为潜在的批处理操作,并假定范围不是单个单元格,因此不会返回value
。考虑一下,如果您选择了范围A1:D1
并将其粘贴到 A2
,则将修改单元格B2
,C2
和D2
也是
但是,如果将粘贴到单元格A2
中(在粘贴之前双击进入该单元格),则唯一修改的单元格是A2
。
因此,将覆盖和将粘贴到之间的区别基本上是使用event parameter和setValues()
之间的区别。
要解决此问题,请尝试删除或更改三元条件e.value.length>0 ? new Date() : ''
例如,下面的修改后的代码将检查已编辑范围中的第一个值的长度是否大于零,但是如果一次粘贴多行,则只会打印第一行的时间戳。如果需要,可以通过调整setValue()
或使用.offset()
(可能还有.getHeight()
)来解决。
function onEdit(e) {
if (e.range.getSheet().getSheetName() == 'Add Statements Here' && e.range.getColumn() == 1) {
e.range.offset(0,10,1,1).setValue(e.range.getValue().length>0 ? new Date() : '');
}
}
答案 1 :(得分:0)
粘贴到单元格上时,event object的“值”属性设置为undefined
。
因此,评估e.value.length>0
(如提供的代码的第3行)由于undefined
不具有“ length”属性而导致TypeError。
为了解决此问题,我建议您使用e.range.getValue()
而不是e.value
,因为无论是通过手动键入值还是粘贴值来插入范围值,都会声明range属性。
您修改后的代码如下:
function onEdit(e) {
if (e.range.getSheet().getSheetName() == 'Add Statements Here' && e.range.getColumn() == 1) {
e.range.offset(0,10).setValue(e.range.getValue().length>0 ? new Date() : '');
}
}