我的目标:
每次创建新电子表格时,它都应自动将“ [email protected]”作为编辑者的权限。
研究:
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
ss.addEditor('[email protected]');
}
问题:我实际上是在使用硒自动化来创建电子表格,然后使用gspread从中读取值,但问题是gspread仅读取与服务帐户共享的电子表格...
我尝试手动转到工具>脚本编辑器并运行上面的程序,它正常工作。但是当创建了一个新的电子表格并且我运行了相同的程序却没有用。
结论:硒每次创建新的电子表格时,都应自动将其共享到服务帐户。
如果创建后续电子表格,并假设您创建的文件在特定文件夹中,则以下代码将帮助您列出文件(这在脚本中是可选的,但可能有用)并同时将它们共享到指定的电子邮件。您可以从电子表格中创建的菜单(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('[email protected]'),
];
output.push([name, link]);
// write data to the sheet
sheet.getRange(2, 1, output.length, output[0].length).setValues(output);
}
};