【问题标题】:Not deleting file from Google Drive using Google Script + Google SpreadSheet不使用 Google Script + Google SpreadSheet 从 Google Drive 中删除文件
【发布时间】:2019-10-26 02:36:02
【问题描述】:

我的 Google 电子表格中有一个脚本,可以在我进行的每次编辑时将我的 Google 表格保存为 XLSX 格式。它工作正常,但它正在创建一个同名的新文件(许多文件同名,而不是覆盖,在同一个文件夹中)。

我想删除旧文件并保存新版本,或者只是覆盖使用相同名称的文件

我的代码是:

function getGoogleSpreadsheetAsExcel(){

  try {

    var ss = SpreadsheetApp.getActive();
    var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss.getId() + "&exportFormat=xlsx";
    var params = {
      method      : "get",
      headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
      muteHttpExceptions: true
    };

    var blob = UrlFetchApp.fetch(url, params).getBlob();
    blob.setName(ss.getName() + ".xlsx");

    // set the folder where I am working using the id
    var folder = DriveApp.getFolderById(“FOLDER_ID");

    var xname = “blablabla.xlsx"; //set the file name
    var existing = folder.getFilesByName(xname);
    if (existing.hasNext()) {
      Browser.msgBox(‘file exists, delete to save the new version after.', Browser.Buttons.OK);

    // 'DELETE THE OLD FILE FROM GOOGLE DRIVE' CODE GOES HERE      


      Browser.msgBox(‘file deleted.', Browser.Buttons.OK);
      var arquivo = folder.createFile(blob); //save the new version
      Browser.msgBox(‘new version was saved.', Browser.Buttons.OK);
    }

    else {
      Browser.msgBox(‘file does not exists, saving.', Browser.Buttons.OK);
      var arquivo = folder.createFile(blob); //save the file
      Browser.msgBox(‘file saved.', Browser.Buttons.OK); //file saved
    }


  } catch (f) {
    Logger.log(f.toString());
  }
}

帮助我从 Google Drive 中删除或覆盖旧版本

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:
    • blablabla.xlsx的文件存在于FOLDER_ID的特定文件夹中时,你想覆盖blablabla.xlsx的文件。
    • 或者,当blablabla.xlsx 的文件存在于FOLDER_ID 的特定文件夹中时,您想删除现有文件并将其创建为新文件。

    如果我的理解是正确的,那么这个修改呢?请认为这只是几个答案之一。

    在使用此修改后的脚本之前,please enable Drive API at Advanced Google services.

    模式一:

    在此模式中,现有文件被 blob 覆盖。

    修改脚本:

    当你的脚本被修改时,请进行如下修改。

    从:
    if (existing.hasNext()) {
      Browser.msgBox(‘file exists, delete to save the new version after.', Browser.Buttons.OK);
    
    // 'DELETE THE OLD FILE FROM GOOGLE DRIVE' CODE GOES HERE      
    
    
      Browser.msgBox(‘file deleted.', Browser.Buttons.OK);
      var arquivo = folder.createFile(blob); //save the new version
      Browser.msgBox(‘new version was saved.', Browser.Buttons.OK);
    }
    
    到:
    var arquivo; // Added
    if (existing.hasNext()) {
      Browser.msgBox('file exists, delete to save the new version after.', Browser.Buttons.OK);
      Browser.msgBox('file deleted.', Browser.Buttons.OK);
      var id = Drive.Files.update({}, existing.next().getId(), blob).id; // Modified
      arquivo = DriveApp.getFileById(id); // Modified
      Browser.msgBox('new version was saved.', Browser.Buttons.OK);
    }
    

    模式 2:

    在此模式中,现有文件被删除,blob 被创建为新文件。

    修改脚本:

    当你的脚本被修改时,请进行如下修改。

    从:
    if (existing.hasNext()) {
      Browser.msgBox(‘file exists, delete to save the new version after.', Browser.Buttons.OK);
    
    // 'DELETE THE OLD FILE FROM GOOGLE DRIVE' CODE GOES HERE      
    
    
      Browser.msgBox(‘file deleted.', Browser.Buttons.OK);
      var arquivo = folder.createFile(blob); //save the new version
      Browser.msgBox(‘new version was saved.', Browser.Buttons.OK);
    }
    
    到:
    var arquivo; // Added
    if (existing.hasNext()) {
      Browser.msgBox('file exists, delete to save the new version after.', Browser.Buttons.OK);
      Browser.msgBox('file deleted.', Browser.Buttons.OK);
      Drive.Files.remove(existing.next().getId()); // Modified
      arquivo = folder.createFile(blob); // Modified
      Browser.msgBox('new version was saved.', Browser.Buttons.OK);
    }
    

    注意:

    • 在上述修改后的脚本中,当脚本运行时,现有文件会被 blob 覆盖和/或删除。所以请注意这一点。
    • 在您的脚本中, 用作单引号。在这种情况下,会发生错误。请修改为'。请注意这一点。

    参考资料:

    如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

    【讨论】:

    • 非常感谢!我不是开发人员,但我使用 gscript 和 google 电子表格与团队合作,让一些事情成为可能!模式1更好!我使用的是模式 2,但有时我在删除/创建超过 1 人工作的文件时遇到问题
    • @Roberto Junior 感谢您的回复。我很高兴你的问题得到了解决。关于你的新一期i was using pattern 2 but some times i have problem with the delay erasing/creating a file with more than 1 person working,虽然我不知道我是否理解正确,但是使用Lock Service怎么样? Ref?如果这不能解决您的问题,您可以通过包含详细信息将其作为新问题发布吗?这样,它将帮助包括我在内的用户思考解决方案。届时,请关闭此问题。
    • 我想我不能使用这个,锁定服务。工作表文件是协同的,有些人在不同的单元格、工作表中同时使用,但同一个文件。该例程一直在执行,“在编辑时”,导出工作表的 XLSX 版本以供使用该文件导出的其他软件使用
    • @Roberto Junior 感谢您的回复。我不得不为我糟糕的英语水平道歉。关于您的新问题,从您的回复中,我无法了解详细情况。我也看不到你的问题。那么您可以通过包含详细信息将其作为新问题发布吗?这样,它将帮助用户思考解决方案。如果您能合作解决您的问题,我很高兴。非常抱歉,我无法尽快解决您的新问题。
    • @Roberto Junior 感谢您的回复。但我不得不道歉,我无法解决你的新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多