如何基于Gmail邮件自动更新或新增数据到Google Sheets
实现Gmail关联数据自动同步到Google Sheets的方案
核心通过Google Sheets内置的Apps Script实现,无需第三方工具,操作步骤如下:
步骤1:打开绑定的脚本编辑器
- 打开你的目标Google Sheets表格
- 点击顶部菜单栏「扩展程序」-「Apps Script」,进入脚本编辑页面,删除默认的
myFunction模板代码
步骤2:粘贴同步脚本
将下方代码粘贴到编辑器中,可根据实际情况修改开头的配置参数:
function syncGmailToSheets() { // 可修改的配置项 const SHEET_NAME = "Sheet1"; // 替换为你自己的工作表名称 const HEADER_ROW = 1; // 表头所在的行数,默认第一行是*Name、*Email、*Gmail Label表头 const MAX_THREADS_PER_LABEL = 100; // 每个标签最多同步最近多少封邮件,最大可设为500 // 获取工作表已有数据,用于去重 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME); const existingData = sheet.getDataRange().getValues(); const existingEmails = existingData.slice(HEADER_ROW) .map(row => row[1]?.toString().trim()) .filter(email => email); // 取第二列Email作为去重依据 const newRows = []; // 获取Gmail所有自定义标签 const gmailLabels = GmailApp.getUserLabels(); gmailLabels.forEach(label => { // 获取当前标签下的邮件线程 const threads = label.getThreads(0, MAX_THREADS_PER_LABEL); threads.forEach(thread => { const messages = thread.getMessages(); messages.forEach(msg => { // 提取发件人名称和邮箱,如需同步收件人可把getFrom()改为getTo() const fromInfo = msg.getFrom(); const nameMatch = fromInfo.match(/^(.*?)\s*</); const emailMatch = fromInfo.match(/<(.*?)>/); const senderName = nameMatch ? nameMatch[1].trim() : fromInfo; const senderEmail = emailMatch ? emailMatch[1].trim() : fromInfo; // 跳过已存在的邮箱,避免重复写入 if (senderEmail && !existingEmails.includes(senderEmail)) { newRows.push([senderName, senderEmail, label.getName()]); existingEmails.push(senderEmail); } }) }) }) // 把新数据写入表格末尾 if (newRows.length > 0) { sheet.getRange(existingData.length + 1, 1, newRows.length, 3).setValues(newRows); } }
步骤3:首次运行授权
- 点击脚本编辑器顶部的「运行」按钮,第一次触发会要求账号授权
- 遇到「Google未验证应用」提示时,点击「高级」-「前往[你的项目名]」完成授权即可,脚本为你本人编写,无安全风险
- 运行完成后返回Google Sheets即可看到同步的数据
步骤4:设置自动同步
如果不需要手动运行,可设置定时触发自动更新:
- 点击脚本编辑器左侧的「触发器」(闹钟样式图标)
- 点击右下角「添加触发器」
- 选择触发函数为
syncGmailToSheets,触发类型选「时间驱动」,按需求设置同步频率(每小时、每天等)即可
注意事项
- 如果只需要同步特定Gmail标签的邮件,可在
GmailApp.getUserLabels()后加过滤规则,比如只保留名称包含「客户」的标签 - 脚本默认保留已有数据仅新增条目,如需覆盖旧数据可删除去重判断的相关逻辑
内容的提问来源于stack exchange,提问作者Mmm Mmm
相关产品推荐
相关产品推荐

