Google apps script 如何仅在从Google Sheets电子表格导出的pdf中包含特定范围

Google apps script 如何仅在从Google Sheets电子表格导出的pdf中包含特定范围,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个表,我想发送一个特定的范围(A1:O44)作为pdf文档,并在其他单元格中留下进一步的信息。目前,它是所有的功能发送这些表,所有的工作都很好,但是,我似乎无法得到正确的脚本,以限制它在一定范围内的工作表 在工作表中有2个选项卡,我希望这两个选项卡都作为同一个附件的一部分在一封电子邮件中发送(目前已设置)。通过单击顶部自定义提交菜单中的提交按钮生成电子邮件: 函数onOpen(){ var ui=SpreadsheetApp.getUi(); //或文档或格式。 ui.createMen

我有一个表,我想发送一个特定的范围(A1:O44)作为pdf文档,并在其他单元格中留下进一步的信息。目前,它是所有的功能发送这些表,所有的工作都很好,但是,我似乎无法得到正确的脚本,以限制它在一定范围内的工作表

在工作表中有2个选项卡,我希望这两个选项卡都作为同一个附件的一部分在一封电子邮件中发送(目前已设置)。通过单击顶部自定义提交菜单中的提交按钮生成电子邮件:

函数onOpen(){ var ui=SpreadsheetApp.getUi(); //或文档或格式。 ui.createMenu('SUBMIT') .addItem('SUBMIT','menuItem1') .addToUi(); } 函数menuItem1(){ SpreadsheetApp.getUi()//或DocumentApp或FormApp。 SendSheetTopDFwithaMailAddress(); } 函数SendSheetTopDFWithaMailAddress(){//这是要调用的函数 var ss=SpreadsheetApp.getActiveSpreadsheet(); var sh=ss.getSheetByName(“TEAM1”);//它将发送电子表格中的第一张工作表0。 //如果更改数字,请在下面的参数中也更改它 var practiceName=sh.getRange('E2').getValue() var startDate=sh.getRange('I4:L5').getValue(); var emailBody=sh.getRange('I45').getValue(); var staffName=sh.getRange('c43').getValue() var shName=Utilities.formatString('%s%s',practiceName,startDate) var message=“” +“

嗨,” +“

” +请查看附件中“+practiceName+”期间“+startDate+”的工资单信息 +“

” +“+emailBody+” +“

” +“如果您有任何问题,请告诉我” +“

” +“谢谢,“+staffName+” +“

” + ""; sendSpreadsheetToPdf(0,shName,sh.getRange('A46').getValue(),“工资汇总表”,“+消息+”); } 函数sendSpreadsheetToPdf(图纸编号、pdfName、电子邮件、主题、HTML正文){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var sh=ss.getSheetByName(“团队1”); var电子表格=SpreadsheetApp.getActiveSpreadsheet(); var spreadsheetId=spreadsheet.getId() var sheetId=sheetNumber?电子表格.getSheets()[sheetNumber].getSheetId():null; var url_base=spreadsheet.getUrl().replace(/edit$/,“”); var email2=sh.getRange('A47').getValue(); var email3=sh.getRange('A48').getValue(); var url_ext='export?exportFormat=pdf&format=pdf'//导出为pdf +(sheetId?('&gid='+sheetId):('&id='+spreadsheetId)) //以下参数是可选的。。。 +'&size=A4'//纸张大小 +“&trait=false”//方向,横向为false +“&fitw=true”//适合宽度,实际尺寸为false +“&sheetnames=true&printtitle=false&PageNumber=true”//隐藏可选的页眉和页脚 +“&gridlines=false”//隐藏网格线 +“&fzr=false”;//不要在每页上重复行标题(冻结行) 变量选项={ 标题:{ “授权”:“承载者”+ScriptApp.getOAuthToken(), } } var response=UrlFetchApp.fetch(url\u base+url\u ext,选项); var blob=response.getBlob().setName(pdfName+'.pdf'); 如果(电子邮件){ var mailpoptions={ 附件:blob,htmlBody:htmlBody,email2:email2 } MailApp.sendmail( 电子邮件, 主题+“(“+pdfName+”), “仅限html内容”, 邮件选项); MailApp.sendmail( 电邮2, 主题+“(“+pdfName+”), “仅限html内容”, 邮件选项); MailApp.sendmail( 电邮3, 主题+“(“+pdfName+”), “仅限html内容”, 邮件选项); } }


免责声明:我不相信谷歌官方支持使用查询参数来控制PDF导出,但它提供了实现目标所需的信息

问题出在
url\u ext
中存储的查询参数中

您必须包含
gid
,您可以从工作表编辑器的工作表URL中获取它(
/edit#gid=NUMBERS

您需要添加到
url\u ext

  • gid=NUMBERS
    (在URL中查找以获取数字)
  • ir=false
    (不知道它指的是什么)
  • ic=false
    (不知道它指的是什么)
  • r1=0
    (起始行,零索引)
  • c1=0
    (起始列,零索引)
  • r2=43
    (行尾,注意索引的更改)
  • c2=14
    (结束列,注意索引的变化)

我添加了这些,并且能够通过电子邮件发送选定工作表的选定部分。

免责声明:我不相信谷歌官方支持使用查询参数来控制PDF导出,但它提供了实现目标所需的信息

问题出在
url\u ext
中存储的查询参数中

您必须包含
gid
,您可以从工作表编辑器的工作表URL中获取它(
/edit#gid=NUMBERS

您需要添加到
url\u ext

  • gid=NUMBERS
    (在URL中查找以获取数字)
  • ir=false
    (不知道它指的是什么)
  • ic=false
    (不知道它指的是什么)
  • r1=0
    (起始行,零索引)
  • c1=0
    (起始列,零索引)
  • r2=43
    (行尾,注意索引的更改)
  • c2=14
    (结束列,注意索引的变化)

我添加了这些内容,并且能够通过电子邮件发送选定工作表的选定部分。

太棒了!非常感谢你的邀请!它非常适合这个范围。太棒了,太棒了!非常感谢你的邀请!它非常适合这个范围。太棒了。
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('SUBMIT')
      .addItem('SUBMIT', 'menuItem1')
      .addToUi();
}

function menuItem1() {
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
     sendSheetToPdfwithA1MailAdress();
  
}

function sendSheetToPdfwithA1MailAdress(){ // this is the function to call
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName("TEAM1"); // it will send sheet 0 which is the first sheet in the spreadsheet.
  // if you change the number, change it also in the parameters below
  var practiceName = sh.getRange('E2').getValue()
  var startDate = sh.getRange('I4:L5').getValue();
  var emailBody = sh.getRange('I45').getValue();
  var staffName = sh.getRange('c43').getValue()
var shName = Utilities.formatString('%s %s',practiceName, startDate)
var message = "<HTML><BODY>"
        + "<P>Hi,"
        + "<br /><br />"
        + " Please find attached the payroll info for " + practiceName + " for the period " + startDate + "."
        + "<br /><br />" 
        + "" + emailBody + "."
        + "<br /><br />" 
        + " If you have any question please let me know"
        + "<br /><br />"
        + "Thanks, " + staffName + "."
        + "<br /><br />"
        + "</HTML></BODY>";
  sendSpreadsheetToPdf(0, shName, sh.getRange('A46').getValue(),"Payroll Summary", " " + message + " ");
}
function sendSpreadsheetToPdf(sheetNumber, pdfName, email,subject, htmlbody) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName("TEAM1");
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheetId = spreadsheet.getId()  
  var sheetId = sheetNumber ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;  
  var url_base = spreadsheet.getUrl().replace(/edit$/,'');
  var email2 = sh.getRange('A47').getValue();
  var email3 = sh.getRange('A48').getValue();

  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=false'    // 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, email2:email2 
    }
MailApp.sendEmail(
      email, 
      subject+" (" + pdfName +")", 
      "html content only",  
      mailOptions);
    
MailApp.sendEmail(
      email2, 
      subject+" (" + pdfName +")", 
      "html content only",  
      mailOptions);

MailApp.sendEmail(
      email3, 
      subject+" (" + pdfName +")", 
      "html content only",  
      mailOptions);
  }
}