Google Form基于提交的LIST值将上传文件保存至指定新文件夹的调整方法
Google Form CHECKBOX字段替换为LIST单选字段的逻辑调整方案
原有方案中使用的CHECKBOX为多选字段,提交后返回数组格式的选中值;LIST(下拉选择)为单选字段,提交后返回单个字符串格式的选中值,因此调整主要围绕取值逻辑简化、分支逻辑裁剪展开,具体调整点如下:
- 取值逻辑调整
原有代码获取CHECKBOX字段值后,通常会包含数组长度校验、取首元素或者遍历数组的逻辑,替换为LIST字段后可直接删除这部分数组处理逻辑,直接读取字段返回值即可。
示例:原有逻辑const category = e.namedValues['分类字段'][0]可直接修改为const category = e.namedValues['分类字段']。 - 文件夹匹配逻辑简化
原有多选逻辑需要遍历所有选中的选项,依次创建/匹配对应文件夹、重复执行文件操作;替换为单选后无需遍历,仅需执行一次文件夹匹配、创建操作即可。 - 文件操作逻辑调整
原有多选场景下为了兼顾多分类存储,通常会用makeCopy方法将文件复制到多个对应文件夹;单选场景下可直接使用moveTo方法将文件从表单默认存储文件夹移动到目标分类文件夹,避免存储多份冗余文件。 - 边界校验逻辑优化
原有CHECKBOX字段需要校验数组长度判断用户是否选中选项;LIST字段如果设置为必填,表单提交时会自动校验无需额外判断,若未设置必填仅需校验返回的字符串是否为空即可,无需做数组相关校验。
代码调整示例
原有CHECKBOX字段处理逻辑
function onFormSubmit(e) { // 多选返回数组 const selectedCategories = e.namedValues['分类']; const uploadedFiles = e.namedValues['上传文件']; // 遍历所有选中的分类执行操作 for (const category of selectedCategories) { let targetFolder = getOrCreateFolder(category); uploadedFiles.forEach(fileUrl => { const file = DriveApp.getFileById(fileUrl.split('id=')[1]); // 多分类需要复制文件 file.makeCopy(targetFolder); }) } }
替换为LIST字段后的处理逻辑
function onFormSubmit(e) { // 单选直接返回字符串 const selectedCategory = e.namedValues['分类']; // 无需遍历,直接处理单个分类 let targetFolder = getOrCreateFolder(selectedCategory); const uploadedFiles = e.namedValues['上传文件']; uploadedFiles.forEach(fileUrl => { const file = DriveApp.getFileById(fileUrl.split('id=')[1]); // 单选直接移动文件即可 file.moveTo(targetFolder); }) }
内容的提问来源于stack exchange,提问作者Kristóf Árkosi
相关产品推荐
相关产品推荐

