我如何使用 Google App 脚本中的 'Trash' 将一个文件替换为另一个文件(如果它们的名称相同)?

How can i REPLACE a file with another file (if their name is the same) using 'Trash' ing in Google App Script?

我正在访问来自 共享驱动器 的文件夹列表。

在这里,我将一些 excel 文件转换为电子表格。我的问题是用新文件替换旧的转换文件。这是因为每次我 运行 脚本时,新的转换文件(同名)在同一个文件夹中与旧文件一起不断增加。

代码如下:

function ConvertFiles() {
var sheet = 
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var r= 2;
for(r= 2;r < sheet.getLastRow(); r++){

// Use getValue instead of getValues
var fileId = sheet.getRange(r,1).getValue();
var folderID = sheet.getRange(r,8).getValue();

var files = DriveApp.getFileById(fileId);
var name = files.getName().split('.')[0]; 
var blob = files.getBlob();
  
var newFile = {
// Remove '_converted' from name if existing to avoid duplication of the string before adding '_converted'
// This will allow to have newly converted file "replace" the old converted file properly
  title: name.replace('_converted','') + '_converted', 
  parents: [{
    id: folderID
  }]
}; 

var destinationFolderId = DriveApp.getFolderById(folderID); 
var existingFiles = destinationFolderId.getFilesByName(newFile.title);

// GOAL #1: To replace/update the old converted file into the latest one everytime the script runs (if it has the same filename)
// Find the file with same name of the file to be converted
while(existingFiles.hasNext()) {
  // ID of the file with same converted name
  var oldConvertedFileWithSameNameID = existingFiles.next().getId();

  // Delete before writing
  Drive.Files.remove(oldConvertedFileWithSameNameID);
  //DriveApp.getFileById(oldConvertedFileWithSameNameID.getId()).setTrashed(true);

}

// Create new converted file then get ID
var newFileID = Drive.Files.insert(newFile, blob, { convert: true,supportsAllDrives: true }).id; 
Logger.log(newFileID);
//var sheetFileID = newFileID.getId();
//var Url = "https://drive.google.com/open?id=" + sheetFileID;
 var Url = "https://drive.google.com/open?id=" + newFileID;

// Add the ID of the converted file
sheet.getRange(r,9).setValue(newFileID);
sheet.getRange(r,10).setValue(Url);
}
}

我的目标是

  1. 将旧的转换文件替换为新文件(如果它们具有相同的名称)到共享驱动器文件夹中
  2. 了解如何在上面的代码中实现 setTrashed()

我已尝试使用 Drive.Files.remove(oldConvertedFileWithSameNameID);,但收到错误消息 GoogleJsonResponseException:API 调用 drive.files.delete 失败,出现错误:找不到文件:( “文件 ID”)。然后我看到一个关于这个 [ 的问题...所以我猜想这个方法不适合在共享文件夹中实现。

那么我如何在上面的代码中使用 setTrashed() 方法?

我认为你需要设置supportsAllDrives参数:

Drive.Files.remove(oldConvertedFileWithSameNameID, {supportsAllDrives: true});

参考文献: