一个Form Response在Google Script中无响应如何处理if语句?
How to deal with if statement when one Form Response has no response in Google Script?
我正在尝试创建一个脚本,当有人提交 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)
函数我假设是因为它仍在尝试通过 getIdFrom()
传递 link
即使它不应该因为它未定义。
奇怪的是,当我使用我拥有的两个测试输入时,它工作得非常好,其中一个 'Upload File' 存在但为空,另一个根本不存在。
我不确定我在这里遗漏了什么。
此外,我毫不怀疑这是一种混乱的做事方式,但我做到了。
response.namedValues['Upload file']
是一个对象
即使它是空的它也至少有 >0
的长度
解决方法
将您的 if
语句修改为
if (link[0].length > 0) {
...
}
我正在尝试创建一个脚本,当有人提交 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)
函数我假设是因为它仍在尝试通过 getIdFrom()
传递 link
即使它不应该因为它未定义。
奇怪的是,当我使用我拥有的两个测试输入时,它工作得非常好,其中一个 'Upload File' 存在但为空,另一个根本不存在。
我不确定我在这里遗漏了什么。
此外,我毫不怀疑这是一种混乱的做事方式,但我做到了。
response.namedValues['Upload file']
是一个对象即使它是空的它也至少有
的长度>0
解决方法
将您的 if
语句修改为
if (link[0].length > 0) {
...
}