我有一个时间戳脚本给出了错误: 无法从未定义中读取属性“源”。 (第3行,文件“代码”)
我调查了问题是否出在第1行function onEdit(e)
上,并且基于我正在阅读的资源,我无法从脚本编辑器运行此问题。第1行确实是导致此错误的罪魁祸首吗?
function onEdit(e)
{
var sheet = e.source.getActiveSheet();
if (sheet.getName() == "Sheet1") //Name of sheet
{
var actRng = sheet.getActiveRange();
var editColumn = actRng.getColumn();
var rowIndex = actRng.getRowIndex();
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
var dateCol = headers[0].indexOf("Date & Time") + 1; // Name of Column you want to timestamp
var orderCol = headers[0].indexOf("Input Field") + 1; // Name of Column you want to drop data
if (dateCol > 0 && rowIndex > 1 && editColumn == orderCol)
{
sheet.getRange(rowIndex, dateCol).setValue(Utilities.formatDate(new Date(), "PST","hh:mm:ss aaa"));
}
}
}
我在这里有一个样本表。 https://docs.google.com/spreadsheets/d/1NcblMFTVPbKYPmfvh7YnfEHe3dl2QQp6HaC-dqtdiik/edit#gid=0
有两个标题(A列)日期和时间和(B列)输入字段。 编辑B列后,A列应填充时间戳。
答案 0 :(得分:1)
function onEdit(e) {
var sh=e.range.getSheet();
if (sh.getName()=="Sheet1"){
var headers = sh.getRange(1,1,1,sh.getLastColumn()).getValues();
var dateCol=headers[0].indexOf("Date & Time") + 1;
var orderCol=headers[0].indexOf("Input Field") + 1
if (dateCol>0 && e.range.rowStart>1 && e.range.columnStart==orderCol) {
sh.getRange(e.range.rowStart, dateCol).setValue(Utilities.formatDate(new Date(), "PST","hh:mm:ss aaa"));
}
}
}
没有错。这需要更多使用事件对象。请记住,您无法从脚本编辑器运行这些功能。它们需要事件对象,没有事件对象,它们将失败,因为“ e”未定义。但是事件对象提供了许多有用的数据。
尝试像在电子表格中一样将Logger.log(JSON.stringify(e));
添加到函数中,您可以看到事件对象提供的所有数据。
答案 1 :(得分:0)
感谢大家指出此脚本的工作原理。事实证明,问题出在一组导致问题的单元格上。我不知道如何传达正确的答案,除了我所做的就是删除导致问题的“添加数据”列中的单元格,重新输入数据,并且事件触发得很好。不知道这些细胞是怎么回事,但看来它们是罪魁祸首。我将样本表保留为未经编辑的状态。
如果您尝试在B列的第19行和第23行中键入内容,则不会发生任何事情。如果您多选19和23列B,然后删除并输入数据,它将起作用。