Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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
Javascript 脚本下载谷歌表中的一系列单元格作为PDF文件到本地计算机和其他自动化脚本?_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 脚本下载谷歌表中的一系列单元格作为PDF文件到本地计算机和其他自动化脚本?

Javascript 脚本下载谷歌表中的一系列单元格作为PDF文件到本地计算机和其他自动化脚本?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我已经制作了g表格式的发票,如下所示: 在单元格B8:C8(发票收件人下方)中,有一个下拉列表,用于从客户工作表中获取数据 需要什么 制作选定单元格的PDF。我想稍后添加一些按钮,并将宏/脚本分配给它们,然后g sheet print操作将打印工作表上的所有内容。因此,只需打印发票部分(范围-A1:G46)。图纸名称为客户名称+发票日期(F8) 我使用了stack over flow中的一些脚本,但它们增加了边距。我想要的是一个全出血pdf,我可以得到,如果我使用打印(ctrl+p)按钮 将发

我已经制作了g表格式的发票,如下所示:

在单元格B8:C8(发票收件人下方)中,有一个下拉列表,用于从客户工作表中获取数据

需要什么

  • 制作选定单元格的PDF。我想稍后添加一些按钮,并将宏/脚本分配给它们,然后g sheet print操作将打印工作表上的所有内容。因此,只需打印发票部分(范围-A1:G46)。图纸名称为客户名称+发票日期(F8)
  • 我使用了stack over flow中的一些脚本,但它们增加了边距。我想要的是一个全出血pdf,我可以得到,如果我使用打印(ctrl+p)按钮

  • 将发票数据保存到“发票登记”表,以跟踪发票及其付款。这也实现了
  • 我可以通过使用相对引用录制宏来实现这一点

        function Untitledmacro1() {
      var spreadsheet = SpreadsheetApp.getActive();
    
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
      spreadsheet.getRange('A1').activate();  
      spreadsheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.DOWN).activate();  
      spreadsheet.getCurrentCell().offset(1, 0).activate();
      spreadsheet.getCurrentCell().setFormulaR1C1('=R[-1]C[0]+1');
    
      spreadsheet.getCurrentCell().offset(0, 1).activate();
    
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
      spreadsheet.getRange('Invoice!E8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
    
      spreadsheet.getCurrentCell().offset(0, 1).activate();
    
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
      spreadsheet.getRange('Invoice!F8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
    
      spreadsheet.getCurrentCell().offset(0, 1).activate();
    
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
      spreadsheet.getRange('Invoice!B8:C8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
    
      spreadsheet.getCurrentCell().offset(0, 2).activate();
    
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
      spreadsheet.getRange('Invoice!F16').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    };
    

  • 保存发票数据并生成具有特定单元格范围的pdf后,我希望清除某些字段中的数据。这也实现了
  • 将1号添加到发票号。发票编号格式为今天的日期+当前月份+至今/年的发票编号(例如:06111/1920)。所以我们需要为下一张发票添加1到5个字符
  • 我使用了以下公式并实现了这一点:

    =CONCATENATE(0, DAY(F8),MONTH(F8), COUNTA('Invoice Register'!B2:B99)+1,"/",21920)
    
    但是我也很想为这个制作一个剧本

    基本上,我用VBA在excel中制作了一个发票工具,现在最大的问题是,每当我从excel导出PDF时,无论遇到什么问题,右边都会显示白色的边距。

    我猜按钮很明显,每当我按下“新发票”时,发票号就会增加1


    很抱歉,这篇文章太长了,因为我必须尽可能清楚地说明这一点,而且我对谷歌应用程序脚本完全陌生。非常感谢您的帮助。

    我创建了一个函数,可以将一个范围导出为无边框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);//将临时工作表放在垃圾箱上 }
    我正在使用上面介绍的urlParameters创建导出,然后将其设置为驱动器文件,以便稍后下载

    如果您希望以更合理的方式命名您的文件,您可以始终将发票号附加到临时工作表中,这样文件将相应地命名。

    要添加到“伟大”,可以通过URL选项直接下载PDF格式的文件。您不必创建临时工作表

    URL选项似乎是:

    &r1 // first row to print: 0-indexed 
    &r2 // last row to print: 1-indexed 
        // this seems inconsistent; maybe it is technically the first row that is not printed, 0-indexed
    
    &c1 // first column to print: 0-indexed 
    &c2 // last column to print: 1-indexed (see above)
    
    这些URL选项包含在上的代码中

    以下是如何附加这些参数的两个示例:

    &r1=0&r2=1&c1=0&c2=3 // cells A1:C1
    &r1=2&r2=3&c1=3&c2=6 // cells D3:F4
    

    如果搜索路径中有隐藏的行/列,则这些行/列的行为似乎很奇怪,似乎会显示额外的单元格。

    我必须下载到本地计算机,因为我必须在发票发送到客户端之前对其进行数字签名。关于从电子表格导出PDF的选项,我认为这些线程(和)可能很有用。顺便问一下,在你的问题中,有两个问题是下载一系列单元格的
    脚本吗
    
    &r1=0&r2=1&c1=0&c2=3 // cells A1:C1
    &r1=2&r2=3&c1=3&c2=6 // cells D3:F4