目录
n8n Google Sheets 教程:自动读取、新增和更新数据
Google Sheets 是最常见的“轻量级数据库”:报名名单、订单、库存、客户清单。n8n 可以自动读取、写入和更新表格,并在有新数据时触发工作流。
准备:授权
- n8n Cloud:创建 Google Sheets 凭据时直接登录 Google 即可。
- 自托管:需要先在 Google Cloud 中创建 OAuth 客户端并启用 Google Sheets API,完整步骤请参阅凭据管理。
表格格式
n8n 将第一行作为列名,之后每一行是一条数据(一个 item):
| 姓名 | 场次 | 状态 | |
|---|---|---|---|
| 王小明 | ming@example.com | 10/20 北京 | 已确认 |
| 李小华 | hua@example.com | 10/27 上海 | 待确认 |
读取后,每一行会变成:
{ "row_number": 2, "姓名": "王小明", "Email": "ming@example.com", "场次": "10/20 北京", "状态": "已确认" }
建议列名简短且不重复,并避免使用合并单元格。
常用操作
在 Google Sheets 节点中选择:
| 操作 | 说明 |
|---|---|
| Get Row(s) | 读取数据行,可以设置筛选条件(例如状态 = 待确认) |
| Append Row | 在最后新增一行 |
| Update Row | 根据某个列找到对应的行并更新 |
| Append or Update Row | 找到就更新,找不到就新增(最常用) |
| Delete Rows | 删除行 |
| Clear | 清空工作表 |
| Create | 创建新的表格或工作表 |
选择表格和工作表时,可以从列表中选择,也可以粘贴表格网址。
列映射
新增或更新时,Mapping Column Mode 有两种方式:
- Map Each Column Manually:为每一列分别填写表达式,例如“姓名”填入
{{ $json.name }} - Map Automatically:输入数据的列名与表格列名相同时自动映射
更新:选择用于匹配的列
Update / Append or Update 需要指定 Column to match on,例如使用“Email”列进行匹配。请选择不会重复的列。
监听新数据:Google Sheets Trigger
Google Sheets Trigger 会定期检查表格,在有新增行或行被修改时触发。适合“有人在表格中新增一笔订单,就自动处理”这类场景。
请注意,它通过轮询运行(例如每分钟检查一次),不是实时触发。
完整示例:活动报名自动化
需求:用户填写报名表 → 写入表格 → 发送确认邮件 → 通知管理员。
[Form Trigger] ─▶ [Google Sheets:Append or Update] ─▶ [Send Email:确认邮件] ─▶ [Telegram:通知管理员]
1. Form Trigger
使用 n8n 内置表单,无需 Google 表单:
- Form Title:
讲座报名 - 字段:
- 姓名(Text,必填)
- Email(Email,必填)
- 场次(Dropdown:10/20 北京、10/27 上海)
发布后会生成一个表单网址,可以直接分享。
2. 写入表格
在 Google Sheets 节点中选择操作 Append or Update Row:
- Column to match on:
Email - 姓名:
{{ $json['姓名'] }} - Email:
{{ $json.Email }} - 场次:
{{ $json['场次'] }} - 状态:
已报名 - 报名时间:
{{ $now.toFormat('yyyy-MM-dd HH:mm') }}
使用 Email 匹配,同一个人重复报名时只会更新数据,不会新增重复行。
3. 发送确认邮件
使用 Send Email 或 Gmail 节点:
{{ $('Form Trigger').item.json['姓名'] }} 您好:
感谢报名“{{ $('Form Trigger').item.json['场次'] }}”场次讲座,
我们已收到您的报名,活动前一天会再次发送提醒。
因为上一个节点是 Google Sheets,所以使用 $('Form Trigger') 读取表单中的原始数据。
4. 通知管理员
接入 Telegram 或 Slack 节点,发送“新报名:姓名 / 场次”。
进阶:每天发送报名统计
[Schedule 每天 18:00] ─▶ [Google Sheets:Get Rows] ─▶ [Summarize:按场次计数] ─▶ [Send Email]
Summarize 节点设置:Fields to Split By 选择“场次”,Aggregation 选择 Count,即可得到每个场次的报名人数。
常见问题
数据量很大时速度慢或出错
Google Sheets API 有速率限制。大量写入时:
- 尽量一次写入多行,而不是每行调用一次
- 使用 Loop Over Items 分批处理,中间添加 Wait
数据超过数万条时,建议改用真正的数据库(PostgreSQL、MySQL),或 n8n 内置的 Data Tables(具体取决于版本)。
读取的数字变成字符串
表格单元格格式会影响读取结果。比较或计算前,使用 Number() 转换。
找不到列
确认第一行是列名,且名称前后没有多余空格。修改列名后,需要在节点中重新加载列。
更新于 2026年10月12日