Google Apps Script需求:指定单元格触发时发送自定义命名PDF邮件
解决方案:Google Sheets触发PDF生成并邮件发送
核心修改点
- 新增E1单元格值触发逻辑,仅当值为"Ready"时执行操作
- 动态获取
Make Quote工作表的C5值作为PDF文件名,C6值作为收件邮箱 - 添加邮件发送功能,将生成的PDF作为附件发送
- 优化PDF生成方式,支持指定导出工作表(可选)
完整代码实现
function handleQuoteReady() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const targetSheet = ss.getSheetByName('Make Quote'); const triggerValue = targetSheet.getRange('E1').getValue(); // 仅当E1为"Ready"时执行后续操作 if (triggerValue !== 'Ready') return; // 获取关键配置值 const pdfName = targetSheet.getRange('C5').getValue().trim(); const sendTo = targetSheet.getRange('C6').getValue().trim(); // 校验必填字段 if (!pdfName || !sendTo) { SpreadsheetApp.getUi().alert('请确保C5(PDF文件名)和C6(收件邮箱)不为空!'); return; } // 配置PDF导出参数(可按需调整) const exportParams = { format: 'pdf', sheetId: targetSheet.getSheetId(), // 仅导出Make Quote工作表,移除则导出整个表格 fitToPage: true, printTitle: false, landscape: false }; // 生成PDF Blob const exportUrl = `https://docs.google.com/spreadsheets/d/${ss.getId()}/export?${Object.entries(exportParams).map(([key, val]) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&')}`; const authToken = ScriptApp.getOAuthToken(); const pdfResponse = UrlFetchApp.fetch(exportUrl, { headers: { 'Authorization': `Bearer ${authToken}` } }); const finalPdfBlob = pdfResponse.getBlob().setName(`${pdfName} - ${Utilities.formatDate(new Date(), 'GMT-8', 'yyyy-MM-dd')}`); // 保存PDF到指定文件夹 let targetFolder = DriveApp.getFoldersByName('Quote').next(); // 可选:自动创建文件夹(如果不存在) // if (!targetFolder) targetFolder = DriveApp.createFolder('Quote'); targetFolder.createFile(finalPdfBlob); // 发送邮件 MailApp.sendEmail({ to: sendTo, subject: `报价单:${pdfName}`, body: '您好,附件为您所需的报价单PDF文件。', attachments: [finalPdfBlob] }); // 重置触发单元格,避免重复执行 targetSheet.getRange('E1').setValue('Done'); }
配置步骤
- 打开Google Sheets的脚本编辑器(扩展 > Apps 脚本)
- 将上述代码替换原有代码,保存项目
- 设置可安装触发器:
- 点击左侧「触发器」图标 → 「添加触发器」
- 选择函数:
handleQuoteReady - 事件源:「从电子表格」
- 事件类型:「更改时」
- 保存并完成授权流程
内容的提问来源于stack exchange,提问作者Sonia Butt
相关产品推荐
相关产品推荐

