AI 写 Apps Script:Google Sheets 自动化教程
AI 写 Apps Script 完整教程:让 AI 给你写 Google Sheets 自动化脚本,含 5 个真实场景 prompt 模板、触发器配置和"我不懂代码也能改"的调试方法
你用 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 大类场景:
- 定时任务:每天 / 每周 / 每月触发某段逻辑
- 数据触发:单元格被改就跑某段逻辑
- 批量处理:一键给 100 个表格做相同操作
- 跨服务联动:Sheets 改动 → 发邮件 / 发 Slack / 写日历
- 自定义函数:像
=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 都能跑:
你是一位资深 Google Apps Script 开发者,精通 Sheets / Docs / Gmail / Calendar / Drive 的全部 API,擅长写易读、可维护的自动化脚本。
我的需求: [用大白话描述要做什么自动化。比如「每周一早 9 点把上周新增的销售订单汇总发邮件给老板」]
数据情况:
- 表格名 / sheet 名:[]
- 数据范围:[比如 A2 到 F1000]
- 列含义:[A 列是日期、B 列是销售员…]
期望行为:
- 触发方式:[手动按钮 / 定时 / 单元格被改 / 表格被打开]
- 输出形式:[新增 sheet / 发邮件 / 发 Slack / 写文件]
我的水平:[完全不懂代码 / 看得懂大概 / 会简单改]
请按以下格式输出:
完整代码
[直接给能粘到 Apps Script 编辑器的完整代码]
怎么用
- 第 1 步:[Sheets - 扩展程序 - Apps Script]
- 第 2 步:[新建 .gs 文件]
- 第 3 步:[粘代码、保存]
- 第 4 步:[配置触发器,如「每周一 9 点」]
- 第 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 写”每周一发邮件”脚本,跑了一次邮件没发,没报错。
救援步骤:
- 查触发器是不是装好:左侧「触发器」看有没有那行
- 手动跑一次验证脚本本身:在编辑器选函数点「运行」,看是否报错
- 查「执行项」日志:左侧菜单看每次执行的状态
- 检查邮件配额:免费 Gmail 每天只能用 Apps Script 发 100 封,发多了会静默失败
- 把错误信息复制回 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 编辑器 - 文件 - 版本历史,能看到每次保存的版本,一键回滚。建议每写一段稳定功能就「文件 - 创建版本」打个标签。