![](/img/trans.png)
[英]Use script only on specific sheet not on all sheets in Google sheets
[英]Google Script to email PDF from specific google sheet sends all sheets on some sheets, not others
我有一个带有多个标签的Google电子表格。 我在每个工作表上都有一个按钮,该按钮调用函数来创建和发送活动工作表的pdf。 当工作表(标签)位于第一或第二位置时,生成的pdf是所有工作表,而不仅仅是活动工作表。 我该如何调整,使其每次仅发送活动工作表? 在我看来,问题出在使用索引号和getSheets()函数。 这是代码:
function sendSheetToPdf(){ // this is the function to call
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet(); // it will send the active sheet.
// if you change the number, change it also in the parameters below
var shName = sh.getName()
var shNum = (ss.getActiveSheet().getIndex() - 1)
sendSpreadsheetToPdf(shNum, sh.getRange('I5').getValue(), sh.getRange('F12').getValue(),sh.getRange('I3').getValue(), sh.getRange('B6').getValue());
}
function sendSpreadsheetToPdf(sheetNumber, pdfName, email,subject, htmlbody) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = spreadsheet.getId()
var sheetId = sheetNumber ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;
var url_base = spreadsheet.getUrl().replace(/edit$/,'');
var url_ext = 'export?exportFormat=pdf&format=pdf' //export as pdf
+ (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId))
// following parameters are optional...
+ '&size=A4' // paper size
+ '&printtitle=false'
+ '&scale=4'
+ '&portrait=false' // orientation, false for landscape
+ '&sheetnames=false'
+ '&pagenumbers=false' //hide optional headers and footers
+ '&gridlines=false' // hide gridlines
+ '&fzr=false'; // do not repeat row headers (frozen rows) on each page
var options = {
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(),
}
}
var response = UrlFetchApp.fetch(url_base + url_ext, options);
var blob = response.getBlob().setName(pdfName + '.pdf');
if (email) {
var mailOptions = {
attachments:blob, htmlBody:htmlbody
}
MailApp.sendEmail(
email,
subject+" (" + pdfName +")",
htmlbody,
mailOptions);
MailApp.sendEmail(
Session.getActiveUser().getEmail(),
"FRWD "+subject+" (" + pdfName +")",
htmlbody,
mailOptions);
}
}
问题的原因是以下两行。
var sheetId = sheetNumber ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;
+ (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId))
通过以上两行,出现以下问题。
sheetNumber
为0
, sheetId
变为null
。 sheetId
为0
且为null
,将使用'&id=' + spreadsheetId
。 gid=0
的图纸时,当活动图纸是索引0
(第一页)或索引1
(第二页)时,将使用'&id=' + spreadsheetId
。 在三元运算符if
, 0
和null
被判断为false
。 通过上述问题,当活动图纸为第一页和第二页时,将返回包含所有图纸的PDF文件。
我认为ss.getActiveSheet().getIndex()
始终具有索引数。
那么这些修改呢?
var sheetId = sheetNumber ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;
和
+ (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId))
var sheetId = spreadsheet.getSheets()[sheetNumber].getSheetId();
和
+ sheetId
如果要检查变量,如何进行如下修改?
var sheetId = !isNaN(sheetNumber) && sheetNumber >= 0 && sheetNumber < spreadsheet.getSheets().length ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;
和
+ (sheetId != null ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId))
如果这不是您想要的,对不起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.