通过高级云端硬盘服务添加编辑器()而不通知电子邮件 [英] addEditors() through Advanced Drive Service without notification emails
问题描述
我的代码处理并将用户提交的Google表单数据合并到Google文档中,与通过Google工作表函数确定的用户共享该文件,并将新提交的通知发送给这些用户。
用户组以单个值开始(单元格中的列表 - user1@email.com,user2@email.com等。
),然后将 split(,)
放入一个数组中,用于 addEditors()
。
我需要为这些用户设置编辑权限,而不必在使用DriveApp File.addEditors()
方法。据我所知,这需要高级云端硬盘服务,我已经<
$ b $ href =https://developers.google.com/apps-script/guides/services/advanced =nofollow>启用。 b
在没有通知的情况下添加这些权限的语法和确切代码是什么?
以下代码示例 -
函数mergeApplication(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(合并数据);
var range = sheet.getActiveRange();
var formSheet = ss.getSheetByName(Form Responses);
var lastRow = formSheet.getLastRow();
var lastColumn = sheet.getMaxColumns();
函数checkAndComplete(){
var urlColumn = lastColumn;
var checkColumn =(urlColumn - 1);
var checkRange = sheet.getRange(2,checkColumn,(lastRow - 1),1);
var check = checkRange.getBackgrounds();
var red =#ff0404;
var yellow =#ffec0a;
var green =#3bec3b;
for(var i = 0; i< check.length; i ++){
if(check [i] == green){
continue;
} else {
var statusCell = sheet.getRange((i + 2),checkColumn,1,1);
var urlCell = sheet.getRange((i + 2),urlColumn,1,1);
var dataRow = sheet.getRange((i + 2),1,1,(lastColumn - 2));
var emailTag = sheet.getRange((i + 2),(checkColumn - 2))。getValue();
var emailEditors = emailTag.split(,);
...通过合并代码跳到它将被使用的位置...
var docCopy = docToUse.makeCopy(docName,folderDestination);
var docId = docCopy.getId();
var docToSend = DriveApp.getFileById(docId);
docToSend.addEditors(emailEditors);
这是一个实用功能,在Google Drive文件中。
$ b
/ **
*将给定用户的写入权限添加到给定文档。
*
*使用必须启用的高级云端硬盘服务。
*
*来自:http://stackoverflow.com/a/37289790/1677912
*
* @param {字符串} docId为其添加权限的文档ID。
* @param {string} userEmail给予用户编辑权限的电子邮件地址。
* /
函数addEditorSilent(docId,userEmail){
var permissionResource = {
角色:'writer',
类型:'user',
value:userEmail
};
var optionalArgs = {
sendNotificationEmails:false
};
Drive.Permissions.insert(permissionResource,docId,optionalArgs);
}
现在,而不是:
var docCopy = docToUse.makeCopy(docName,folderDestination);
var docId = docCopy.getId();
var docToSend = DriveApp.getFileById(docId);
docToSend.addEditors(emailEditors);
使用:
var docCopy = docToUse.makeCopy(docName,folderDestination);
var docId = docCopy.getId();
for(var i = 0; i< emailEditors.length; i ++){
addEditorSilent(docId,emailEditors [i]);
}
My code processes and merges user submitted Google Form data into a Google Doc, shares the file with users determined through Google Sheet Functions, and emails a notification of the new submission to those same users.
The group of users starts as a single value (list in the cell -- user1@email.com, user2@email.com, etc.
) and is then split(", ")
into an array for use in addEditors()
.
I need to set editing permissions for those users without sending the email notification associated with that action while using the DriveApp File.addEditors()
method. As I understand it, this requires the Advanced Drive Service, which I have already enabled for the script.
What is the syntax and exact code for adding these permissions without notification?
Sample of my code below --
function mergeApplication() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Merge Data");
var range = sheet.getActiveRange();
var formSheet = ss.getSheetByName("Form Responses");
var lastRow = formSheet.getLastRow();
var lastColumn = sheet.getMaxColumns();
function checkAndComplete() {
var urlColumn = lastColumn;
var checkColumn = (urlColumn - 1);
var checkRange = sheet.getRange(2, checkColumn, (lastRow - 1), 1);
var check = checkRange.getBackgrounds();
var red = "#ff0404";
var yellow = "#ffec0a";
var green = "#3bec3b";
for (var i = 0; i < check.length; i++) {
if (check[i] == green) {
continue;
} else {
var statusCell = sheet.getRange((i+2), checkColumn, 1, 1);
var urlCell = sheet.getRange((i+2), urlColumn, 1, 1);
var dataRow = sheet.getRange((i+2), 1, 1, (lastColumn - 2));
var emailTag = sheet.getRange((i+2), (checkColumn - 2)).getValue();
var emailEditors = emailTag.split(", ");
...skipping down through merge code to where it will be used...
var docCopy = docToUse.makeCopy(docName, folderDestination);
var docId = docCopy.getId();
var docToSend = DriveApp.getFileById(docId);
docToSend.addEditors(emailEditors);
Here's a utility function to silently give a user write permissions on a Google Drive file.
/**
* Add write permission for the given user to the given document.
*
* Uses the Advanced Drive Service, which must be enabled.
*
* from: http://stackoverflow.com/a/37289790/1677912
*
* @param {string} docId Document ID to add permissions to.
* @param {string} userEmail Email address of user to be given editor privileges.
*/
function addEditorSilent( docId, userEmail ) {
var permissionResource = {
role: 'writer',
type: 'user',
value: userEmail
};
var optionalArgs = {
sendNotificationEmails: false
};
Drive.Permissions.insert(permissionResource, docId, optionalArgs);
}
Now, instead of:
var docCopy = docToUse.makeCopy(docName, folderDestination);
var docId = docCopy.getId();
var docToSend = DriveApp.getFileById(docId);
docToSend.addEditors(emailEditors);
Use:
var docCopy = docToUse.makeCopy(docName, folderDestination);
var docId = docCopy.getId();
for (var i=0; i<emailEditors.length; i++) {
addEditorSilent( docId, emailEditors[i] );
}
这篇关于通过高级云端硬盘服务添加编辑器()而不通知电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!