Google 表格:如何将电子表格文件中的单个工作表另存为 PDF,其中文件名基于特定单元格内容?

时间:2021-07-15 11:16:41

标签: google-apps-script google-sheets

我觉得这是一个简单的问题,之前已经回答了很多,尽管我浪费了几个小时在这个网站(和其他网站)上搜索我的问题的简单、明确的答案,但我找不到一;因此我的问题。

背景

我经常需要开具发票,提供每个生产/制造订单的详细信息。我最近将几乎所有的数据库内容从 MS Excel 转移到谷歌表格,以获得所有明显的好处(尤其是那些基于云的好处)。上述发票是使用电子表格创建的。该电子表格由多张工作表组成,每张工作表负责从不同的源电子表格中收集相关数据。包含主发票界面的主表导出为 PDF 文件,其名称源自某个单元格(通常为 B6)。此单元格包含一个公式,该公式显示多个其他单元格的组合,换言之,此单元格不断变化并与其他单元格相关联。

当我过去使用 Excel 时,我在互联网上搜索并能够创建 VBA 代码并将其链接到宏命令,这使我可以毫无问题地导出名称来自上述单元格的发票表。当我激活宏时,文件会立即导出为 PDF 文件,其中名称正是我想要的(即名称基于单元格 B6 的当前内容)。

问题

我在互联网 (like this one) 上找到的任何资源都无法使用或复制它们所拥有的资源,而且我无法自己从头开始创建。

我需要什么

如何在 Google 表格中完成此操作?如果这太简单或张贴在其他地方,我真的很抱歉,但正如我之前所说,我的经验非常有限,我无法在其他任何地方找到我需要的东西。

1 个答案:

答案 0 :(得分:0)

您正在寻找这样的东西吗?

function exportSheet() {    
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var mainSheetName = 'Main Sheet'; //Change 'Main Sheet' to the name of your main sheet
  var mainSheet = ss.getSheetByName(mainSheetName);
  var name = mainSheet.getRange('B6').getValue(); //Gets the pdf name from cell B6
  var sheets = ss.getSheets(); //Pulls all sheets as an array

  for (var i = 0; i < sheets.length; i++) { //Iterates through all sheets
    if (sheets[i].getSheetName() !== mainSheetName) { //Hides all sheets that are not the main one
      sheets[i].hideSheet()
    }
  }
  
  DriveApp.createFile(ss.getBlob().getAs('application/pdf').setName(name)); //Exports the main sheet

  for (var i = 0; i < sheets.length; i++) { //Brings back all sheets that were hidden
    sheets[i].showSheet()
  }
}

我在模拟表中对此进行了测试,它对我有用。如果您对此有任何疑问,或者我误解了什么,请告诉我。


参考:Export Single Sheet to PDF in Apps Script