Google Apps Script需求:单元格非空时自动发送Sheet内容至指定邮箱
解决Google Apps Script自动导出Sheet并发送动态收件人邮件问题
完整修正代码
function checkAndExport() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheetName = 'Bookings List'; var sheet = spreadsheet.getSheetByName(sheetName); // 检查B3单元格是否非空 var checkCell = sheet.getRange('B3'); var cellValue = checkCell.getValue(); if (cellValue !== '') { // 1. 动态获取收件人邮箱(从I1单元格读取) var recipientEmail = sheet.getRange('I1').getValue(); if (!recipientEmail) { SpreadsheetApp.getUi().alert('I1单元格未填写收件人邮箱'); return; } // 2. 导出Sheet为CSV格式并生成Blob var dataRange = sheet.getDataRange(); var data = dataRange.getValues(); // 生成CSV内容,处理带逗号的单元格 var csvContent = data.map(row => row.map(cell => typeof cell === 'string' && cell.includes(',') ? `"${cell}"` : cell ).join(',') ).join('\n'); var csvBlob = Utilities.newBlob(csvContent, 'text/csv', `${sheetName}.csv`); // 3. 邮件配置与发送 var subject = 'Bookings List 自动导出提醒'; var body = '以下是最新的Bookings List数据附件,请查收。'; var options = { name: 'Google Sheets 自动导出', attachments: [csvBlob] }; // 发送邮件 MailApp.sendEmail(recipientEmail, subject, body, options); } } // 可选:导出为XLSX格式的辅助函数 function exportAsXlsx(sheet, sheetName) { var spreadsheetId = sheet.getParent().getId(); var url = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/export?format=xlsx&gid=${sheet.getSheetId()}`; var token = ScriptApp.getOAuthToken(); var response = UrlFetchApp.fetch(url, { headers: { 'Authorization': `Bearer ${token}` } }); return response.getBlob().setName(`${sheetName}.xlsx`); }
关键修改说明
- 动态收件人处理:直接从
Bookings List表的I1单元格读取邮箱地址,同时增加空值校验,避免因未填写邮箱导致发送失败。 - CSV导出逻辑优化:移除原代码中错误的
DocumentApp调用,直接通过Sheet数据生成合规的CSV字符串,自动处理带逗号的单元格(用双引号包裹),保证CSV格式正确。 - 完善邮件发送:补全
MailApp.sendEmail调用,将生成的CSV Blob添加到邮件附件,同时优化邮件主题和内容的可读性。 - XLSX导出支持:如果需要XLSX格式,可调用
exportAsXlsx函数获取XLSX Blob,替换邮件附件中的csvBlob即可。
使用注意事项
- 首次运行脚本时需完成权限申请,确保脚本拥有
MailApp和UrlFetchApp的使用权限。 - 确认
Bookings List表的I1单元格已正确填写收件人邮箱。 - 可通过Google Sheets的触发器功能,设置脚本定时执行(如每日固定时间),实现全自动化导出发送。
内容的提问来源于stack exchange,提问作者To Do
相关产品推荐
相关产品推荐

