【问题标题】:Google Sheet: Replace file with the same nameGoogle Sheet:用相同的名称替换文件
【发布时间】:2020-11-10 00:41:11
【问题描述】:

我目前正在从活动工作表生成 PDF 文件。有没有办法覆盖或替换谷歌驱动器中的文件而不将其放入垃圾箱?我有这个我在网上看到的代码。

  if (files.hasNext()) {
    files.next().setTrashed(true);
  }

我是在正确使用代码还是有其他方法可以做到这一点?

我在下面的函数中使用了该代码。

function _exportBlob(blob, fileName) {
  
  var timeZone = Session.getScriptTimeZone();
  var date = Utilities.formatDate(new Date(), timeZone, "yyyy");
  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  
  var fileName = "FORM137 - " + ss.getRange("REPORT CARD!D12").getValue() + " - ARCS" + date;
 
  var ssID = ss.getId();
 
  var ssFile = DriveApp.getFileById(ssID);
 
  blob = blob.setName(fileName)
  
  var parentFolder = DriveApp.getFileById(ss.getId()).getParents().next();
  var subFolder = parentFolder.getFoldersByName("CARDS").next();
 
  var files = subFolder.getFilesByName(getFilename());
  if (files.hasNext()) {
    files.next().setTrashed(true);
  }
  var pdfFile = subFolder.createFile(blob);
  
  
  if (pdfFile) {
    const htmlOutput = HtmlService
    .createHtmlOutput('<p>Click to open <a href="' + pdfFile.getUrl() + '" target="_blank">' + fileName + '</a></p>')
    .setWidth(300)
    .setHeight(80)
    SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Export Successful')
  }
}

这里是 getFilename 函数:

function getFilename() {

    var ss = SpreadsheetApp.getActive();
    var filename = "FORM137 - " + ss.getRange("REPORT CARD!D12").getValue() + " - ARCS" + date;

    return filename;
}

【问题讨论】:

  • 我可以问你getFilename()吗?
  • @Tanaike 我已经发过了。
  • 感谢您回复并添加更多信息。根据您的附加信息,我提出了一个修改点作为答案。你能确认一下吗?如果这不是您期望的方向,我深表歉意。

标签: google-apps-script google-sheets google-drive-api


【解决方案1】:

我相信你的目标如下。

  • 您想将blob 覆盖到getFilename() 的现有文件中。

在这种情况下,我建议使用 Drive API 中“文件:更新”的方法。

在使用此脚本之前,please enable Drive API at Advanced Google services

发件人:

var files = subFolder.getFilesByName(getFilename());
if (files.hasNext()) {
  files.next().setTrashed(true);
}
var pdfFile = subFolder.createFile(blob);

收件人:

var files = subFolder.getFilesByName(getFilename());
var pdfFile = files.hasNext() ? DriveApp.getFileById(Drive.Files.update({}, files.next().getId(), blob).id) : subFolder.createFile(blob);
  • 在本次修改中,当getFilename()的文件不存在时,会创建一个新文件。

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多