Google Script - 表单:以编程方式处理上传字段:如何获取多个链接?

在谷歌脚本中使用上传字段时,我遇到了两个问题。我会尽力描述我的问题。


我有一个表单,在发送时设置了触发器。此触发器调用一个主函数,而主函数又调用其他一些函数。


其中一个子功能创建一个文档,然后在特定工作表上设置其链接。


主函数在以下行中获取项目响应对象:


var responses = e.response.getItemResponses();

然后,此对象作为参数传递给 Doc 函数:


generateBriefingPDF(classID, briefingSheet, responses, timestamp);

ClassID 是一个简单的整数属性,briefingSheet 是我从中获取的目标工作表和时间戳:


var timestamp = e.response.getTimestamp();

在 generateBriefingPDF 脚本中,我得到响应并将它们分配给更易于阅读的变量,如下所示:


var name = responses[0].getResponse();

var subject = responses[1].getResponse();

var content = responses[2].getResponse();

var level = responses[3].getResponse();

var uploads = responses[4].getResponse();

然后,我在用带有变量的模板复制的新文档中替换文本“变量” 。


我也将它们设置在工作表中。


“上传”var 是文件的 ID,因此我使用以下方法将其转换为链接:


uploads = DriveApp.getFileById(uploads).getUrl();

这很好用。除了 response[4] 中的“uploads”变量外,它是一个上传字段。发生以下情况:


当什么都没有上传时:变量是undefined,所以它不能运行属性“getResponse”。TypeError: Cannot read property 'getResponse' of undefined我在 Stackdriver 日志中收到错误。我试图用以下几行检查是否未定义,但都没有用:


if(uploads !== undefined) if(typeof uploads !== "undefined")


上传一个文件:一切正常。


上传了多个文件:我在尝试通过 ID 获取文件时出错(当然):Exception: Unexpected error while getting the method or property getFileById on object DriveApp. 当我没有将 ID 转换为链接的行时,ID 在doc 文件,但只有第一个出现在工作表中。


我能做些什么来解决这两个问题?


料青山看我应如是
浏览 110回答 1
1回答

慕娘9325324

我相信你的目标如下。您想针对使用 Google 表单上传一个文件和/或多个文件的情况修改您的脚本。修改点:根据您的脚本,我认为您的脚本可能是 Google Form 的容器绑定脚本。从 中More than one file is uploaded,我认为uploadsofvar uploads = responses[4].getResponse()是一个包含上传文件的文件 ID 的数组。在这种情况下,responses[4]每种情况如下。当文件未上传时,responses[4]是undefined.这在你的问题中已经提到了。当一个文件和/或多个文件上传时,responses[4]是ItemResponse的对象,responses[4].getResponse()是一个包含上传文件的文件ID的数组。上传一个文件时,var uploads = responses[4].getResponse()就像["###fileId###"]. 在这种情况下,DriveApp.getFileById(uploads)有效。我认为这uploads.toString()可能用于这种情况。但是,当上传多个文件时,文件 ID 不存在。由此,错误发生。关于 中的问题More than one file is uploaded,我认为这是您问题的原因。我认为为了实现你的目标,可以使用上述情况。当你的脚本修改后,就变成了下面这样。修改脚本:从:var uploads = responses[4].getResponse();到:var uploads = "";if (responses[4]) {  // or if(uploads !== undefined) if(typeof uploads !== "undefined")  uploads = responses[4].getResponse().map(id => DriveApp.getFileById(id).getUrl()).join(",");}笔记:在这个修改中,当一个文件被上传时,uploads就是一个URL。例如,当上传 2 个文件时,uploads是一个包含 2 个 URL 的字符串值,例如URL1,URL2. 如果想作为数组使用,请修改为uploads = responses[4].getResponse().map(id => DriveApp.getFileById(id).getUrl()).当没有文件上传时,uploads是"".
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript