google-apps-script - GOOGLE FORM - 如何在代码中指定子文件夹名称?
问题描述
如何操作这行代码,以便我可以根据谷歌表单中的响应创建一个新文件夹。我有一个名为“名称”的字段。我希望它不仅进入父文件夹,而且创建一个带有客户“名称”的新文件夹。
如何使用以下代码做到这一点?
谷歌脚本:
const initialize = () => {
const form = FormApp.getActiveForm();
ScriptApp.newTrigger("onFormSubmit").forForm(form).onFormSubmit().create();
};
const onFormSubmit = ({ response } = {}) => {
try {
// Get a list of all files uploaded with the response
const files = response
.getItemResponses()
// We are only interested in File Upload type of questions
.filter(
(itemResponse) =>
itemResponse.getItem().getType().toString() === "FILE_UPLOAD"
)
.map((itemResponse) => itemResponse.getResponse())
// The response includes the file ids in an array that we can flatten
.reduce((a, b) => [...a, ...b], []);
if (files.length > 0) {
// Each form response has a unique Id
const subfolderName = response.getId();
const parentFolder = DriveApp.getFolderById(PARENT_FOLDER_ID);
const subfolder = parentFolder.createFolder(subfolderName);
files.forEach((fileId) => {
// Move each file into the custom folder
DriveApp.getFileById(fileId).moveTo(subfolder);
});
}
} catch (f) {
Logger.log(f);
}
};
解决方案
您应该将创建触发器的函数更改为如下所示:
function initialize() {
const form = FormApp.getActiveForm();
const ts = ScriptApp.getProjectTriggers().map(t=>t.getHandlerFunction());
if(!~ts.indexOf('onFormSubmit')) {
ScriptApp.newTrigger("onFormSubmit").forForm(form).onFormSubmit().create();
}
}
这样您就不会创建多个触发器。
function onFormSubmit(e) {
try {
var subfolderName;
const files = e.response.getItemResponses().filter(itemResponse => itemResponse.getItem().getType().toString() === "FILE_UPLOAD").map((itemResponse) => itemResponse.getResponse()).reduce((a, b) => [...a, ...b], []);
e.response.getItemResponses().forEach(r => { if (r.getItem().getTitle() == 'Hold') { subfolderName = r.getResponse(); } });
if (files.length > 0) {
const parentFolder = DriveApp.getFolderById(PARENT_FOLDER_ID);
const subfolder = parentFolder.createFolder(subfolderName);
files.forEach((fileId) => {
DriveApp.getFileById(fileId).moveTo(subfolder);
});
}
} catch (f) {
Logger.log(f);
}
};
我认为这会奏效,但我必须承认我在电子表格中完成了大部分表单编码。
推荐阅读
- react-native - NativeBase 中的样式
- django - Django 嵌套循环的迭代总数
- reactjs - MUI v5:带有系统属性的样式和 sx prop 之间是否存在性能差异?
- postgresql - Postgres - 从转储中恢复数据库时出错
- node.js - 如何从验证功能访问注册功能元素?
- docker - docker-ce 无法映射端口 - 表示端口正在使用中(即使没有使用)
- javascript - 使用 javascript 调整 3 张图像的大小
- java - 如何正确地将 java 集合转换为 Kotlin 语言
- python - 有没有办法使用索引和列名作为键从熊猫数据框中创建键值配对字典?
- python - Python 无法安装加密:命令错误,退出状态为 1