【问题标题】:How can I overwrite the old file with app script when I save the file?保存文件时如何用应用脚本覆盖旧文件?
【发布时间】:2021-07-30 12:44:58
【问题描述】:

我在谷歌表格中有几页。我使用以下代码从这些页面获取 Sheet2 的 PDF 输出。当 pdf 打印出来时,它会删除旧的 pdf 打印输出并创建一个新的。发生这种情况时,pdf 的链接会更改。我不想改变 pdf 的链接。当它创建新的pdf时,我希望它覆盖旧的。我该怎么做?

function checkSheet() {
  var sheetName = "Sheet2";
  var folderID = "folderid"; // Folder id to save in a folder.
  var pdfName = "Catalog";

  var sourceSpreadsheet = SpreadsheetApp.getActive();
  var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
  var folder = DriveApp.getFolderById(folderID);

  //Copy whole spreadsheet
  var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("tmp_convert_to_pdf", folder))

  //delete redundant sheets
  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];
  //repace cell values with text (to avoid broken references) 
  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);

  //delete old pdf
  var files = DriveApp.getFolderById(folderID).getFiles();
  while (files.hasNext()) {
    var file = files.next();
    if(file.getName() == "Catalog"){
      DriveApp.getFileById(file.getId()).setTrashed(true);
    }
  }

  //save to pdf
  var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
  var newFile = folder.createFile(theBlob);

  //Delete the temporary sheet
  DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    您的问题包含许多不必要的细节。我相信它可以简化为,“如何更新 Google Drive 上现有的 PDF 文件?”

    为此,您必须启用 Advanced Drive Service,它的 update method 将替换 Google Drive 中现有的 PDF 文件。

    function replaceFile(theBlob,theFileId) {
      var oldFile = DriveApp.getFileById(theFileId);
        Drive.Files.update({title: oldFile.getName(),mimeType: 
         oldFile.getMimeType()}, theFileId, theBlob);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-12-15
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2014-01-16
      • 1970-01-01
      相关资源
      最近更新 更多