Google Apps脚本:如何将Google表格(仅一个)保存为云端硬盘文件夹为PDF? [英] Google Apps Script: How to save (Just one) Google Sheet to Drive Folder as PDF?

查看:48
本文介绍了Google Apps脚本:如何将Google表格(仅一个)保存为云端硬盘文件夹为PDF?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

仅将打开的名为"POTemplate"的Google表格以PDF本身的格式保存到Google云端硬盘上名为"Eric"的文件夹中.在第二到最后一行被卡住,这会导致错误,指出找不到文件夹Iterator.

Working to save just my open Google Sheet named 'POTemplate' as a PDF version of itself to a folder named 'Eric' on my Google Drive. Getting snagged on the 2nd to last line that brings an error stating the folder Iterator cannot be found.

    function checkSheet() {
      var sheetName = "POTemplate";
      var folder = "Eric";
      var pdfName = "Sample PO "
      var sourceSpreadsheet = SpreadsheetApp.getActive();
      var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
      var folder = DriveApp.getFoldersByName(folder);
      var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy(folder));
      var sheets = destSpreadsheet.getSheets();
       for (i = 0; i < sheets.length; i++) {
       if (sheets[i].getSheetName() != sheetName){
         destSpreadsheet.deleteSheet(sheets[i])}};                                                                                               
      var destSheet = destSpreadsheet.getSheets()[0];
      var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns());
      var sourcevalues = sourceRange.getValues();
      var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), 
    destSheet.getMaxColumns());
      destRange.setValues(sourcevalues);
      var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
      var newFile = folder.createFile(theBlob);
      DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
}

推荐答案

以下函数返回返回名为 folder

var folder = DriveApp.getFoldersByName(folder);

要在FolderIterator的第一个文件夹中创建文件,则必须像下面这样专门定义它:

To create a file in the first folder in the FolderIterator, you will have to define it specifically like so:

var newFile = folder.next().createFile(theBlob);

您还可以检查folderIterator是否有任何文件夹,像这样:

You can also check if the folderIterator has any folders, to begin with, like so:

if(folder.hasNext()){
  var newFile = folder.next().createFile(theBlob);
} else {
  DriveApp.createFolder("Eric").createFile(theBlob)
}

代码改进:(可选)以下几行代码似乎没有任何目的

Code Improvements:(Optional) The following lines code, doesn't seem to have any purpose

      var destSheet = destSpreadsheet.getSheets()[0];
      var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns());
      var sourcevalues = sourceRange.getValues();
      var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), 
         destSheet.getMaxColumns());
      destRange.setValues(sourcevalues);

由于您要复制原始电子表格,因此工作表"POTemplate"将完全相同.因此,似乎没有必要再次复制它.

Since you are making a copy of your original spreadsheet, your sheet "POTemplate" will be exactly the same. So, there seems to be no point copying it again.

这篇关于Google Apps脚本:如何将Google表格(仅一个)保存为云端硬盘文件夹为PDF?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