Google App Script导出单张幻灯片为PDF报错,求正确实现方案
Google幻灯片单张导出PDF并邮件发送问题
问题背景
- 关联Google表单的Google表格,表单提交时脚本会将数据填入Google幻灯片固定位置的文本框
- 两个不同表单对应同一演示文稿内的两张不同幻灯片
- 需要将修改后的单张目标幻灯片导出为PDF,发送到表单提供的邮箱地址
报错情况
修改原表格导出PDF的代码(替换表格ID为演示文稿ID、工作表ID为幻灯片ID)后,出现404错误:
Exception: Request failed for https://docs.google.com returned code 404. Truncated server response: <meta name="viewport" c... (use muteHttpExceptions option to examine full response)
错误触发于代码第13行:var contents = result.getContent();
若将两个ID都设为演示文稿ID,程序可运行但会导出包含全部幻灯片的PDF,不符合需求。
当前使用代码
function Email3UpPDF () { Logger.log("Emailing!"); var Sapp = SpreadsheetApp; var FS = Sapp.getActiveSpreadsheet().getSheetByName("3UP Submissions"); var ssID = "10Up_PcLxVopXont9Qcu-yk-PrFGWfWPQ3ETsgys4v0Y" var shID = "g2580bcdba17_0_22" var Addy1 = FS.getRange("N"+FS.getLastRow()).getValue(); var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}}; var url = "https://docs.google.com/presentation/d/"+ ssID + "/export?format=pdf&id="+shID; //This creates the PDF export url var result = UrlFetchApp.fetch(url , requestData); var contents = result.getContent(); MailApp.sendEmail(Addy1,"Local Sign Template" ,"Here is your custom sign Template.", {attachments:[{fileName: "LST3UP.pdf", content:contents, mimeType:"application/pdf"}]}); }
解决方案
Google幻灯片导出单张幻灯片的URL参数与表格不同,核心错误是误用了表格导出的id参数,幻灯片需用slideIds指定目标幻灯片ID。
修正后的完整代码
function Email3UpPDF () { Logger.log("Emailing!"); var Sapp = SpreadsheetApp; var FS = Sapp.getActiveSpreadsheet().getSheetByName("3UP Submissions"); var presentationId = "10Up_PcLxVopXont9Qcu-yk-PrFGWfWPQ3ETsgys4v0Y"; var targetSlideId = "g2580bcdba17_0_22"; var recipientEmail = FS.getRange("N"+FS.getLastRow()).getValue(); var requestHeaders = {"Authorization":"Bearer "+ScriptApp.getOAuthToken()}; // 关键修正:使用slideIds参数指定单张幻灯片 var exportUrl = `https://docs.google.com/presentation/d/${presentationId}/export?format=pdf&slideIds=${targetSlideId}`; try { var response = UrlFetchApp.fetch(exportUrl, {method: "GET", headers: requestHeaders, muteHttpExceptions: true}); if (response.getResponseCode() !== 200) { Logger.log("导出失败,响应内容:" + response.getContentText()); return; } var pdfContent = response.getContent(); MailApp.sendEmail(recipientEmail, "Local Sign Template", "Here is your custom sign Template.", { attachments: [{ fileName: "LST3UP.pdf", content: pdfContent, mimeType: "application/pdf" }] }); } catch (e) { Logger.log("发送邮件出错:" + e.toString()); } }
关键修改点
- URL参数修正:将原
id=替换为slideIds=,这是幻灯片导出单页的正确参数 - 错误处理优化:添加
muteHttpExceptions: true和响应码检查,便于调试导出失败的原因 - 变量名优化:将
ssID/shID改为更清晰的presentationId/targetSlideId,提升代码可读性
内容的提问来源于stack exchange,提问作者Noah Galvin
相关产品推荐
相关产品推荐

