我正在尝试使用以下代码将电子表格中的当前工作表转换为pdf并通过电子邮件发送:
function sendEmailPDF(pdfName, email, title, body) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var sheetId = sheet.getSheetId();
var url_base = ss.getUrl().replace(/edit$/,'');
var url_ext = 'exportFormat=pdf' //export as pdf
+ '&format=pdf' //export as pdf
+ '&size=letter' // paper size
+ '&portrait=true' // orientation, false for landscape
+ '&fitw=true' // fit to width, false for actual size
+ '&sheetnames=false' //hide optional headers and footers
+ '&printtitle=false' //hide optional headers and footers
+ '&pagenumbers=false' //hide page numbers
+ '&gridlines=false' // hide gridlines
+ '&fzr=false' // do not repeat row headers (frozen rows) on each page
+ '&gid=' //the sheet's Id
var token = ScriptApp.getOAuthToken();
var params = {
headers: {
'Authorization': 'Bearer ' + token,
},
'muteHttpExceptions' : true
};
var response = UrlFetchApp.fetch(url_base + url_ext + sheetId, params)
var blob = response.getBlob().setName(pdfName + ".pdf");
var mailOptions = {attachments:blob, htmlBody:body};
if (MailApp.getRemainingDailyQuota() > 0){
MailApp.sendEmail(
email,
title,
"html content only",
mailOptions
);
}
}
现在代码执行没有错误,并且我收到一封附有pdf的电子邮件,但是我无法打开它,因为我收到一条错误消息,指出它已损坏并且无法打开。
当我在第24行删除以下代码时: 'muteHttpExceptions':是 该代码无法执行,并且我的日志中出现以下错误:
Request failed for https://docs.google.com/spreadsheets/d/146PS13Dz2HOzljUsH-umTU1FUIlcL1UCFqANAqNRUP0/exportFormat=pdf&format=pdf&size=letter&portrait=true&fitw=true&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&fzr=false&gid=133193667 returned code 404. Truncated server response: <!DOCTYPE html><html lang="en"><head><meta name="description" content="Web word processing, presentations and spreadsheets"><meta name="viewport" c... (use muteHttpExceptions option to examine full response) at sendEmailPDF(sendEmailPDF:27) at submitNewProject(submitNewProject:264) at userOnEdit(On Edit:68) at userOnEdit(Code:2)
我在上下搜索,查看了如何使用Apps Script通过电子邮件发送pdf的不同代码示例,但是似乎没有一个对我有用。
感谢您的帮助!
答案 0 :(得分:0)
我认为您的脚本中有2个修改点。
请尝试如下插入?
。
var url_base = ss.getUrl().replace(/edit$/,'');
var url_base = ss.getUrl().replace(/edit$/,'') + "export?";
附件BlobSource []与电子邮件一起发送的文件数组(请参见示例)
blob是一个数组。因此,请进行如下修改。
var mailOptions = {attachments:blob, htmlBody:body};
var mailOptions = {attachments: [blob], htmlBody:body};
我认为当blob只有一个时,attachments:blob
起作用。如果要发送多个Blob,请使用一个数组。
如果仍然无法解决,请告诉我。我想修改它。
答案 1 :(得分:0)
正在向KingOfTheNerds求助... 我有类似的问题,有一天我的代码停止工作。上面的解决方案不能解决我的问题。 但是我发现问题出在行代码中:
var url_base = spreadsheet.getUrl().replace(/edit$/,'');
因为我的电子表格链接未以“ edit”一词结束。
我的解决方案是将提到的行更改为:
var url_base = spreadsheet.getUrl().replace(/edit.+/,'');
我希望它能对某人有所帮助:)