我正在编写一个从电子表格中获取数据的脚本,并根据电子表格中输入的每个条目,它会提取基本上是电子邮件地址的数据,并从域中删除用户的帐户。
//** Delete the users on submitting the "Submit" button
function onFormSubmit(e) {
//Logger.log(e);
//Run this function passing on event "e" when the form is submitted.
//Object e has form parameters sourced from the sheet attached to the form
deleteUsers(e);
}
//Logs all the info from the spreadsheet and deletes the user
function deleteUsers() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
for (var i = 0; i < data.length; i++) {
Logger.log('managerEmail: ' + data[i][0]);
Logger.log('email: ' + data[i][1]);
Logger.log('trasferToEmail: ' + data[i][3]);
var managerEmail = data[i][0];
var email = data[i][1];
var trasferToEmail = data[i][3];
var request = {
'url': 'https://www.googleapis.com/admin/directory/v1/users/' + email,
'method' : 'DELETE'
};
}
但我仍然没有成功删除帐户。我实际上尝试根据此文档https://developers.google.com/admin-sdk/directory/v1/reference/users/delete实现它,但不知道如何使用它。有任何想法吗?对不起,如果这是一个愚蠢的问题!我是谷歌脚本的新手。
答案 0 :(得分:1)
最好使用AdminDirectory.Users.remove(email);
,而不是像对待API那样向API发出请求。
如果要记录响应var request = AdminDirectory.Users.remove(data[i][1]);
激活AdminDirectory;
答案 1 :(得分:1)
您正在向e
发送deleteUsers()
,但该功能未收到任何参数。如果onFormSubmit()
已经提供了电子表格数据,则无需访问它 - 请查看event object documentation以供参考。
function deleteUser(e) {
var data = e.namedValues;
var managerEmail = data["Manager Email"][0]; //You'll need to adjust the field names to match with your form data
var email = data["Email"][0];
var transferToEmail = data["Transfer to Email"][0];
var response = AdminDirectory.Users.remove(email);
}
要确保您的触发器设置正确,请先将表单回复保存到电子表格中。然后编辑&gt;当前项目触发并复制这些设置:
要使AdminDirectory
有效,您需要enable advanced services。 (在脚本编辑器中,转到“资源”&gt;“高级Google服务”并在“管理目录API”上切换。然后单击模式底部的链接以在API控制台中启用Admin SDK。)
如果我误解了表单收集的数据,并且您确实需要从电子表格中提取数据(假设表单未连接到表单),那么您需要create a trigger是该表格的提交。运行此功能以安装触发器。
function installFormTrigger() {
var form = FormApp.openById("FORM_ID");
ScriptApp.newTrigger("deleteUsers")
.forForm(form)
.onFormSubmit()
.create();
}
然后您原来的deleteUsers()
函数几乎可以像您一样工作,但添加了AdminDirectory
。
function deleteUsers() {
var sheet = SpreadsheetApp.getActive().getSheetByName("SheetName"); //HIGHLY recommend using this instead
var data = sheet.getDataRange().getValues();
for (var i = 0; i < data.length; i++) {
var managerEmail = data[i][0];
var email = data[i][1];
var trasferToEmail = data[i][3];
var response = AdminDirectory.Users.remove(email);
}
}
请注意,在for循环中,您可能会收到无效的电子邮件,或者AdminDirectory
可能会收到错误,因此我建议您实施try...catch和logging。