首页 > 解决方案 > 谷歌电子表格,使用谷歌脚本授予用户权限

问题描述

我的目标:

每次我创建一个新的电子表格时,它都会自动授予“TheEmailIwant@gmail.com”作为编辑者的权限。

研究:

  function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  ss.addEditor('TheEmailIwant@gmail.com');
  }

问题: 我实际上使用 selenium 自动化来创建电子表格并 gspread 从中读取值,但问题是 gspread 仅读取与服务帐户共享的电子表格......

我尝试手动进入工具>脚本编辑器并运行上面的程序,它工作。但是当创建一个新的电子表格并且我运行相同的程序但它没有工作时。

结论: 每次 selenium 创建一个新的电子表格时,它都应该自动将其共享给服务帐户。

标签: seleniumgoogle-apps-scriptgoogle-sheets

解决方案


如果您创建后续电子表格,并假设您创建的文件位于特定文件夹中,则以下代码将帮助您列出文件(这在脚本中是可选的,但可能很有用)并将它们共享给指定的同时发邮件。您可以从My Files电子表格中创建的菜单 ( ) 运行脚本,也可以设置触发器以在特定时间/日期自动运行它:

所以,你需要:

代码

   // ---------- Menu ----------
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('My Files')
  .addItem('List & Add Permission', 'ListFilesandAddEditor')
  .addToUi();
}

function ListFilesandAddEditor() {

  var folder = DriveApp.getFolderById('FOLDER ID GOES HERE');  
  var sheetId = "SPREADHSEET ID GOES HERE";
  var ss = SpreadsheetApp.openById(sheetId);

  // specify the sheet to write the DATA, here it's Sheet1

  var sheet = ss.getSheetByName("Sheet1"); 
  sheet.getRange("A2:B").clear();

  var output = [];
  var file;
  var name;
  var link;
  var fileId;
  var contents = folder.getFiles();
  while(contents.hasNext()) {
    file = contents.next();    
    data = [
      name =  file.getName(),
      link =  file.getUrl(),
      fileId = file.getId(),
      DriveApp.getFileById(fileId).addEditor('mynamel@gmail.com'),
    ];

    output.push([name, link]);

    // write data to the sheet  
    sheet.getRange(2, 1, output.length, output[0].length).setValues(output);  
  }  
};

推荐阅读