Google apps script 将单个图纸导出为PDF
编辑:我解决了我的问题 原来它是从另一个.gs文件中提取这个函数的,我把它作为备份,但我从来没有注释掉。事情总是简单的 我有一个脚本,我修改和工作良好,但它没有任何功能来隐藏网格线 我花了几个小时搜索,发现这个工作非常好,但它导出了整个文档,而不仅仅是我需要的单个表单。我需要做什么才能使其仅导出第一张图纸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.
//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。在您的情况下,假设
是所需的表,您需要找到其gid:发票\u表
var shID=Invoice_Sheet.getSheetId()代码> 然后将其添加到
变量中url\u ext
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);
}