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 是否有办法将电子表格的多个选项卡(但不是全部)打印为单个pdf?_Google Apps Script_Pdf Generation - Fatal编程技术网

Google apps script 是否有办法将电子表格的多个选项卡(但不是全部)打印为单个pdf?

Google apps script 是否有办法将电子表格的多个选项卡(但不是全部)打印为单个pdf?,google-apps-script,pdf-generation,Google Apps Script,Pdf Generation,我做了一些研究,但还没有找到任何方法。尝试按照Andrew Roberts在此处解释的方法将电子表格(或特定选项卡)转换为pdf: 查看评论,他建议添加以下代码,我将其放入另一个函数中: function printtwopdfs() { var sheetNames = ["Table1,"Table2"] sheetNames.forEach(function(sheetName) { convertSpreadsheetToPdf(TEST_EMAIL, "xxxxxx

我做了一些研究,但还没有找到任何方法。尝试按照Andrew Roberts在此处解释的方法将电子表格(或特定选项卡)转换为pdf:

查看评论,他建议添加以下代码,我将其放入另一个函数中:

  function printtwopdfs() {

  var sheetNames = ["Table1,"Table2"]

  sheetNames.forEach(function(sheetName) {
  convertSpreadsheetToPdf(TEST_EMAIL, "xxxxxx", sheetName, 
  "pdfteste")
  })}
但我得到的是每一张单独打印成一份pdf的


隐藏除我想要的选项卡之外的所有选项卡并整体打印电子表格对我来说不是一个选项,因为它有太多的选项卡(大约15个)。除此之外,我不太可能将所选的工作表复制到新的电子表格中,因为该功能运行时间太长,除非我可以很快完成。有没有关于如何继续的想法?

如果我理解正确:

  • 您希望在单个PDF中打印部分但不是全部工作表
  • 您可以通过隐藏不需要的工作表并打印完整的电子表格(只有未隐藏的工作表才能打印)来实现这一点
  • 每次要打印PDF时,隐藏和显示不需要的工作表是很不舒服的,特别是当有很多工作表时
如果上述内容正确,则可以使用脚本,首先隐藏不需要的工作表,然后打印PDF,最后再次显示这些不需要的工作表。可以通过以下方式完成(有关更多详细信息,请查看内联注释):

功能转换电子表格TopDF(电子邮件、电子表格ID、SheetStopPrint){
var ss=电子表格应用程序openById(电子表格ID);
//获取电子表格中所有工作表的名称:
var allSheets=ss.getSheets().map(函数(工作表){
return sheet.getName();
});
//获取要忽略的图纸的名称:
var sheetsToHide=allSheets.filter(函数(sheetName){
返回sheetsToPrint.indexOf(sheetName)=-1;
});
//隐藏要忽略的图纸:
sheetsToHide.forEach(函数(sheetName){
var sheet=ss.getSheetByName(sheetName);
sheet.hideSheet();
})
var pdfName=ss.getName();
var parents=DriveApp.getFileById(电子表格ID).getParents();
var folder=parents.hasNext()?parents.next():DriveApp.getRootFolder();
var url_base=ss.getUrl().replace(/edit$/,“”);
var url_ext='export?exportFormat=pdf&format=pdf'//导出为pdf
//打印整个电子表格(仅未隐藏的表格):
+“&id=”+电子表格id
//以下参数是可选的。。。
+'&size=A4'//纸张大小
+“&trait=false”//方向,横向为false
+“&fitw=true”//适合宽度,实际尺寸为false
+“&sheetnames=false&printtitle=false&PageNumber=false”//隐藏可选的页眉和页脚
+“&gridlines=false”//隐藏网格线
+“&fzr=false”;//不要在每页上重复行标题(冻结行)
变量选项={
标题:{
“授权”:“承载者”+ScriptApp.getOAuthToken(),
}
}
var response=UrlFetchApp.fetch(url\u base+url\u ext,选项);
var blob=response.getBlob().setName(pdfName+'.pdf');
folder.createFile(blob);
如果(电子邮件){
var mailpoptions={
附件:blob
}
MailApp.sendmail(
电子邮件,
“这是一个名为“+pdfName”的文件,
“如果您有任何问题或意见,请告诉我。”,
邮件选项);
}
//显示被忽略的图纸:
sheetsToHide.forEach(函数(sheetName){
var sheet=ss.getSheetByName(sheetName);
sheet.showSheet();
})    
}
此函数接受
电子邮件
电子表格ID
和由要打印的图纸名称组成的数组作为参数。一个可能的电话可能是这样的:

convertSpreadsheetToPdf(“您的-email@your-域“,”您的电子表格id“,[“Sheet1”,“Sheet2”,“Sheet5”])
为了实现这一点,我对这段代码进行了一些简化(PDF的名称始终是电子表格的名称,并且您必须始终提供电子表格id),但是可以随时恢复这些更改

参考:
我希望这能有所帮助。

  • 您希望通过从Google电子表格中选择工作表来创建PDF文件。
    • 谷歌电子表格有15张表格
    • 例如,您希望选择两张“Table1”和“Table2”,并希望将它们创建为一个PDF文件。然后,PDF文件将作为电子邮件发送
  • 您希望降低实现上述目标的过程成本。
    • 您希望在20秒内完成脚本的运行
  • 您希望使用谷歌应用程序脚本实现这一点
从你的提问和回答中,我可以理解上述内容。如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

在这种情况下,我认为除了要使用的表之外,隐藏其他表可能是合适的。为此,我建议在sheets API中使用spreadsheets.batchUpdate方法隐藏这些表。因为我认为在这种情况下,Sheets API的处理成本可以低于电子表格服务

流量: 此修改脚本的流程如下所示

  • 隐藏图纸,但要创建为PDF文件的图纸除外
  • 从电子表格创建PDF文件
  • 显示所有表格
  • 修改脚本: 在运行脚本之前。请设置
    sheetNames
    email
    spreadsheetId
    的变量。并运行函数
    printtowdfs()

    注:
    • 在我的环境中,当上面的脚本用于Google电子表格(包括20张以单元格为单位的表)时,获得了大约5秒的处理时间。但我不确定这是否适用于你的实际情况。我为此道歉
    参考资料:

    我可以问一下你的目标吗?1.关于
    隐藏所有选项卡,除了I
    
      function printtwopdfs() {
    
      var sheetNames = ["Table1,"Table2"]
    
      sheetNames.forEach(function(sheetName) {
      convertSpreadsheetToPdf(TEST_EMAIL, "xxxxxx", sheetName, 
      "pdfteste")
      })}
    
    function convertSpreadsheetToPdf(email, spreadsheetId, pdfName) {
      var spreadsheet = spreadsheetId ? SpreadsheetApp.openById(spreadsheetId) : SpreadsheetApp.getActiveSpreadsheet();
      var spreadsheetId = spreadsheetId ? spreadsheetId : spreadsheet.getId();
      var pdfName = pdfName ? pdfName : spreadsheet.getName();
      var parents = DriveApp.getFileById(spreadsheetId).getParents();
      var folder = parents.hasNext() ? parents.next() : DriveApp.getRootFolder();
      var url_base = spreadsheet.getUrl().replace(/edit$/,'');
      var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf
      + '&id=' + spreadsheetId
      + '&size=A4'      // paper size
      + '&portrait=false'    // orientation, false for landscape
      + '&fitw=true'        // fit to width, false for actual size
      + '&sheetnames=false&printtitle=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');
      folder.createFile(blob);
      if (email) {
        var mailOptions = {attachments:blob}
        MailApp.sendEmail(email, "Here is a file named " + pdfName, "Please let me know if you have any questions or comments.", mailOptions);
      }
    }
    
    // Please run this function.
    function printtwopdfs() {
      var sheetNames = ["Table1", "Table2"];
      var email = "###";  // Please set email address.
      var spreadsheetId = "###";  // Please set Spreadsheet ID.
    
      // Hide sheets.
      var allSheets = SpreadsheetApp.openById(spreadsheetId).getSheets();
      var hiddenResource = allSheets.map(function(s) {
        var obj = {updateSheetProperties: {properties: {sheetId: s.getSheetId(), hidden: true}, fields: "hidden"}};
        if (sheetNames.indexOf(s.getSheetName()) != -1) obj.updateSheetProperties.properties.hidden = false;
        return obj;
      });
      Sheets.Spreadsheets.batchUpdate({requests: hiddenResource}, spreadsheetId);
    
      // Create PDF file.
      convertSpreadsheetToPdf(email, spreadsheetId, "pdfteste");
    
      // Show all sheets.
      var showResource = allSheets.map(function(s) {return {updateSheetProperties: {properties: {sheetId: s.getSheetId(), hidden: false}, fields: "hidden"}}});
      Sheets.Spreadsheets.batchUpdate({requests: showResource}, spreadsheetId);
    }