如何利用Google表单提交字段自动重命名上传文件
Google表单自动重命名上传文件解决方案(非盈利住房费用记录场景)
针对用于记录非盈利住房费用的Google基础表单,需求为提交表单时自动用表单字段重命名上传文件,同时移除Google默认添加的“- 上传者姓名”后缀。
表单字段说明:
- submissionDate:日期选择器
- personName:姓名下拉框
- expenseType:费用类型下拉框(如food、supplies等)
- expenseAmount:数字字段(格式多为##.##)
目标文件名格式:submissionDate(YYYYMMDD)_personName_expenseType_expenseAmount
用户曾找到手动批量重命名方案,但需要实现自动处理,最初尝试的代码存在字段获取逻辑缺失问题,最终基于@Tedinoz的方案修改得到可用代码,需配合安装表单提交触发器使用。
初始不完整代码(存在逻辑缺失)
function onFormSubmit(e) { var form=FormApp.getActiveForm(); // 返回表单提交总数 var length=form.getResponses().length; // 将QUESTION NUMBER替换为文件上传问题的索引(注意第一个问题索引为0) var id=form.getResponses()[length-1].getItemResponses()[QUESTION NUMBER].getResponse(); // getResponses()[length-1]获取最新的表单提交,因为索引从0开始,最后一条的索引是length-1 var file=DriveApp.getFileById(id); // 存储文件名到变量 name = file.getName(); // 移除Google自动添加的名称后缀 var originalname = name.split(' - ')[0] // !! 缺失部分:获取特定字段的响应,包括将日期选择器转换为YYYYMMDD格式 var newname = datefield+namefield+typefield+originalname file.setName(name); }
最终可用解决方案代码
function updateFileName(e) { Logger.log(JSON.stringify(e)) // 调试日志 var values = e.values // 获取文件详情 var fileURL = values[5] Logger.log("DEBUG: 文件链接 = "+fileURL) var id = fileURL.split("=")[1] Logger.log("DEBUG: 文件ID = "+id) var file = DriveApp.getFileById(id) var uploadFileName = file.getName() Logger.log("DEBUG: 当前文件名 = "+uploadFileName) var extension = uploadFileName.split('.').pop(); // 获取文件名所需变量 var submittedDate = values[2].toString() var yyyy = submittedDate.split("/")[2] var mm = submittedDate.split("/")[0] // 确保月份为两位数字(补前导零) if (mm.length == 1){ mm = "0"+mm } var dd = submittedDate.split("/")[1] // 确保日期为两位数字(补前导零) if (dd.length == 1){ dd = "0"+dd } var personName = values[1] var expenseType = values[3] var expenseAmount = values[6] // 替换字符串,确保文件名符合规范 var expenseAmount = expenseAmount.replace('.', 'd').replace(',', 'd').replace('$', ''); var expenseType = expenseType.replace('&','And').replace(' ',''); var newName = yyyy+mm+dd+"_"+personName+"_"+expenseType+"_"+expenseAmount+"."+extension Logger.log("DEBUG: 新文件名 = "+newName) // 保存新文件名 file.setName(newName) // 以下代码用于确认文件名修改(可选保留) var newfile = DriveApp.getFileById(id) var revisedFileName = file.getName() Logger.log("DEBUG: 更新后的文件名 = "+revisedFileName) }
触发器安装步骤
- 打开表单关联的Google表格,进入脚本编辑器
- 在编辑器左侧面板找到「触发器」选项
- 创建新触发器:选择
updateFileName函数,触发事件设置为「表单提交」
内容的提问来源于stack exchange,提问作者Derin
相关产品推荐
相关产品推荐

