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工作表中保存为PDF脚本_Google Apps Script - Fatal编程技术网

Google apps script 在Google工作表中保存为PDF脚本

Google apps script 在Google工作表中保存为PDF脚本,google-apps-script,Google Apps Script,我已经看过了社区,但我正在努力构建一个脚本,应该做到以下几点: 选择Google工作表的特定单元格范围 将所选区域另存为PDF,以便在PC上下载(无需保存到GDrive或在PDF中添加指定名称) 我试着录制一个宏,但没用。 你能给我一些关于如何继续前进的提示吗? 谢谢。这些参考链接可能会帮助您了解如何实现目标: 第一个链接向您展示了如何以PDF格式下载一系列单元格: 引用第一个链接并由ZektorH回答的将范围导出为无边框PDF的脚本: function downloadRangeToPd

我已经看过了社区,但我正在努力构建一个脚本,应该做到以下几点:

  • 选择Google工作表的特定单元格范围
  • 将所选区域另存为PDF,以便在PC上下载(无需保存到GDrive或在PDF中添加指定名称)
我试着录制一个宏,但没用。 你能给我一些关于如何继续前进的提示吗?
谢谢。

这些参考链接可能会帮助您了解如何实现目标:

第一个链接向您展示了如何以PDF格式下载一系列单元格:

引用第一个链接并由ZektorH回答的将范围导出为无边框PDF的脚本:

