Google Apps脚本:如何保存(仅一个)Google Sheet以PDF文件夹的形式将文件夹保存?

时间:2018-02-14 18:48:04

标签: google-apps-script

将我名为“POTemplate”的公开Goog​​le表格作为其自身的PDF版本保存到我的Google云端硬盘上名为“Eric”的文件夹中。在第2行到最后一行上遇到错误,该错误表明无法找到文件夹Iterator。

    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);
}

1 个答案:

答案 0 :(得分:0)

以下函数返回返回名称为folder

FolderIterator个文件夹
var folder = DriveApp.getFoldersByName(folder);

要在FolderIterator的第一个文件夹中创建文件,您必须特别定义它:

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

您还可以检查folderIterator是否包含任何文件夹,如下所示:

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

代码改进:(可选) 以下行代码似乎没有任何用途

      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”将完全相同。所以,似乎没有必要再次复制它。