【发布时间】:2020-08-19 07:37:08
【问题描述】:
我正在尝试创建一个脚本,当有人提交谷歌表单时发送电子邮件。该表单包括一个可选的文件上传,然后脚本将作为 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: Cannot read property 'split' of undefined”,因为它仍在尝试通过getIdFrom() 传递link,即使它不应该因为它是未定义的。
奇怪的是,当我使用我拥有的两个测试输入时它工作得非常好,其中一个“上传文件”存在但为空,另一个根本不存在。
我不确定我在这里缺少什么。
我也毫不怀疑这是一种混乱的做事方式,但我已经做到了。
【问题讨论】:
标签: google-apps-script google-forms