function downloadRangeToPdf() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("A1:E20");

  //Create temporary Spreadsheet
  var tempSpreadsheet = SpreadsheetApp.create("tempSheetInvoiceExport", range.getValues().length, range.getValues()[0].length);
  var tempSheet = tempSpreadsheet.getSheets()[0];
  var tempRange = tempSheet.getRange("A1:E20");

  tempRange.setValues(range.getDisplayValues());
  tempRange.setTextStyles(range.getTextStyles());
  tempRange.setBackgrounds(range.getBackgrounds());
  tempRange.setFontColors(range.getFontColors());
  tempRange.setFontFamilies(range.getFontFamilies());
  tempRange.setFontLines(range.getFontLines());
  tempRange.setFontStyles(range.getFontStyles());
  tempRange.setFontWeights(range.getFontWeights());
  tempRange.setHorizontalAlignments(range.getHorizontalAlignments());
  tempRange.setNumberFormats(range.getNumberFormats());
  tempRange.setTextDirections(range.getTextDirections());
  tempRange.setTextRotations(range.getTextRotations());
  tempRange.setVerticalAlignments(range.getVerticalAlignments());
  tempRange.setWrapStrategies(range.getWrapStrategies());

  SpreadsheetApp.flush(); //Force changes to be written before proceeding.

  //Generate Download As PDF Link

  var url = 'https://docs.google.com/spreadsheets/d/{ID}/export?'.replace('{ID}', tempSpreadsheet.getId());
  var exportOptions = 'exportFormat=pdf&format=pdf' + // export as pdf / csv / xls / xlsx
    '&size=letter' + // paper size legal / letter / A4
    '&portrait=true' + // orientation, false for landscape
    '&fitw=true&source=labnol' + // fit to page width, false for actual size
    '&sheetnames=false&printtitle=false' + // hide optional headers and footers
    '&pagenumbers=false&gridlines=false' + // hide page numbers and gridlines
    '&fzr=false' + // do not repeat row headers (frozen rows) on each page
    '&top_margin=0.00' + //All four margins must be set!
    '&bottom_margin=0.00' + //All four margins must be set!
    '&left_margin=0.00' + //All four margins must be set!
    '&right_margin=0.00' + //All four margins must be set!
    '&gridlines=false' + //true/false
    '&gid=' + tempSheet.getSheetId(); // the sheet's Id
  var token = ScriptApp.getOAuthToken();

  var blob = UrlFetchApp.fetch(url + exportOptions, {
    headers: {
                               Authorization: 'Bearer '+token
    }
  }).getBlob().setName(tempSpreadsheet.getName()+".pdf");

  var pdfFile = DriveApp.createFile(blob);

  var downloadLink = HtmlService
    .createHtmlOutput('<p>Download your file <a href="' + pdfFile.getUrl() + '" target="_blank">here</a>.</p>')
    .setWidth(200)
    .setHeight(100);

  SpreadsheetApp.getUi().showModalDialog(downloadLink, "Download PDF");

  DriveApp.getFileById(tempSpreadsheet.getId()).setTrashed(true); //Place temporary sheet on trash

}
函数下载RangeTopDF(){
var sheet=SpreadsheetApp.getActiveSheet();
var范围=sheet.getRange(“A1:E20”);
//创建临时电子表格
var tempseadsheet=SpreadsheetApp.create(“tempSheetInvoiceExport”,range.getValues().length,range.getValues()[0].length”);
var tempSheet=tempsheadsheet.getSheets()[0];
var tempRange=tempSheet.getRange(“A1:E20”);
setValues(range.getDisplayValues());
setTextStyles(range.getTextStyles());
setBackgrounds(range.getBackgrounds());
setFontColors(range.getFontColors());
setFontFamilies(range.getFontFamilies());
setFontLines(range.getFontLines());
setFontStyles(range.getFontStyles());
tempRange.setFontWeights(range.getFontWeights());
setHorizontalAlignments(range.getHorizontalAlignments());
setNumberFormats(range.getNumberFormats());
tempRange.setTextDirections(range.getTextDirections());
setextrotations(range.getTextRotations());
setVerticalAlignments(range.getVerticalAlignments());
setWrapStrategies(range.getWrapStrategies());
SpreadsheetApp.flush();//在继续之前强制写入更改。
//生成下载为PDF链接
var url='1〕https://docs.google.com/spreadsheets/d/{ID}/export?'.replace({ID}',tempseadsheet.getId());
var exportOptions='exportFormat=pdf&format=pdf'+//导出为pdf/csv/xls/xlsx
'&size=letter'+//纸张大小合法/letter/A4
“&trait=true”+//方向,横向为false
“&fitw=true&source=labnol”+//适合页面宽度,实际大小为false
'&sheetnames=false&printtitle=false'+//隐藏可选的页眉和页脚
“&pagenumbers=false&gridlines=false”+//隐藏页码和网格线
'&fzr=false'+//不要在每页上重复行标题(冻结行)
“&top_margin=0.00”+//必须设置所有四个边距!
“&bottom_margin=0.00”+//必须设置所有四个边距!
“&left_margin=0.00”+//必须设置所有四个边距!
“&right_margin=0.00”+//必须设置所有四个边距!
“&gridlines=false”+//true/false
“&gid=”+tempSheet.getSheetId();//工作表的Id
var token=ScriptApp.getOAuthToken();
var blob=UrlFetchApp.fetch(url+exportOptions{
标题:{
授权:“持票人”+代币
}
}).getBlob().setName(tempseadsheet.getName()+“.pdf”);
var pdfFile=DriveApp.createFile(blob);
var downloadLink=HtmlService
.createHtmlOutput(“下载您的文件。

”) .setWidth(200) .设置高度(100); SpreadsheetApp.getUi().showModalDialog(下载链接,“下载PDF”); DriveApp.getFileById(tempseadsheet.getId()).setTrashed(true);//将临时工作表放在垃圾箱上 }
然后,第二个链接向您展示了如何将电子表格作为PDF下载到本地计算机。您可以在这里参考Tanaike的答案:

已编辑(对以下问题的回答): 您需要使用第二张工作表的sheetID来保存第二张工作表的PDF

你应该改变

发件人:

var sheetId=SpreadsheetApp.getActiveSheet().getSheetId()

至:

var sheetId=ss.getSheetId()

因为您通过以下逻辑获取第二个电子表格的参考:

var ss=SpreadsheetApp.getActiveSpreadsheet().getSheets()[1]

因此,您只需要使用以下代码来获取第二个电子表格的工作表id:

var sheetId=ss.getSheetId()


对于原始逻辑,var sheetId=SpreadsheetApp.getActiveSheet().getSheetId()它将只获取第一张图纸的图纸ID。

非常感谢您的提示。我基本上达到了我所需要的,即使我需要一个小的适应。 我的电子表格有两张表,我想在表1中添加一个脚本按钮,以PDF格式下载表2,我稍微修改了脚本,如下所述,但我仍然以PDF格式获取表1

function downloadSheetAsPDF() {
  var filename = "Filename.pdf"; // Please set the filename here.

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
  var sheetId = SpreadsheetApp.getActiveSheet().getSheetId();

  // Creat PDF file as a temporary file and create URL for downloading.
  var url = "https://docs.google.com/a/mydomain.org/spreadsheets/d/" + SpreadsheetApp.getActiveSpreadsheet().getId() + "/export?exportFormat=pdf&gid=" + sheetId + "&access_token=" + ScriptApp.getOAuthToken();
  var blob = UrlFetchApp.fetch(url).getBlob().setName(filename);
  var file = DriveApp.createFile(blob);
  var dlUrl = "https://drive.google.com/uc?export=download&id=" + file.getId();

  // Open a dialog and run Javascript for downloading the file.
  var str = '<script>window.location.href="' + dlUrl + '"</script>';
  var html = HtmlService.createHtmlOutput(str);
  SpreadsheetApp.getUi().showModalDialog(html, "Download PDF");
  file.setTrashed(true);

  // This is used for closing the dialog.
  Utilities.sleep(3000);
  var closeHtml = HtmlService.createHtmlOutput("<script>google.script.host.close()</script>");
  SpreadsheetApp.getUi().showModalDialog(closeHtml, "Download PDF");
}

函数下载sheetaspdf(){
var filename=“filename.pdf”;//请在此处设置文件名。
var ss=SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
var sheetId=SpreadsheetApp.getActiveSheet().getSheetId();
//创建PDF文件作为临时文件,并创建下载URL。
变量url=”https://docs.google.com/a/mydomain.org/spreadsheets/d/“+SpreadsheetApp.getActiveSpreadsheet().getId()+”/export?exportFormat=pdf&gid=“+sheetId+”&access_-token=“+ScriptApp.getOAuthToken()”;
var blob=UrlFetchApp.fetch(url).getBlob().setName(文件名);
var file=DriveApp.createFile(blob);
var dlUrl=”https://drive.google.com/uc?export=download&id=“+file.getId();
//打开一个对话框并运行Javascript下载文件。
var str='window.location.href=“”+dlUrl+”;
var html=HtmlService.createHtmlOutput(str);
SpreadsheetApp.getUi().showModalDialog(html,“下载PDF”);
file.setTrashed(true);
//这用于关闭对话框。
公用事业.睡眠(3 000);
var closeHtml=HtmlService.createHtmlOutput(“google.script.host.close()”;
SpreadsheetApp.getUi().showModalDialog(关闭HTML,“下载PDF”);
}
有什么建议吗? 谢谢。

欢迎光临。恳求