当登录用户更改单元格值时,该函数可以正常运行,但当有人未登录时则无法正常运行:
它在工作表本身和未受保护的范围内执行简单的操作。 我在网上看到,即使文件在隐身模式下的选项卡中打开,它也应该触发,但它甚至没有在日志中显示该函数已运行。
function onEdit(e) {
const sheet = e.range.getSheet();
const sheetsToWatch = ['Content Workbook'];
if (sheetsToWatch.includes(sheet.getName())) {
const headers = sheet.getRange(1, 1, 1, sheet.getMaxColumns()).getValues()[0];
const colToWatch = 'Client Feedback';
const colToWatchIndex = headers.indexOf(colToWatch) + 1;
const row = e.range.getRow();
const colToSet = 'Feedback Processed';
const colToSetIndex = headers.indexOf(colToSet) + 1;
if (e.range.getColumn() === colToWatchIndex && row > 1) {
const row = e.range.getRow();
const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy HH:mm:ss");
sheet.getRange(row, colToSetIndex).setValue("No");
sheet.getRange(row, colToSetIndex + 1).setValue(timestamp);
}
}
}
按照你的情况,修改如下怎么样?
函数名称从
onEdit
重命名为 installedOnEdit
。并且,请将 OnEdit 触发器安装到 installedOnEdit
。 参考并再次测试。
function installedOnEdit(e) {
const sheet = e.range.getSheet();
const sheetsToWatch = ['Content Workbook'];
if (sheetsToWatch.includes(sheet.getName())) {
const headers = sheet.getRange(1, 1, 1, sheet.getMaxColumns()).getValues()[0];
const colToWatch = 'Client Feedback';
const colToWatchIndex = headers.indexOf(colToWatch) + 1;
const row = e.range.getRow();
const colToSet = 'Feedback Processed';
const colToSetIndex = headers.indexOf(colToSet) + 1;
if (e.range.getColumn() === colToWatchIndex && row > 1) {
const row = e.range.getRow();
const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy HH:mm:ss");
sheet.getRange(row, colToSetIndex).setValue("No");
sheet.getRange(row, colToSetIndex + 1).setValue(timestamp);
}
}
}
重要的是,在
when someone not signed-in
的情况下,如果不在事件对象中使用 user
,则不会发生错误。如果在事件对象中使用 user
,则会出现类似 You do not have permission to call Session.getActiveUser. Required permissions: https://www.googleapis.com/auth/userinfo.email
的错误。请注意这一点。