我在Google表格中遇到了问题 TypeError:无法从undefined中读取属性“source”。 (第7行,文件“代码”) 运行以下代码时请帮助
function onEdit(event)
{
var timezone = "GMT-5";
var timestamp_format = "MM-dd-yyyy-hh-mm-ss";
var updateColName = "Ticket#";
var timeStampColName = "TimeComplete";
var sheet = event.source.getSheetByName('InAndOut');
var actRng = event.source.getActiveRange();
var editColumn = actRng.getColumn();
var index = actRng.getRowIndex();
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
var dateCol = headers[0].indexOf(timeStampColName);
var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
var cell = sheet.getRange(index, dateCol + 1);
var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
cell.setValue(date);
}
}
答案 0 :(得分:3)
source
是event
的属性,尚未分配对象,因此它被称为未分配。当像您这样的函数直接从脚本编辑器运行时会发生这种情况。
要从脚本编辑器运行它,首先必须为函数参数分配一个带有相应属性的事件对象。详情见 How can I test a trigger function in GAS?
如果您将从脚本编辑器运行它,建议:
event.source
SpreadsheetApp.getActiveSpreadsheet()
答案 1 :(得分:1)
onEdit
是简单触发器的保留函数名称。此触发器的事件是用户对工作表的操作。
onEdit(e)在用户更改电子表格see reference中的值时运行。
如果从编辑器运行该函数,则函数中的事件对象未定义:
function onEdit(event) // undefined
如果用户更改了单元格值,则触发器会自动启动并为event
变量赋值。