Google apps script 将单个图纸导出为PDF

Google apps script 将单个图纸导出为PDF,google-apps-script,google-sheets,google-drive-api,Google Apps Script,Google Sheets,Google Drive Api,编辑:我解决了我的问题 原来它是从另一个.gs文件中提取这个函数的,我把它作为备份,但我从来没有注释掉。事情总是简单的 我有一个脚本,我修改和工作良好,但它没有任何功能来隐藏网格线 我花了几个小时搜索,发现这个工作非常好,但它导出了整个文档,而不仅仅是我需要的单个表单。我需要做什么才能使其仅导出第一张图纸 //global var SS = SpreadsheetApp.getActiveSpreadsheet(); var Invoice_Sheet = SS.

编辑:我解决了我的问题 原来它是从另一个.gs文件中提取这个函数的,我把它作为备份,但我从来没有注释掉。事情总是简单的

我有一个脚本,我修改和工作良好,但它没有任何功能来隐藏网格线

我花了几个小时搜索,发现这个工作非常好,但它导出了整个文档,而不仅仅是我需要的单个表单。我需要做什么才能使其仅导出第一张图纸

//global
        var SS = SpreadsheetApp.getActiveSpreadsheet();
        var Invoice_Sheet = SS.getSheetByName("Private Invoice");

function generatePdf() {
  // Get folder containing spreadsheet, for later export
  var parents = DriveApp.getFileById(SS.getId()).getParents();
  if (parents.hasNext()) {
    var folder = parents.next();
  }
  else {
    folder = DriveApp.getRootFolder();
  }

  //additional parameters for exporting the sheet as a pdf
  var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf
      // following parameters are optional...
      + '&size=A4'      // paper size
      + '&portrait=true'    // 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
      + '&gid=0'; //first page
  var options = {
    headers: {
      'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken()
    }
  }
  var Name = Invoice_Sheet.getRange("C12").getValue();
  var curDate = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy")
  var pdfName = Name + " - " + curDate + " - " + "Suds Invoice";
  var response = UrlFetchApp.fetch("https://docs.google.com/spreadsheets/" + url_ext, options);
  var blob = response.getBlob().setName(pdfName + '.pdf');

  folder.createFile(blob);

}
说明: 您需要在代码中进行以下两项修改:

  • 您需要在主url中指定电子表格ID:

    ”https://docs.google.com/spreadsheets/d/“+ssID

    其中:
    var ss=SpreadsheetApp.getActive()&
    var ssID=ss.getId()

  • 您需要指定要从中提取pdf的工作表的gid。在您的情况下,假设
    发票\u表
    是所需的表,您需要找到其gid:

    var shID=Invoice_Sheet.getSheetId()

    然后将其添加到
    url\u ext
    变量中

在您的代码中,步骤2已经包含在内。但我认为问题在于
gid=0
可能不是第一张或
Invoice\u-sheet

解决方案: 注意:

如果您不想获取<代码>发票单
的pdf,而是首先获取发票单的pdf,则使用相同的代码并替换:

var shID=Invoice_Sheet.getSheetId()

与:

var shID=ss.getSheets()[0].getSheetId()

说明: 您需要在代码中进行以下两项修改:

  • 您需要在主url中指定电子表格ID:

    ”https://docs.google.com/spreadsheets/d/“+ssID

    其中:
    var ss=SpreadsheetApp.getActive()&
    var ssID=ss.getId()

  • 您需要指定要从中提取pdf的工作表的gid。在您的情况下,假设
    发票\u表
    是所需的表,您需要找到其gid:

    var shID=Invoice_Sheet.getSheetId()

    然后将其添加到
    url\u ext
    变量中

在您的代码中,步骤2已经包含在内。但我认为问题在于
gid=0
可能不是第一张或
Invoice\u-sheet

解决方案: 注意:

如果您不想获取<代码>发票单
的pdf,而是首先获取发票单的pdf,则使用相同的代码并替换:

var shID=Invoice_Sheet.getSheetId()

与:


var shID=ss.getSheets()[0].getSheetId()

抱歉,我有几个变量是全局变量。我用额外的变量编辑了这篇文章。我尝试了您建议的编辑,但仍在生成包含所有工作表的pdf。@liamgore现在检查我的完整解决方案。如果这不起作用,不幸的是,我不能重现这个问题,因为它对我有效。确保您在正确的文件夹中查找正确的文档。您可能正在打开一些旧文档,其中所有的工作表都可见。请确保您确实看到了新生成的pdf。好的,它仍然不起作用,我只是养成了在运行它之前隐藏额外的工作表的习惯,下次再给它一次机会。谢谢你的帮助@liamgore确保在脚本编辑器中更新代码后保存更改。如果手动执行函数
generatePdf
,则脚本将自动保存。但是,如果您通过自定义按钮菜单使用它,则需要保存更改。我知道这些都是基本的东西,但我们经常忽略一些细节,使我们的代码表现出不同的行为。我用额外的变量编辑了这篇文章。我尝试了您建议的编辑,但仍在生成包含所有工作表的pdf。@liamgore现在检查我的完整解决方案。如果这不起作用,不幸的是,我不能重现这个问题,因为它对我有效。确保您在正确的文件夹中查找正确的文档。您可能正在打开一些旧文档,其中所有的工作表都可见。请确保您确实看到了新生成的pdf。好的,它仍然不起作用,我只是养成了在运行它之前隐藏额外的工作表的习惯,下次再给它一次机会。谢谢你的帮助@liamgore确保在脚本编辑器中更新代码后保存更改。如果手动执行函数
generatePdf
,则脚本将自动保存。但是,如果您通过自定义按钮菜单使用它,则需要保存更改。我知道这些是基本的东西,但我们经常忽略一些细节,使我们的代码表现不同。
//global
var SS = SpreadsheetApp.getActiveSpreadsheet();
var Invoice_Sheet = SS.getSheetByName("Private Invoice");

function generatePdf() {
// Get folder containing spreadsheet, for later export
  var parents = DriveApp.getFileById(SS.getId()).getParents();
  if (parents.hasNext()) {
    var folder = parents.next();
  }
  else {
    folder = DriveApp.getRootFolder();
  }

  var ssID = SS.getId();
  var shID = Invoice_Sheet.getSheetId();

  //additional parameters for exporting the sheet as a pdf

  var url_ext = "/export?exportFormat=pdf&format=pdf"+
      // following parameters are optional...
      + '&size=A4'      // paper size
      + '&portrait=true'    // 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
      + '&gid='+shID; // NEW CODE

  
    var options = {
    headers: {
      'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken()
    }
  }
  
  var Name = Invoice_Sheet.getRange("C12").getValue();
  var curDate = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy")
  var pdfName = Name + " - " + curDate + " - " + "Suds Invoice";
  var response = UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/"+ ssID + url_ext, options); // NEW CODE
  var blob = response.getBlob().setName(pdfName + '.pdf');

  folder.createFile(blob);

}