问题描述
我正在尝试创建一个脚本,当有人提交Google表单时发送电子邮件。该表单包括一个可选的文件上传,脚本随后将以pdf格式将其附加到电子邮件中。
我面临的问题是如果响应为空,如何忽略创建附件的过程。
下面的示例代码
function getIdFrom(url) {
var id = '';
var parts = url.split(
/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/
);
if (url.indexOf('?id=') >= 0) {
id = parts[6].split('=')[1].replace('&usp','');
return id;
} else {
id = parts[5].split('/');
var sortArr = id.sort(function (a,b) {
return b.length - a.length;
});
id = sortArr[0];
return id; //returns google doc id.
}
}
function onFormSubmit(response) {
var link = response.namedValues['Upload file'];
if (typeof link !== "undefined" && link.length > 0) { // I think it's here that's the issue
var uploadFileId = getIdFrom(link[0]);
var uploadFile = DriveApp.getFileById(uploadFileId);
var uploadFileType = (function () {
if (uploadFile.getMimeType().includes('image')) {
return uploadFile.getMimeType();
} else {
return 'application/pdf';
}
};
var attachArr = [uploadFile.getAs(uploadFileType)];
}
// etc etc send email.
}
但是,如果提交表单时未在“上传文件”问题中输入任何内容,我会在假设的getIdFrom(url)
函数处收到“ TypeError:无法读取未定义的属性'split'of undefined”,因为它仍然存在尝试通过link
传递getIdFrom()
,尽管由于它未定义而不应这样做。
奇怪的是,当我使用两个测试输入时,它工作得很好,其中一个“上传文件”存在但为空,而另一个根本不存在。
我不确定我在这里缺少什么。
我也毫无疑问,这是一种凌乱的做事方式,但我要到达那里。
解决方法
-
response.namedValues['Upload file']
是一个对象 -
即使为空,其长度也至少为
>0
解决方法
将您的if
语句修改为
if (link[0].length > 0) {
...
}