You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何归档带关联表单的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:15:41