Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何将我的google sheets文件中的一个选项卡导出为pdf格式,然后通过电子邮件发送?_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 如何将我的google sheets文件中的一个选项卡导出为pdf格式,然后通过电子邮件发送?

Google apps script 如何将我的google sheets文件中的一个选项卡导出为pdf格式,然后通过电子邮件发送?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在尝试使用应用程序脚本导出到pdf并通过电子邮件发送Google Sheets报告中的一个选项卡。我在另一本书中发现了一些非常有用的代码。但是,pdf导出包含工作簿中的每个选项卡,而不仅仅是我想发送的一个选项卡 代码本身在第3行和第4行中调用了“sending sheet 0”,但我不知道如何更改语法以只发送一个选项卡 为了方便起见,我已经包含了下面另一篇文章中的代码。你能帮我弄清楚如何只发送第二个标签吗 function sendSheetToPdfwithA1MailAdress(){

我正在尝试使用应用程序脚本导出到pdf并通过电子邮件发送Google Sheets报告中的一个选项卡。我在另一本书中发现了一些非常有用的代码。但是,pdf导出包含工作簿中的每个选项卡,而不仅仅是我想发送的一个选项卡

代码本身在第3行和第4行中调用了“sending sheet 0”,但我不知道如何更改语法以只发送一个选项卡

为了方便起见,我已经包含了下面另一篇文章中的代码。你能帮我弄清楚如何只发送第二个标签吗

function sendSheetToPdfwithA1MailAdress(){ // this is the function to call
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheets()[0]; // it will send sheet 0 wich is the first sheet in the spreadsheet.
  // if you change the number, change it also in the parameters below
  var shName = sh.getName()
  sendSpreadsheetToPdf(1, shName, ss.getSheetByName("Back End").getRange('C13').getValue(),"MacroTickets Ticketing Report ", "This is it !");
}
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
      + '&portrait=true'    // orientation, false for landscape
      + '&fitw=true'        // fit to width, false for actual size
      + '&sheetnames=true&printtitle=false&pagenumbers=true'  //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 +")", 
      "html content only", 
      mailOptions);

MailApp.sendEmail(
      Session.getActiveUser().getEmail(), 
      "FRWD "+subject+" (" + pdfName +")", 
      "html content only", 
      mailOptions);
  }
}
  • 您希望将活动电子表格中的第二个选项卡导出为PDF文件
  • 您希望通过修改问题中的脚本来实现这一点
如果我的理解是正确的,这次修改怎么样

问题: 在脚本中,当
sendSpreadsheetToPdf(0,shName,sh.getRange('A1').getValue(),“使用单元格A1中的地址测试电子邮件”,“就是这样!”)运行时,
sheetId
var sheetId=sheetNumber?电子表格.getSheets()[sheetNumber].getSheetId():null
null
。这样,所有图纸都将以
(sheetId?('&gid='+sheetId):('&id='+spreadsheetId))
导出

当您只想导出第二个选项卡时,请修改如下

sendSpreadsheetToPdf("0", shName, sh.getRange('A1').getValue(),"test email with the adress in cell A1 ", "This is it !");
修改脚本: 发件人: 致: 注:
  • 例如,当您只想导出第一个选项卡时,请按如下方式修改上面的内容

    sendSpreadsheetToPdf("0", shName, sh.getRange('A1').getValue(),"test email with the adress in cell A1 ", "This is it !");
    

如果我误解了你的问题,而这不是你想要的结果,我道歉。

不,你理解正确,谢谢你的回答。但是,您修改的脚本似乎适用于除我需要的选项卡之外的每个选项卡。需要注意的是,我的首选选项卡开始时是工作簿中的第二个选项卡,但在阅读代码中的第3行之后,我将其移动到了第一个选项卡。我在工作簿中有五个选项卡,其他每个选项卡都可以使用。如果我重新排序我的主工作表以与其他成功导出之一对齐,我会收到错误“无效电子邮件:主团队(第37行,文件“代码”)”。有什么想法吗?@econobro谢谢你的回复。给您带来不便,我深表歉意。1.我可以理解您希望通过修改脚本将活动电子表格中的第二个选项卡导出为PDF文件。我的理解正确吗?2.我无法理解
应该注意的是,我的首选选项卡开始时是工作簿中的第二个选项卡,但在阅读代码中的第3行后,我将其移动到了第一个选项卡。
。我能问一下吗?3.你能提供一份你期望的电子表格样本和输出样本吗?通过这个,我想修改它。当然,请删除您的个人信息。你好@tanaike,我能够调试我的电子邮件错误。你的答案有效。在指定要导出的选项卡之前,我必须将目标电子邮件地址与导出(第8行)分离。我将保存电子邮件的单元格移动到另一个选项卡上的C13,并将第6行修改为
sendSpreadsheetToPdf(1,shName,ss.getSheetByName(“后端”).getRange('C13').getValue(),“MacroTickets票务报告”,“就是这样!”)再次感谢您的帮助!!我已经更新了初始问题中的代码,以反映我的调试。
sendSpreadsheetToPdf("0", shName, sh.getRange('A1').getValue(),"test email with the adress in cell A1 ", "This is it !");