表单中使用了“文件上传”部分:我需要表单用户(不是所有者)能够与表单所有者以外的其他人共享文件。
看起来表单中文件上传的结果将文件放入当前表单用户的驱动器中,并提供表单所有者可以查看的 URL。我需要该 URL 可以与其他人共享(通过脚本,而不是手动干预)。
由表单输入触发,我的脚本运行:
DriveApp.getFileById(id).setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.NONE);
...其中 id 派生自表单提供的 URL(请参阅从 Google Apps 脚本上的 URL 获取文件 ID 的最简单方法...因为我知道我得到了正确的 ID)。
作为具有表单链接的用户,我没有收到任何错误......我也没有看到作为所有者在表单中输入的错误。
但是,除了电子表格所有者之外,任何人都无法看到该 URL(即使是输入并拥有该文件的用户也无法查看该链接)......因此 DriveApp.Access.ANYONE_WITH_LINK 无法正常工作。表单的非所有者将运行它。我猜 setSharing 是作为表单的所有者运行的,而不是用户,因此不能将它设置为可共享的?脚本有没有办法使文件/链接可见?
但是,即使表单所有者运行表单,其他人也无法查看该 URL。我认为一旦文件变得可共享,ID 就不会改变?所以我一定是错误地调用了 setSharing 吗?
也许表单提供的 URL 中的 ID 是一些“无人区”,它不是文件的真实 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 提供给另一个用户,他们会收到权限错误。