🤖 AI 跟我学 新手入门

AI 写 Apps Script:Google Sheets 自动化教程

AI 写 Apps Script 完整教程:让 AI 给你写 Google Sheets 自动化脚本,含 5 个真实场景 prompt 模板、触发器配置和"我不懂代码也能改"的调试方法

发布 2026/05/20 📎 参考官方文档

你用 Google Sheets 做销售跟踪表,老板要”每周一早 9 点自动把上周新增订单汇总发到群里”——你打开扩展程序看到 Apps Script,写的全是 function doGet() SpreadsheetApp.getActiveSpreadsheet(),一句也看不懂。这时候让 AI 写 Apps Script,是没编程基础的人也能做自动化的最快路径。

把你的自动化需求用大白话告诉 AI,AI 给一段能直接粘到 Apps Script 编辑器跑的 JS 代码。Anthropic 官方有个叫 Google Apps Scripter 的 prompt 模板专门做这件事,本文把它改写成中文版,加 5 个真实场景 + 触发器配置 + 调试方法。

Apps Script 能做什么

Apps Script 是 Google 给 Workspace(Sheets / Docs / Gmail / Calendar / Drive)写的轻量 JavaScript 自动化平台。完全免费,不用部署服务器,适合 5 大类场景:

  1. 定时任务:每天 / 每周 / 每月触发某段逻辑
  2. 数据触发:单元格被改就跑某段逻辑
  3. 批量处理:一键给 100 个表格做相同操作
  4. 跨服务联动:Sheets 改动 → 发邮件 / 发 Slack / 写日历
  5. 自定义函数:像 =SUM() 一样在表格里调自己的函数

国内 WPS / 飞书也有类似的”宏” / “多维表格脚本”,AI 写法基本通用,本文以 Google 为主。

用哪个 AI 工具

工具代码准确性解释清晰度国内可用备注
Claude(推荐)最高优秀需代理Apps Script 训练数据最足
ChatGPT GPT-5优秀需代理同样优秀
豆包 / Kimi中上良好直接可用简单脚本 OK
Cursor / Claude Code最高优秀需代理在 IDE 里写 + 调试

Apps Script 本质是 JavaScript,所有能写 JS 的 AI 都能写。Claude 在 Google Workspace API 上训练数据最足,复杂脚本首推。

万能 prompt:Apps Script 编程专家

下面这段套到任何 AI 都能跑:

📋 Prompt 模板

你是一位资深 Google Apps Script 开发者,精通 Sheets / Docs / Gmail / Calendar / Drive 的全部 API,擅长写易读、可维护的自动化脚本。

我的需求: [用大白话描述要做什么自动化。比如「每周一早 9 点把上周新增的销售订单汇总发邮件给老板」]

数据情况:

  • 表格名 / sheet 名:[]
  • 数据范围:[比如 A2 到 F1000]
  • 列含义:[A 列是日期、B 列是销售员…]

期望行为:

  • 触发方式:[手动按钮 / 定时 / 单元格被改 / 表格被打开]
  • 输出形式:[新增 sheet / 发邮件 / 发 Slack / 写文件]

我的水平:[完全不懂代码 / 看得懂大概 / 会简单改]

请按以下格式输出:

完整代码

[直接给能粘到 Apps Script 编辑器的完整代码]

怎么用

  1. 第 1 步:[Sheets - 扩展程序 - Apps Script]
  2. 第 2 步:[新建 .gs 文件]
  3. 第 3 步:[粘代码、保存]
  4. 第 4 步:[配置触发器,如「每周一 9 点」]
  5. 第 5 步:[首次运行授权]

关键代码解释

逐段说明每段在做什么,让我能看懂、能改。

常见报错处理

  • 如果报 [常见错误] 是因为 [原因],改 [位置]

测试方法

  • 怎么先在小数据上测
  • 怎么看脚本日志

把方括号填上自己的需求发给 AI。下面 5 个场景示范怎么填。

5 个真实场景示例

场景 1:每周一 9 点发送上周销售汇总

需求:销售表每天有人录入。每周一 9 点自动按销售员 SUM 上周订单金额,发邮件给老板。

AI 给出的代码(直接粘到 Apps Script 编辑器):

