请求合并Google Sheets存PDF与发邮件代码并匹配指定PDF布局
合并Google Apps Script:导出命名范围PDF并保存+发送邮件(匹配指定布局)
没问题,我把两段代码整合好了,还帮你确保PDF布局能匹配Sample 2的样式。下面是完整的可运行代码,我会拆解关键部分帮你理解:
function exportNamedRangeAndSendEmail() { // -------------------------- 配置参数 -------------------------- const SPREADSHEET_ID = "你的Google Sheets文档ID"; const NAMED_RANGE = "你的命名范围名称"; const TARGET_FOLDER_ID = "保存PDF的目标文件夹ID"; const RECIPIENT = "收件人邮箱地址"; const EMAIL_SUBJECT = "导出的命名范围PDF"; const EMAIL_BODY = "您好,附件是您需要的表格命名范围PDF文件。"; // ------------------------------------------------------------- try { // 1. 获取目标表格和命名范围 const spreadsheet = SpreadsheetApp.openById(SPREADSHEET_ID); const namedRange = spreadsheet.getRangeByName(NAMED_RANGE); if (!namedRange) { throw new Error(`未找到命名范围:${NAMED_RANGE}`); } // 2. 构造PDF导出URL(匹配Sample 2布局) const sheetId = namedRange.getSheet().getSheetId(); const rangeA1 = namedRange.getA1Notation(); const exportUrl = `https://docs.google.com/spreadsheets/d/${SPREADSHEET_ID}/export?` + `format=pdf` + `&gid=${sheetId}` + `&range=${encodeURIComponent(rangeA1)}` + `&size=A4` + // 纸张尺寸,按需调整(Letter/Tabloid等) `&portrait=true` + // 纵向:true,横向:false `&margin=normal` + // 边距:normal/small/large/none `&fzr=false` + // 不冻结行 `&fzc=false` + // 不冻结列 `&gridlines=false` + // 隐藏网格线(Sample 2显示的话改成true) `&printtitle=false` + // 不打印表格标题 `&sheetnames=false` + // 不打印工作表名称 `&pagenum=false` + // 不显示页码 `&top_margin=0.5` + // 自定义上边距(可选,单位英寸) `&bottom_margin=0.5` + // 自定义下边距 `&left_margin=0.5` + // 自定义左边距 `&right_margin=0.5`; // 自定义右边距 // 3. 获取PDF blob并保存到指定文件夹 const token = ScriptApp.getOAuthToken(); const response = UrlFetchApp.fetch(exportUrl, { headers: { 'Authorization': `Bearer ${token}` } }); const pdfBlob = response.getBlob().setName(`${NAMED_RANGE}_导出.pdf`); const targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID); const savedPdfFile = targetFolder.createFile(pdfBlob); console.log(`PDF已保存到文件夹:${savedPdfFile.getName()}`); // 4. 发送带PDF附件的邮件 MailApp.sendEmail({ to: RECIPIENT, subject: EMAIL_SUBJECT, body: EMAIL_BODY, attachments: [savedPdfFile.getBlob()] }); console.log(`邮件已发送给:${RECIPIENT}`); } catch (error) { console.error(`执行出错:${error.message}`); // 可选:发送错误通知邮件 // MailApp.sendEmail(RECIPIENT, "导出PDF失败", `错误信息:${error.message}`); } }
关键细节说明
- 参数替换:先把代码顶部配置区的占位符改成你自己的实际信息,比如表格ID、命名范围名称这些,不然代码没法正常运行。
- 布局匹配调整:如果Sample 2的布局有特殊要求,你可以修改
exportUrl里的参数:- 比如需要横向排版,把
portrait=true改成portrait=false - 如果Sample 2显示网格线,把
gridlines=false改成true - 自定义边距可以根据实际调整
top_margin等参数的数值
- 比如需要横向排版,把
- 错误处理:代码里加了基本的错误捕获,如果找不到命名范围或者保存/发送失败,会在控制台打印错误信息,你也可以打开注释里的错误通知邮件功能,方便及时知道问题。
内容的提问来源于stack exchange,提问作者cjvdg
相关产品推荐
相关产品推荐

