Google Apps Script问题:修改表单上传文件名并移至共享云端硬盘
问题解决代码及说明
下面是修正后的代码,解决了提取文件ID、重命名、移动到共享云端硬盘及清理原文件关联的问题:
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Responses"); // 明确指定目标工作表,避免激活表错误 var lastRow = sheet.getLastRow(); // 提取表单输入数据 var Lot = sheet.getRange(lastRow, 2).getValue(); var Part = sheet.getRange(lastRow, 3).getValue(); var Heat = sheet.getRange(lastRow, 4).getValue(); var CertDate = sheet.getRange(lastRow, 5).getValue(); var Basic = sheet.getRange(lastRow, 6).getValue(); var Notes = sheet.getRange(lastRow, 7).getValue(); var PO = sheet.getRange(lastRow, 8).getValue(); // 生成新文件名(用数组拼接更简洁) var Cert = "Certification"; var newFileName = [Cert, Lot, Part, Heat, CertDate, Basic, Notes, PO].join(" - "); sheet.getRange(lastRow, 10).setValue(newFileName); // 从Drive URL中提取文件ID(正则适配所有Drive文件URL格式) var fileUrl = sheet.getRange(lastRow, 9).getValue(); var fileId = fileUrl.match(/[-\w]{25,}/)[0]; // 配置共享云端硬盘ID(替换为你的实际ID) const TEAMDRIVEID = "你的共享云端硬盘ID"; var targetFolder = DriveApp.getFolderById(TEAMDRIVEID); var file = DriveApp.getFileById(fileId); // 重命名文件 file.setName(newFileName); // 移动文件到共享云端硬盘:先移除原文件夹关联,再添加到目标文件夹 var originalParents = file.getParents(); while (originalParents.hasNext()) { var originalParent = originalParents.next(); originalParent.removeFile(file); } targetFolder.addFile(file); // 可选:若需彻底删除原文件(不推荐,移动后文件已在共享盘) // file.setTrashed(true); }
关键修改说明
- 指定工作表:用
getSheetByName替代getActiveSheet,避免因当前激活表不是"Responses"而出错 - 简化文件名生成:数组
join方法比多次字符串拼接更易维护 - 可靠提取文件ID:正则表达式
[-\w]{25,}能匹配所有格式的Drive文件ID,比split方法兼容性更强 - 共享盘文件移动逻辑:共享云端硬盘中移动文件需先移除原父文件夹的关联,再添加到目标文件夹,避免权限问题
- 重命名时机:先获取文件实例再执行重命名,确保修改生效
注意事项
- 务必将
TEAMDRIVEID替换为你的共享云端硬盘实际ID(可从共享盘URL中提取) - 首次运行脚本时会触发授权申请,需允许脚本访问Drive和表格权限
- 当前代码仅处理最后一行数据,若需批量处理历史提交,可添加循环遍历多行
内容的提问来源于stack exchange,提问作者danwapc
相关产品推荐
相关产品推荐

