我的最终目标是从formSubmit触发的函数中访问通过Google表单上传的文件的内容。我在此问题的注释中添加了一些信息,但我认为我需要更新问题本身。当我停用Web表单中的Smartsheets Sync加载项时,所有这些都按预期工作。我的理论是,在某些情况下,Smartsheets Sync加载项不会保留Event
对象。
我从开始:
function onFormSubmit (e) {
Logger.log (e);
}
我设置了触发器并测试了表单提交,并且在日志中看到:
[<datetime>] {authMode=FULL, source=Form, response=FormResponse triggerUid=<id>}
符合预期。我还浏览了FormResponse
对象,并验证了响应中是否包含有效的Google云端硬盘ID。
接下来,我向DriveApp.getFileById
添加了呼叫:
function onFormSubmit (e) {
Logger.log (e);
var responses = e.response.getItemResponses ();
var file = DriveApp.getFileById (responses [1].getResponse ());
Logger.log (file);
}
重新提交表单会显示DriveApp
的权限错误。毫不奇怪,因此我直接从脚本编辑器运行了onFormSubmit
。它失败了,因为它是在没有Event
对象的情况下调用的,但是它确实调用了允许我授予DriveApp
权限的对话框。
现在,当我提交表单时,Event
对象不包含FormResponse
对象。从日志中:
[<datetime>] {authMode=FULL, source=Form, triggerUid=<id>}
因此,授予DriveApp
权限是否以某种方式撤销了检查用户响应的权限?另外,我还有其他方法可以使用Google App脚本访问通过Google表单上传的文件吗?
答案 0 :(得分:0)
文件ID放入文件上传答案(响应)中。以下代码获取文件上传问题的答案,即文件ID。请注意,数组的索引为零,因此第一个问题是索引为零。该代码假定文件上传问题是第一个问题。
如果这回答了您的问题,则可以通过单击绿色箭头将其标记为正确。
function onFormSubmit(e) {
var file,fileID,form,responseID,submittedResponse,uploadResponse;
responseID = e.response.getId();//The the ID of the current reponse
Logger.log('responseID: ' + responseID)
form = FormApp.getActiveForm();//Get the Form that this script is bound to
submittedResponse = form.getResponse(responseID);//Get the response that
//was just submitted
uploadResponse = submittedResponse.getItemResponses()[0];//This assumes
//that the very first question is the file upload
fileID = uploadResponse.getResponse();//Get the file ID of the file just uploaded
Logger.log('fileID: ' + fileID)
file = DriveApp.getFileById(fileID);//Get the file
Logger.log('file.getName(): ' + file.getName());//verify that this is
//the correct file - and that the code is working
}