selenium - 谷歌电子表格,使用谷歌脚本授予用户权限
问题描述
我的目标:
每次我创建一个新的电子表格时,它都会自动授予“TheEmailIwant@gmail.com”作为编辑者的权限。
研究:
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
ss.addEditor('TheEmailIwant@gmail.com');
}
问题: 我实际上使用 selenium 自动化来创建电子表格并 gspread 从中读取值,但问题是 gspread 仅读取与服务帐户共享的电子表格......
我尝试手动进入工具>脚本编辑器并运行上面的程序,它工作。但是当创建一个新的电子表格并且我运行相同的程序但它没有工作时。
结论: 每次 selenium 创建一个新的电子表格时,它都应该自动将其共享给服务帐户。
解决方案
如果您创建后续电子表格,并假设您创建的文件位于特定文件夹中,则以下代码将帮助您列出文件(这在脚本中是可选的,但可能很有用)并将它们共享给指定的同时发邮件。您可以从My Files
电子表格中创建的菜单 ( ) 运行脚本,也可以设置触发器以在特定时间/日期自动运行它:
所以,你需要:
- 创建用于列出文件的新电子表格
- 获取此电子表格的 ID(// https://drive.google.com/drive/folders/ ID IS HERE )
- 获取包含创建的电子表格的文件夹的 ID ( https://docs.google.com/spreadsheets/d/ ID IS HERE /edit)
- 设置共享文件的邮箱
- 每次手动运行脚本或设置触发器自动执行
代码:
// ---------- 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);
}
};
推荐阅读
- python - Pandas 在 2 个给定数字、给定步长和 groupby 内插值
- javascript - 我们如何根据选择选项发送电子邮件
- python - Flask 不加载当前版本的代码
- android - Android 8.0+ 上的 getStorageEncryptionStatus()
- unity3d - unity2D 移动到固定物体会导致失重
- excel - VBA Copay 值从一个工作簿到另一个工作簿
- javascript - 如果主窗口被隐藏,router.push electron-vue 不起作用
- node.js - 续集 createdAt 和 updatedAt
- javascript - 如何使用 Angular 4 及更高版本实现 JSON Schema Faker
- amazon-web-services - 尝试通过 .net 在 cognito 中建立用户时如何修复请求超时