在 GmailApp 宣告的問題得到解決后,我現在遇到了一個新問題,關于我無法讀取的 pdf 附件。
在此錯誤之前,pdf 附件運行良好。
我懷疑 var "blobresponse" 或 "pdfOpts" 是問題的根源,但也許我錯了。
腳本有什么問題?你能解釋一下嗎?這是一個可重現的例子
function emailAsPDF() {
SpreadsheetApp.flush();
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheetByName("Recherche"));
var sheet = ss.getActiveSheet();
var gid = sheet.getSheetId();
var pdfOpts =
'exportFormat=pdf&format=pdf' // export as pdf
'&size=0' // paper size letter / You can use A4 or legal
'&portrait=false' // orientation portal, use false for landscape
'&fitw=true' // fit to page width false, to get the actual size
'&sheetnames=false&printtitle=true' // hide optional headers and footers
'&pagenumbers=true&gridlines=false' // hide page numbers and gridlines
'&horizontal_alignment=CENTER&vertical_alignment=CENTER'
'&fzr=true' // do not repeat row headers (frozen rows) on each page
'&attachment=false'
gid;
// '&size=0&fzr=true&portrait=false&fitw=true&gridlines=false&printtitle=true&sheetnames=false&pagenumbers=true&attachment=false&gid=' gid;
SourceSS = SpreadsheetApp.getActive();
var SourceSheet = SourceSS.getSheetByName("Recherche");
var url = 'https://docs.google.com/spreadsheets/d/' SourceSS.getId().replace(/edit$/, '') '/export?exportformat=pdf&format=pdf' pdfOpts;
//var url = 'https://docs.google.com/spreadsheets/d/'.replace(/edit$/, '') '/export?exportformat=pdf&format=pdf' pdfOpts;
var token = ScriptApp.getOAuthToken();
//var options = {
//options = {muteHttpExceptions: true};
//var options = {
var blobresponse = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' token,
},
muteHttpExceptions: true}
);
//options);
var CandidateName = ss.getRangeByName("Nom.Candidat").getValue();
var blob=blobresponse.getBlob().setName(ss.getName() " - " CandidateName ".pdf" );
var emailAddress = Session.getActiveUser().getEmail();
var signature = Gmail.Users.Settings.SendAs.get("me", emailAddress).signature;
var mess = "Voulez-vous envoyer votre rapport à l'adresse : " emailAddress;
var ans= Browser.msgBox("Courriel", mess, Browser.Buttons.YES_NO);
if (ans===Browser.Buttons.NO){return;}
var mess="Votre rapport a été envoyé à l'adresse : " emailAddress;
//var ss=SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Recherche");
var data = ss.getSheetByName("Données");
const corps = data.getRange("A24:E27").getValues();
const htmlTemplate = HtmlService.createTemplateFromFile("HtmlSigTemplate");
htmlTemplate.corps = corps;
var emailSubject = "Vérifications pré-emploi complétées" " - " CandidateName;
const htmlForEmail = htmlTemplate.evaluate().getContent() "--" "<br>" signature;
//console.log(htmlForEmail);
GmailApp.sendEmail(
emailAddress,
emailSubject,
corps,
{htmlBody: htmlForEmail,
attachments:[blob]});
Browser.msgBox("Courriel", mess, Browser.Buttons.OK);
}
function parentFolder() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var file = DriveApp.getFileById(ss.getId());
var ParentFolder= file.getParents();
while ( ParentFolder.hasNext() ) {
var folder = ParentFolder.next();
folderID=folder.getId();
Logger.log(folderID);
}
return folderID;
}
uj5u.com熱心網友回復:
經過漫長而痛苦的研究,我找到了罪魁禍首。您注意到變數pdfOpts中的最后一行缺少一些細節
舊代碼:
var pdfOpts =
'exportFormat=pdf&format=pdf' // export as pdf
'&size=0' // paper size letter / You can use A4 or legal
'&portrait=false' // orientation portal, use false for landscape
'&fitw=true' // fit to page width false, to get the actual size
'&sheetnames=false&printtitle=true' // hide optional headers and footers
'&pagenumbers=true&gridlines=false' // hide page numbers and gridlines
'&horizontal_alignment=CENTER&vertical_alignment=CENTER'
'&fzr=true' // do not repeat row headers (frozen rows) on each page
'&attachment=false'
gid;
新代碼:
const pdfOpts = '&top_margin=0.30&bottom_margin=0.30&left_margin=0.25&right_margin=0.25'
'&size=LETTER' // paper size letter / You can use A4 or legal
'&portrait=false' // orientation portal, use false for landscape
'&fitw=true' // fit to page width false, to get the actual size
'&sheetnames=false' // hide optional headers
'&printtitle=true' //and footers
'&pagenumbers=true' // hide page numbers
'&gridlines=false' //and gridlines
'&horizontal_alignment=CENTER'
'&vertical_alignment=CENTER'
'&fzr=true' // do not repeat row headers (frozen rows) on each page
'&attachment=false'
'&gid=' gid;
uj5u.com熱心網友回復:
代碼有幾個問題。我建議您通過洗掉冗余陳述句并采用更好的現代 JavaScript 實踐來開始清理腳本。IE
而不是var使用const或let。老谷歌Apps腳本代碼中使用var的所有時間,因為const并let沒有支持。當前的 Google Apps 腳本默認運行時會執行此操作。
有關的
- 使用“let”和“var”有什么區別?
- v8 JavaScript 對 const、let 和 var 的性能影響?
代替
ss.setActiveSheet(ss.getSheetByName("Recherche"));
var sheet = ss.getActiveSheet();
利用
const sheet = ss.getSheetByName("Recherche");
代替
SourceSS = SpreadsheetApp.getActive();
var SourceSheet = SourceSS.getSheetByName("Recherche");
var url = 'https://docs.google.com/spreadsheets/d/' SourceSS.getId().replace(/edit$/, '') '/export?exportformat=pdf&format=pdf' pdfOpts;
利用
const url = 'https://docs.google.com/spreadsheets/d/' ss.getId() '/export?exportformat=pdf&format=pdf' pdfOpts;
筆記:
getId()回傳電子表格 ID,它不包括edit.- 沒有必要為要匯出為 PDF 的電子表格和作業表宣告新變數,因為之前宣告的變數具有所需的物件。
此外,您可能會發現查看以前與使用UrlFetchApp來創建 PDF相關的問題會有所幫助,如下所示:
- 僅生成一張我的電子表格的 PDF
- 使用 Google Apps 腳本中的自定義頁眉或頁腳將 Google 表格匯出為 PDF
- 無法再為某些用戶從 Google Sheets 電子表格生成 PDF
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/379793.html
標籤:谷歌应用程序脚本 谷歌表格 pdf生成 urlfetch
上一篇:GoogleAppsScript:在將GoogleSheet轉換為PDFblob之前設定邊框
下一篇:Apps腳本:如何使用令牌