function sendWeeklySummary() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('销售明细');
  const data = sheet.getDataRange().getValues();
  const today = new Date();
  const lastMonday = new Date(today);
  lastMonday.setDate(today.getDate() - today.getDay() - 6);
  const lastSunday = new Date(today);
  lastSunday.setDate(today.getDate() - today.getDay());

  const summary = {};
  for (let i = 1; i < data.length; i++) {
    const date = new Date(data[i][0]);
    const name = data[i][1];
    const amount = data[i][4];
    if (date >= lastMonday && date <= lastSunday) {
      summary[name] = (summary[name] || 0) + amount;
    }
  }

  let body = '上周销售汇总(' + Utilities.formatDate(lastMonday, 'GMT+8', 'yyyy-MM-dd') + ' 至 ' + Utilities.formatDate(lastSunday, 'GMT+8', 'yyyy-MM-dd') + ')\n\n';
  for (const name in summary) {
    body += name + ':' + summary[name].toFixed(2) + ' 元\n';
  }

  MailApp.sendEmail({
    to: '[email protected]',
    subject: '上周销售汇总',
    body: body,
  });
}

配置触发器:左侧菜单「触发器」→ 新建 → 选 sendWeeklySummary 函数 → 时间驱动 → 每周一 → 上午 8 点到 9 点。

场景 2:表格被改自动通知

需求:员工填表请假,提交时自动通知 HR。

function onFormSubmit(e) {
  const row = e.range.getRow();
  const sheet = e.range.getSheet();
  const name = sheet.getRange(row, 2).getValue();
  const startDate = sheet.getRange(row, 3).getValue();
  const days = sheet.getRange(row, 4).getValue();
  const reason = sheet.getRange(row, 5).getValue();

  const body =
    '员工:' + name + '\n' +
    '请假起始日:' + Utilities.formatDate(startDate, 'GMT+8', 'yyyy-MM-dd') + '\n' +
    '天数:' + days + '\n' +
    '原因:' + reason;

  MailApp.sendEmail({
    to: '[email protected]',
    subject: '请假申请 - ' + name,
    body: body,
  });
}

触发器选「来自电子表格 - 表单提交时」。

场景 3:批量重命名 50 个 Drive 文件

需求:Drive 某文件夹里 50 个文件,要批量改名加上日期前缀。

function renameDriveFiles() {
  const folderId = '把这里换成你的文件夹 ID';
  const folder = DriveApp.getFolderById(folderId);
  const files = folder.getFiles();
  const today = Utilities.formatDate(new Date(), 'GMT+8', 'yyyy-MM-dd');

  while (files.hasNext()) {
    const file = files.next();
    const oldName = file.getName();
    if (!oldName.startsWith(today)) {
      file.setName(today + '_' + oldName);
    }
  }
}

手动运行一次。文件夹 ID 从 Drive 网址 /folders/XXX 里复制 XXX。

场景 4:自定义函数 IFCHINESE

需求:在 Sheets 里像 =SUM() 一样调一个自定义函数 =IFCHINESE(A1),返回单元格内容是否含中文。

function IFCHINESE(input) {
  if (input === null || input === undefined) return false;
  return /[一-龥]/.test(String(input));
}

粘到 Apps Script 保存。回到表格,C2 写 =IFCHINESE(A2) 返回 TRUE/FALSE。

适合做数据清洗预筛查。

场景 5:定时备份表格到 Drive

需求:每天 22 点把今天的工作表导出 PDF 存到指定 Drive 文件夹。

function backupToPDF() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const folderId = '换成你的备份文件夹 ID';
  const folder = DriveApp.getFolderById(folderId);
  const date = Utilities.formatDate(new Date(), 'GMT+8', 'yyyy-MM-dd');
  const url =
    'https://docs.google.com/spreadsheets/d/' +
    ss.getId() +
    '/export?format=pdf';
  const blob = UrlFetchApp.fetch(url, {
    headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() },
  }).getBlob().setName(ss.getName() + '_' + date + '.pdf');
  folder.createFile(blob);
}

触发器选「时间驱动 - 每天 - 晚上 10 点到 11 点」。

手把手 5 步走

第 1 步:打开 Apps Script 编辑器

Google Sheets - 顶部菜单「扩展程序」-「Apps Script」。会跳到一个新标签,自动建一个 Code.gs 文件。

第 2 步:把 AI 给的代码粘进去

清空 Code.gs 默认的 function myFunction() {},把 AI 给的完整代码粘进去。Ctrl+S 保存(首次保存让你给项目命名)。

第 3 步:首次运行授权

