通过高级云端硬盘服务添加编辑器()而不通知电子邮件 [英] addEditors() through Advanced Drive Service without notification emails

查看:442
本文介绍了通过高级云端硬盘服务添加编辑器()而不通知电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码处理并将用户提交的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/372​​89790/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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