使用App Script发送谷歌表格多图表报错:文档访问失败
谷歌表格App Script发送内嵌图表邮件报错排查与解决
我尝试通过Google App Script从谷歌表格发送多个图表,将图表以HTML图片形式嵌入邮件正文时运行脚本出现报错,报错信息如下:
Error Exception: Service Spreadsheets failed while accessing document with id 1Rs1y1o6bb_XA_XumCrRMYPjS4drHqFvmOIKFyAJXLqA. at sendCharts(Code:15:35)
相关代码:
function sendCharts() { var spSheet = SpreadsheetApp.getActiveSpreadsheet(); var chartSheet = spSheet.getSheetByName("Sheet1"); var bodyEmail = "Hi All, <br> Please find below the Dropship Performance. <br> " var charts = chartSheet.getCharts(); var emailCharts = {}; var bodyChart = ""; var temp = charts.length for(var chartNo=0; chartNo <= temp-1; chartNo++){ var img = charts[chartNo].getAs("image/png"); emailCharts["chart" + (chartNo+1)]=img bodyChart = bodyChart + "<br><p align='center'><img src='cid:chart" + (chartNo+1)+"'></p>"; } bodyEmail = bodyEmail + bodyChart; GmailApp.sendEmail("abc@gmail.com", "Latest Report","",{htmlBody:bodyEmail,inlineImages:emailCharts}) }
排查与解决方案
权限验证
脚本可能缺少访问表格或Gmail的权限。重新运行脚本,在弹出的授权窗口中完成权限确认,确保脚本被授予Google Sheets和Gmail的访问权限。定位异常图表
报错触发在图表转PNG的步骤(第15行getAs("image/png")),说明某张图表无法正常转换。添加日志排查具体图表:for(var chartNo=0; chartNo <= temp-1; chartNo++){ Logger.log("处理图表序号:" + (chartNo+1) + ",图表ID:" + charts[chartNo].getId()); var img = charts[chartNo].getAs("image/png"); // 剩余代码 }运行后查看「查看 > 日志」,找到触发报错的图表,检查其数据源是否为空、数据范围是否有效,或图表配置是否存在异常,修正或移除问题图表后重试。
避免表格访问冲突
确保当前表格未被其他用户编辑,且处于完全同步状态。关闭表格后重新运行脚本,避免因并发访问导致的服务异常。优化循环逻辑
原循环条件chartNo <= temp-1可简化为chartNo < charts.length,减少冗余变量,降低索引错误风险:for(var chartNo=0; chartNo < charts.length; chartNo++){ // 原循环内容 }检查Gmail服务限制
确认Gmail发送限额未被触发,测试时使用有效接收邮箱,避免短时间内重复发送大量邮件导致服务限制。
内容的提问来源于stack exchange,提问作者Shubh Gurung
相关产品推荐
相关产品推荐

