Отправить папку на диск в список пользователей из таблицы Google - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь написать скрипт, чтобы взять папку с моего диска и поделиться ею со списком пользователей. Сценарий планируется запустить на листе, который собирает ответы из формы Google, и я установил триггер для запуска сценария при каждой новой отправке формы.

Первая попытка. Я думаю, что что-то не так с тем, как я создаю массив, содержащий список электронных писем, но я не мог понять, как это исправить.

function driveShare_array() { 
     var getEmails =[];
     var sheet= SpreadsheetApp.getActiveSheet();
     var getEmails = sheet.getRange('emailstoshare').getValues(); // emailtoshare is a named range including only the one column where the sheet collects emails from the form submission
      var folder = DriveApp.getFolderById('xxxx'); // added the folder ID in here
      for ( i in getEmails) {
      folder.addViewer(getEmails[i])

      }
    }

Вторая попытка контролировать, как массив "getEmails "формируется путем добавления элементов (pu sh) один за другим

   function driveShare_push(){

  var getEmails =[];
  var sheet= SpreadsheetApp.getActiveSheet();

  var range = sheet.getRange('emailstoshare'); // emailtoshare is a named range including only the one column where the sheet collects emails from the form submission
  for (var i=0;i<range.getNumRows();i++){
      getEmails.push(range.offset(i,0,1,1).getValue());
  }


  var folder = DriveApp.getFolderById('xxxx'); // added the folder ID in here
 // for ( var j=0;j<range.getNumColumns();j++) {
  for (var j in getEmails){
  folder.addViewer(getEmails[j]) ;
  }
} 

Обе версии (и другие варианты, которые я тестировал) дают ошибки. Может ли кто-нибудь помочь мне понять, что я делаю неправильно и как это исправить? Спасибо!!

Ответы [ 3 ]

0 голосов
/ 28 января 2020

Если вы вызываете функцию с помощью триггера onFormSubmit, вы можете сделать что-то вроде этого.

function driveShare_array(e) { 
  var folder=DriveApp.getFolderById('xxxx');
  folder.addViewer(e.namedValues['Email Address']); 
}

Возможно, вы захотите сохранить их в некоторой электронной таблице и получить их, чтобы убедиться, что вы еще не добавили это к списку. Вам необходимо создать триггер onFormSubmit для функции в редакторе сценариев Редактировать / Триггеры проекта.

0 голосов
/ 29 января 2020

Использовал logger.log, чтобы понять структуру данных, а код создавал матрицу вместо массива. Вот исправленный код для справки:

function driveShare_push(){
  var getEmails =[];
  var sheet= SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange('emailstoshare');

  for (var i=1;i<range.getNumRows();i++){
    if(range.offset(i, 0, 1, 1).getValue().indexOf("gmail.com") > -1){
    getEmails.push(range.offset(i,0,1,1).getValue());
    }
  }
  var folder = DriveApp.getFolderById('xxxx');
  folder.addViewer(getEmails[getEmails.length-1]) ;
}
0 голосов
/ 28 января 2020

Возможно, что адрес электронной почты не имеет учетной записи Google и, следовательно, папка не может быть передана им. Вы можете рассмотреть возможность добавления блока try / catch, чтобы игнорировать такие ошибки.

function driveShare_array() { 
  var getEmails =[];
  var sheet= SpreadsheetApp.getActiveSheet();
  var folder = DriveApp.getFolderById('xxxx'); 
  var getEmails = sheet.getRange('emailstoshare').getValues();
  getEmails.forEach(function(email) {
    if (/\S+\.\S+/.test(email)) {
      try {
        folder.addViewer(email)
      } catch (f) {
        Logger.log("Cannot share with " + email);
      }
    }
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...