代码编辑器顶部选要跑的函数(如 sendWeeklySummary),点「运行」。Google 会弹”需要授权”,按提示一路点:「高级 - 转到 项目名(不安全)- 允许」。这是因为脚本要访问你的数据,必须先授权。

授权完成后再点「运行」就能执行了。

第 4 步:配置定时触发器

左侧菜单「触发器」(钟表图标) - 右下角「添加触发器」:

  • 函数:选你的函数名
  • 部署:选 Head
  • 事件源:时间驱动 / 来自电子表格 / 来自表单 / 自定义菜单
  • 详细配置(如「周一 9 点」、「表格被编辑时」)

保存后自动跑。

第 5 步:查看执行日志

左侧「执行项」可以看每次触发的日志、报错。脚本里用 console.log() 打印的内容都在这里。

5 个让 AI 写得更好的技巧

技巧 1:贴几行真实数据样本

AI 看不到你的 Sheets,光凭”销售表”它脑补不出列结构。贴 3 行真实数据(含表头),AI 能精确写出 data[i][0] 是什么意思。

技巧 2:明确”触发方式”

定时?手动按钮?单元格被改?发邮件?写另一张 sheet?不同触发器代码结构不一样,提前说清楚。

技巧 3:把”我的水平”写出来

「我完全不懂代码」AI 会给你详细注释 + 一步步操作指引;「我会简单改」AI 会给紧凑代码省你时间。

技巧 4:要求”分函数写”

复杂场景让 AI 拆成 3-5 个小函数(取数 / 处理 / 输出),调试 / 改动方便。别让 AI 写一个 200 行的大函数

技巧 5:要求”测试方法”

让 AI 在最后给「怎么测试 + 怎么看日志 + 常见报错怎么解」三段。不然脚本跑挂了你都不知道在哪查。

一个常见失败案例 + 怎么救

失败场景:让 AI 写”每周一发邮件”脚本,跑了一次邮件没发,没报错。

救援步骤

  1. 查触发器是不是装好:左侧「触发器」看有没有那行
  2. 手动跑一次验证脚本本身:在编辑器选函数点「运行」,看是否报错
  3. 查「执行项」日志:左侧菜单看每次执行的状态
  4. 检查邮件配额:免费 Gmail 每天只能用 Apps Script 发 100 封,发多了会静默失败
  5. 把错误信息复制回 AI:让 AI 诊断

记住:Apps Script 跑失败 90% 是”权限没给” / “触发器没设” / “配额超了”,不是代码本身的问题

进阶玩法 + 类似场景

进阶玩法 1:用 LibraryProject 复用代码

写好的工具脚本(如发邮件函数)可以发布成 Library,其他表格直接 import 用。一次写,多处用。

进阶玩法 2:调外部 API

UrlFetchApp.fetch(url, options) 能调任何 HTTP API。比如调企业微信机器人 webhook 推消息:

function pushWeixin(text) {
  const webhook = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY';
  UrlFetchApp.fetch(webhook, {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify({
      msgtype: 'text',
      text: { content: text },
    }),
  });
}

Sheets → 企业微信 / Slack / Discord 全部能通。

进阶玩法 3:Web App 部署成接口

Apps Script 能部署成公网可访问的 Web App(HTTP 接口),别人 POST 数据就写进你的 Sheets。轻量数据收集场景比搭服务器快 100 倍。

类似场景

常见问题

Q:Apps Script 收费吗? A:个人 Gmail / Google Workspace 都免费。有配额限制(每天发邮件 100 封、UrlFetch 20000 次、触发器执行总时长 90 分钟等),个人用绰绰有余。

Q:国内能用吗? A:需要代理访问 Google Workspace 才能写 / 跑脚本。脚本本身跑在 Google 服务器,国内访问 Google Sheets 才能看到结果。

Q:WPS / 飞书有类似的吗? A:有。WPS 有 VBA 和 JS 宏(看 AI 写 VBA);飞书多维表格有「自动化 - 脚本」(同样 JS)。本文 prompt 模板套过去 80% 能用,把 SpreadsheetApp 改成对应平台的 API 即可。

Q:脚本会被滥用吗? A:Apps Script 默认只能操作脚本所有者的数据,不能跨账户访问。授权时看清楚要授权哪些范围(Gmail / Drive / Sheets),不需要的别给。

Q:脚本被改了我能回滚吗? A:能。Apps Script 编辑器 - 文件 - 版本历史,能看到每次保存的版本,一键回滚。建议每写一段稳定功能就「文件 - 创建版本」打个标签。