Google Ads脚本调用sendEmail发送CSV附件出现内容截断问题求助
故障排查与解决方向
报告拉取环节问题
- 优先检查Google Ads报告拉取逻辑:Google Ads API默认返回分页数据,即使总数据量很小也不会一次性返回全量,多数截断问题是仅拉取了第一页数据导致,确认你在遍历报告行时完整执行了
report.hasNext()的全量循环,没有中途跳出。 - 可以强制指定分页大小拉全量:调用
AdsApp.report()时新增分页参数{pageSize: 10000},超过你预期的3100行,避免分页逻辑出错。 - 拉取完成后先打印日志验证行数:
Logger.log('报告总行数:' + csvContent.split('\n').length),确认是拉取阶段就丢失了数据,还是后续发送阶段才出现截断。
CSV内容生成环节问题
- 避免手动拼接CSV字符串:单元格内如果存在换行、双引号、逗号等特殊字符,未做转义处理会导致后续内容被识别为无效内容直接截断。建议统一处理单元格转义,每个单元格内容用双引号包裹,内容中原有的双引号替换为两个双引号。
- 不要用缓存类存储中间CSV内容:ScriptProperties、CacheService都有单条值存储上限,如果你把CSV内容存在这类服务里再读取,会触发上限自动截断,中间内容直接存在变量里即可。
邮件发送环节问题
- 检查附件构造逻辑:不要直接把字符串放入
attachments参数,必须转成指定编码的Blob,正确写法参考:
const csvBlob = Utilities.newBlob('', 'text/csv', '广告报告.csv') .setDataFromString(csvContent, 'UTF-8') MailApp.sendEmail({ to: '收件人邮箱', subject: '广告数据报告', attachments: [csvBlob] })
- 如果你怀疑是发送环节截断,可以先把生成的Blob存入Google Drive,检查Drive中的文件是否完整:
DriveApp.createFile(csvBlob),如果Drive文件正常但邮件附件截断,检查是否有邮箱服务商的附件过滤规则干扰。
脚本环境异常修复
- 你提到复制到新脚本可正常运行,大概率是旧脚本的授权状态或运行缓存异常:可以进入旧脚本的「项目设置」-「查看授权」,撤销原有授权后重新触发一次运行,重新获取完整权限。
- 清除旧脚本所有已存储的缓存值、属性值,避免历史错误数据干扰。
内容的提问来源于stack exchange,提问作者mhott1
相关产品推荐
相关产品推荐

