如何编写Google表格脚本以自动删除不属于我的文件

时间:2019-02-14 16:28:15

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

我有一个表格表格,我们的公司用户将该表格保存到公司的Google云端硬盘文件夹(G Suite)中。我们必须将这些表格保留30天。

我想在35天后自动删除这些文件。所以我写了这个脚本:

function DeleteOldFiles() {
  var Folders = new Array(
    '0B8xnkPYxGFbUMktOWm14TVA3Yjg',      
   '1C_VUaqPl9FQlaajY_wsZzJgVGHDrPKm8');
  var Files;

  Logger.clear();

  for each (var FolderID in Folders) {
    Folder = DriveApp.getFolderById(FolderID)
    Files = Folder.getFiles();

    while (Files.hasNext()) {
      var File = Files.next();

      if (new Date() - File.getLastUpdated() > 35 * 24 * 60 * 60 * 1000) {
       File.setTrashed(true); // Places the file int the Trash folder
      //  Drive.Files.remove(File.getId()); // Permanently deletes the file
        Logger.log('File ' + File.getName() + ' was deleted.');
      }}}

  if(Logger.getLog() != '')
    MailApp.sendEmail('batnip@choiceaviation.com', 'Backups have been removed from Google Drive', Logger.getLog());}

问题是我有时会收到以下消息:     “访问被拒绝:DriveApp。(第18行,文件“代码”)”

有时脚本可以工作,有时则不行。我最终得出结论,它可能仅在删除我自己的文件时才有效,而在另一个G Suite用户那里有文件时则无效。

解决方案?

1 个答案:

答案 0 :(得分:0)

您是正确的,only the owner may validly use the .setTrashed函数。您可以尝试首先使用.setOwner(email address)将自己设置为所有者:

if (new Date() - File.getLastUpdated() > 35 * 24 * 60 * 60 * 1000) {
   File.setOwner('your email address'); // Transfers ownership to user
   File.setTrashed(true); // Places the file int the Trash folder
  //  Drive.Files.remove(File.getId()); // Permanently deletes the file
    Logger.log('File ' + File.getName() + ' was deleted.');
  }}}

如果这种方法行不通-需要域管理员权限,我相信-您也可以尝试创建一个存档文件夹作为一种解决方法,并将文件简单地移入其中,如此处概述:stackoverflow.com/questions/38808875/moving-files-in-google-drive-using-google-script