如何删除旧的转换文件并使用应用程序脚本替换为新文件?

How can i remove the old converted file and replace with a new file using app script?

我正在尝试用新文件替换旧的转换文件。这是因为每次我 运行 脚本都会在同一个文件夹中复制和相乘。

代码如下:

function ConvertFiles() {

var sheet = 
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");

var r= 2;
for(r= 2;r < sheet.getLastRow(); r++){

var fileId= sheet.getRange(r,1).getValues();
var folderID = sheet.getRange(r,8).getValues();
Logger.log(fileId); 

var files = DriveApp.getFileById(fileId);
var name = files.getName().split('.')[0]; 
var blob = files.getBlob();


var destinationFolderId = DriveApp.getFolderById(folderID);   
Logger.log(folderID); 

var newFile = {
    title : name + '_converted', parents: [{id: 
destinationFolderId.getId()}]}; 
Logger.log(newFile); 

 }
}

我的目标是:

  1. 每次脚本运行s (如果它具有相同的文件名)

  2. 我想将转换后的fileId推回googlesheet显示。

我该如何解决这个问题?

我添加了注释以显示代码的每个部分。请检查下面的整个脚本:

脚本:

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);
    }

    // Create new converted file then get ID
    var newFileID = Drive.Files.insert(newFile, blob, {
      convert: true
    }).id;

    // Goal #2: I would like to push back the converted fileId into the google sheet to be displayed.
    // Add the ID of the converted file
    sheet.getRange(r,9).setValue(newFileID);
  }
}

样本sheet:

示例文件:

第一个运行(文件):

第一个 运行 (sheet):

更新的原始文件:

运行更新原始文件(文件)后:

运行 更新原始文件后 (sheet):

注:

  • 这将保留原始文件,但每次脚本 运行.
  • 时都会替换它的现有转换文件
  • 我已经使用了Drive项服务。