在Google电子表格中,如果修改了该行中的任何值,我想在特定列中创建时间戳。我可以使用以下代码(Google Script)来管理它:
function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
var r = s.getActiveCell();
var row = r.getRow()
s.getRange('Z' + row).setValue(new Date()).setNumberFormat('dd.MM.yy, hh:mm'); //inserts a timestamp in column Z of the modified row
}
如果修改了多于一行的行,我想扩展功能,例如。如果通过复制/粘贴插入更多单元格。现在只有第一行得到它的时间戳。
您对我如何处理所有选定的行有什么想法吗?也许是通过循环?
更新:更进一步: 有没有办法只在单元格为空时写入时间戳!?不应覆盖现有的时间戳。
Br,Fred
答案 0 :(得分:1)
您可以使用onEdit事件对象推断所有需要的属性
function onEdit(e) {
e.range
.getSheet()
.getRange(e.range.getRow(), 26, e.range.getNumRows())
.setValue(new Date())
.setNumberFormat('dd.MM.yy, hh:mm');
}
或者像这样你喜欢很多变量
function onEdit(e) {
var range = e.range;
var sheet = range.getSheet();
var row = range.getRow();
var rows = range.getNumRows();
var date = new Date();
sheet
.getRange(row, 26, rows)
.setValue(date)
.setNumberFormat('dd.MM.yy, hh:mm');
}
编辑:仅编写新日期
function onEdit(e) {
var range = e.range;
var sheet = range.getSheet();
var row = range.getRow();
var rows = range.getNumRows();
var date = new Date();
var dates = sheet
.getRange(row, 26, rows)
.getValues()
.map(function(row) {return [row[0] || date];});
sheet
.getRange(row, 26, rows)
.setValues(dates)
.setNumberFormat('dd.MM.yy, hh:mm');
}
答案 1 :(得分:0)
在Robin的代码中添加if(sheet.getRange(row, 26, rows).getValues() == '')
应该在添加时间戳之前检查第26列中的相关单元格是否为空。
function onEdit(e) {
var range = e.range;
var sheet = range.getSheet();
var row = range.getRow();
var rows = range.getNumRows();
var date = new Date();
if(sheet.getRange(row, 26, rows).getValues() == ''){ //added line: 1
sheet
.getRange(row, 26, rows)
.setValue(date)
.setNumberFormat('dd.MM.yy, hh:mm');
} //added line: 2
}