如何归档带关联表单的Google表格?脚本实现与问题解决
年末归档Google表格及关联表单的脚本实现
需求
- 实现每年年末归档电子表格及其关联表单,具体操作:
- 在预定义的归档父文件夹内,创建以对应年份命名的子文件夹
- 将待归档电子表格复制到新建的年份文件夹中
问题
复制电子表格到归档文件夹后,关联的表单虽会被自动复制,但副本仍留在原文件夹内,无法随表格一同移动到新建的年份归档文件夹中,需要解决这一同步移动的问题。
解决方案
最初仅实现了创建年份归档文件夹并复制表格的功能,在@doubleunary和@Rubén的建议下,优化脚本以实现表单副本的同步移动与重命名,以下是优化后的完整脚本,欢迎提出改进意见:
function archiveSpreadSheet() { // 待归档的主电子表格 var mainSheet = SpreadsheetApp.openById("Spreadsheet ID"); // 存储表单响应数据的工作表 var formData = mainSheet.getSheetByName("Sheet name"); // 1 - 获取表单响应表中最后一条记录的时间戳 var timestamp = formData.getRange(formData.getLastRow() - 1, 1).getValue(); // 2 - 将年份转为字符串格式 var archiveYear = new Date(timestamp).getFullYear().toString(); // 3 - 创建对应年份的归档文件夹(仅当文件夹不存在时创建) // 注:createNewFolder函数接收父文件夹ID和新文件夹名称,仅在文件夹不存在时创建并返回ID var archiveFolderId = createNewFolder("1XTW9WA35PWDUPy8TVpH3xJ4hWbqqk9nj", archiveYear); // 4 - 获取创建好的归档文件夹对象 let archiveFolder = DriveApp.getFolderById(archiveFolderId); // 5 - 在归档文件夹内创建电子表格的副本并命名 var archiveSheet = DriveApp.getFileById(mainSheet.getId()) .makeCopy("Archive Sheet - " + archiveYear, archiveFolder); // 6 - 获取副本表格关联的表单URL let relatedFormUrl = SpreadsheetApp.openByUrl(archiveSheet.getUrl()).getFormUrl(); // 7 - 获取关联表单的ID let relatedFormId = FormApp.openByUrl(relatedFormUrl).getId().toString(); // 8 - 重命名表单副本,与对应表格保持命名一致 let archiveForm = DriveApp.getFileById(relatedFormId).setName("Archive Form - " + archiveYear); // 9 - 确认表单存在后,将其移动到归档文件夹 if(relatedFormId) { archiveForm.moveTo(archiveFolder); } }
内容的提问来源于stack exchange,提问作者mustpha2ieme
相关产品推荐
相关产品推荐

