a"文件上传"部分以表格使用:我需要表单用户(不是所有者)能够与表格所有者以外的其他人共享文件。<<<<<<<<<<<<<<<</p>
在表单中出现文件upload的结果将文件放入当前表单用户的驱动器中,并提供表单所有者可以查看的URL。我需要与他人共享该URL(通过脚本而不是手动干预)。
由表单输入触发,我的脚本运行:
DriveApp.getFileById(id).setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.NONE);
...何处从表单中提供的URL派生的地方(请参阅Google Apps脚本上的URL获取文件ID的最简单方法...我知道我的ID正确)。
作为指向表格链接的用户,我没有任何错误...我也不会以表格以所有者的形式输入错误。
但是,除了电子表格所有者以外,任何人都看不到URL(甚至输入并拥有文件的用户都无法查看链接)表格的非所有者将运行此。我猜想SetSharing正在作为表单的所有者而不是用户运行,因此无法将其设置为可共享?脚本有没有办法使文件/链接可查看?
但是,即使表格所有者运行表单,其他人也无法查看其他URL。我认为一旦文件变得可共享,ID就不会更改?所以我必须错误地调用setSharing?
也许表格提供的URL中的ID是n个"无限制",其中它不是文件的真实ID?
示例例程与这些URL的电子表格第4列的示例例程可共享:
`
function SetPermissions() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var maintsheet = ss.getSheetByName('Maintenance');
var lastmr = maintsheet.getLastRow();
for (var i = 2; i <= lastmr; i++) {
var fileURL = maintsheet.getRange(i,4).getValue();
Logger.log(fileURL);
for (var j in fileURL.split(",")) {
Logger.log(j);
Logger.log(fileURL.split(",")[j]);
var fileID = fileURL.split(",")[j].match(/[-w]{25,}/)[0]
Logger.log(fileID);
DriveApp.getFileById(fileID).setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.NONE);
}
}
}
`
...由表单/电子表格的所有者运行,没有错误,并且记录的数据看起来正确。但是,将URL交给另一个用户,然后获得权限错误。
这修复了:
function SetPermissions() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var maintsheet = ss.getSheetByName('Maintenance');
var lastmr = maintsheet.getLastRow();
for (var i = 2; i <= lastmr; i++) {
var fileURL = maintsheet.getRange(i,4).getValue();
Logger.log(fileURL);
for (var j in fileURL.split(",")) {
Logger.log(fileURL.split(",")[j]);
var fileID = fileURL.split(",")[j].match(/[-w]{25,}/)[0]
Logger.log(fileID);
var file = DriveApp.getFileById(fileID);
file.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);
var newURL = file.getUrl();
maintsheet.getRange(i, 4).setValue(newURL);
}
}
}
doh:https://developers.google.com/apps-script/reference/drive/permission
...我在告诉它:没有链接的任何人都没有权限!查看,是正确的选择!
这是一个函数,给定表单将粘贴在单元格中的URL列表(可以设置表单以允许每个单元格允许多个pics),设置权限并返回URL列表,这次是Google格式在geturl()中的URL:
function AnyoneWithLinkCanView(urls) {
var newURLs = "";
if ( urls.length > 0 ) {
for each (var j in urls.split(",")) {
var fileid = j.match(/[-w]{25,}/)[0];
var file = DriveApp.getFileById(fileid);
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
if ( newURLs.length > 0 ) {
newURLs += ", ";
}
newURLs += file.getUrl();
}
}
return newURLs;
}
在我的情况下,由于URL将构成电子邮件的消息正文,我的电话看起来像:
var message = AnyoneWithLinkCanView(dataSheet.getRange(lastr,i).getValue());
form inputs以创建形式触发器的任何人运行。如果您希望脚本运行,因为她可以访问她访问脚本和创建表单触发的宏。