【问题标题】:Google Apps Script: How to save (Just one) Google Sheet to Drive Folder as PDF?Google Apps 脚本:如何将(仅一个)Google Sheet 保存为 PDF 格式的驱动器文件夹?
【发布时间】:2018-02-14 18:48:04
【问题描述】:

正在努力将我打开的名为“POTemplate”的 Google 表格作为其自身的 PDF 版本保存到我的 Google 云端硬盘上名为“Eric”的文件夹中。在第 2 行到最后一行出现错误,指出找不到文件夹迭代器。

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

【问题讨论】:

    标签: pdf google-apps-script google-sheets


    【解决方案1】:

    以下函数返回返回名称为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”将完全相同。因此,似乎没有必要再次复制它。

    【讨论】:

    • 谢谢,杰克!它工作得很好。最后一个问题:在哪里/如何从 PDF 中消除网格线?
    • 要获得如此精细的控制,您将使用导出链接(据我所知),如 here 所示。另外,最好打开一个新问题,从其他人那里获得更多建议。
    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多