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

Google Apps Script运行自动复制表格,触发器/部署疑存问题

问题根源与解决办法

核心问题

你用Web App部署来实现表格打开触发函数,这是错误的选择。Web App在云端独立运行时,默认会自动创建原表格的副本进行操作,这就是每次运行都生成副本的原因——它根本没在你打开的原表格上执行代码。

解决步骤

1. 先删掉无用的Web App部署

  • 打开脚本编辑器,点右上角「部署」→「管理部署」
  • 找到已有的Web App部署,点右侧三个点→「停用」,彻底移除这个部署

2. 用正确的触发方式实现“打开表格自动执行”

有两种简单方式可选:

方式一:用简单触发器(无需额外授权)

直接把函数名改成onOpen,Google会自动把它识别为表格打开时触发的函数:

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s_week = ss.getSheetByName("Quick view - Week");
  var s_month = ss.getSheetByName("Quick view - Month");
  var test = ss.getSheetByName("Test");

  var currentWeek = Utilities.formatDate(new Date(), "GMT", "w"); 
  console.log(currentWeek);
}

注:简单触发器不能调用需要授权的服务,但你当前的代码完全适用。

方式二:用可安装触发器(支持后续扩展授权操作)

如果之后你的函数需要调用邮件、外部API这类需要授权的服务,就用这种方式:

  • 打开脚本编辑器,点左侧的时钟图标(触发器面板)
  • 点「添加触发器」,按以下配置:
    • 要运行的函数:选mediaplan
    • 部署来源:选「从电子表格」
    • 事件类型:选「打开时」
  • 保存并完成授权流程即可

3. 代码小优化(可选)

你重复调用了多次SpreadsheetApp.getActiveSpreadsheet(),可以改成只调用一次,让代码更高效:

function mediaplan() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s_week = ss.getSheetByName("Quick view - Week");
  var s_month = ss.getSheetByName("Quick view - Month");
  var test = ss.getSheetByName("Test");

  var currentWeek = Utilities.formatDate(new Date(), "GMT", "w"); 
  console.log(currentWeek);
}

内容的提问来源于stack exchange,提问作者Lara Moric

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:35:27