可安装的触发器需要获取编辑用户的电子邮件,但只能访问我的
Installable trigger needs to grab email of user who edited, but is only accessing mine
所以我有一个 spreadsheet,其中列出了通过从另一个文件导入的 运行ge 完成的工作。用户有一个经过验证的数据下拉列表,当他们 select 这项工作的状态时,它会在另一个 sheet 中搜索他们 select 编辑的工作并更新这项工作的状态。它超级简单,适用于我授予编辑权限的每个人。
我想更改它以记录编辑工作状态的用户的电子邮件,因此 运行 脚本(我们都是同一个工作区域的一部分)。我已经得到它来提取我的电子邮件并将其重复放置在需要的地方,但我无法让它访问其他人的。我尝试部署它,尽管我不完全确定我理解它是如何工作的。我已经研究过授权它,但我唯一能找到更改授权的地方是通过编辑器中的 appscript.json,但这并没有显示文档对 edit/add 所说的权限,所以我我对如何授权这个有点迷茫。
不确定这是否重要,但此脚本附加到 sheet 它从中获取编辑。我不知道这是否意味着 sheet 权限需要更改或什么。
这是完整的代码,减去标识 URL's/ID 的:
function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); //shortens calling to the current sheet
var dataSheet = SpreadsheetApp.openById("datafileID").getSheetByName("Data"); //shortens calling to the data file
const status = e.value; //validated user input
var erange = e.range; //range of edited cell
var ecolumn = erange.getColumn(); //range column of edited cell
var erow = erange.getRow(); //range row of edited cell
var snRow = erow; //identifies what row to look for the store number
var snColumn = ecolumn-2; //identifies what column to look for the store number
var sn = sheet.getRange(snRow, snColumn).getValue(); //declares the store number as variable
var user = e.user; //declares user as variable
if (!e.range.isBlank()) { //searches data sheet for store and updates status and user
var column = dataSheet.getRange("G:G").getValues();
var uRow;
for (var i = 0; i < column.length; i++){
if (column[i][0] === sn) {
uRow = i+1;
break;
}
}
dataSheet.getRange(uRow,6).setValue(status)
dataSheet.getRange(uRow,5).setValue(user)
}
sheet.getActiveCell().clearContent();
}
onEdit
是简单触发器的保留名称,您不应该使用从编辑/更改可安装触发器调用此函数,因为将有两个并行执行 运行。
当使用来自同一域的 Google 个 Workspace 帐户的简单或可安装触发器时,e.user
应该 return 表示非活动用户的用户对象。
由于脚本适用于您的帐户,因此不需要额外的权限。
由于脚本不起作用,请尝试以下操作:
- 删除可安装触发器
- 更改函数名称(即
respondToEdit
)
- 再次创建指向新函数名称的可安装触发器。
- 仔细检查电子表格共享权限是否仅设置为来自您的 Google Workspace 域的编辑者。
参考资料
所以我有一个 spreadsheet,其中列出了通过从另一个文件导入的 运行ge 完成的工作。用户有一个经过验证的数据下拉列表,当他们 select 这项工作的状态时,它会在另一个 sheet 中搜索他们 select 编辑的工作并更新这项工作的状态。它超级简单,适用于我授予编辑权限的每个人。
我想更改它以记录编辑工作状态的用户的电子邮件,因此 运行 脚本(我们都是同一个工作区域的一部分)。我已经得到它来提取我的电子邮件并将其重复放置在需要的地方,但我无法让它访问其他人的。我尝试部署它,尽管我不完全确定我理解它是如何工作的。我已经研究过授权它,但我唯一能找到更改授权的地方是通过编辑器中的 appscript.json,但这并没有显示文档对 edit/add 所说的权限,所以我我对如何授权这个有点迷茫。
不确定这是否重要,但此脚本附加到 sheet 它从中获取编辑。我不知道这是否意味着 sheet 权限需要更改或什么。
这是完整的代码,减去标识 URL's/ID 的:
function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); //shortens calling to the current sheet
var dataSheet = SpreadsheetApp.openById("datafileID").getSheetByName("Data"); //shortens calling to the data file
const status = e.value; //validated user input
var erange = e.range; //range of edited cell
var ecolumn = erange.getColumn(); //range column of edited cell
var erow = erange.getRow(); //range row of edited cell
var snRow = erow; //identifies what row to look for the store number
var snColumn = ecolumn-2; //identifies what column to look for the store number
var sn = sheet.getRange(snRow, snColumn).getValue(); //declares the store number as variable
var user = e.user; //declares user as variable
if (!e.range.isBlank()) { //searches data sheet for store and updates status and user
var column = dataSheet.getRange("G:G").getValues();
var uRow;
for (var i = 0; i < column.length; i++){
if (column[i][0] === sn) {
uRow = i+1;
break;
}
}
dataSheet.getRange(uRow,6).setValue(status)
dataSheet.getRange(uRow,5).setValue(user)
}
sheet.getActiveCell().clearContent();
}
onEdit
是简单触发器的保留名称,您不应该使用从编辑/更改可安装触发器调用此函数,因为将有两个并行执行 运行。
当使用来自同一域的 Google 个 Workspace 帐户的简单或可安装触发器时,e.user
应该 return 表示非活动用户的用户对象。
由于脚本适用于您的帐户,因此不需要额外的权限。
由于脚本不起作用,请尝试以下操作:
- 删除可安装触发器
- 更改函数名称(即
respondToEdit
) - 再次创建指向新函数名称的可安装触发器。
- 仔细检查电子表格共享权限是否仅设置为来自您的 Google Workspace 域的编辑者。
参考资料