.addFile似乎已被弃用,我还可以使用什么其他方法? 修改点:修改后的脚本:参考文献:

问题描述

我想将文件从Google云端硬盘复制到我设置为的目标位置,但是.addFile似乎已被弃用。 我尝试使用movetomakecopy,但似乎无法正常使用。这是我现在拥有的代码

function copyfile() {
var ss = SpreadsheetApp.getActive();
var activeSheet = ss.getSheetByName("sheet_Patients");
var activeSheetFM = ss.getSheetByName("_FolderMaker_");
var lastRow = activeSheet.getLastRow();
var data = activeSheet.getRange(lastRow,3,1,1).getValue();
var secondData = activeSheet.getRange(lastRow,4,1).getValue();
var folder_Name = [data+ "," +secondData];

var folders = DriveApp.getFoldersByName(folder_Name);
while (folders.hasNext()) {
      const folder = folders.next();
      var id = folder.getId(); 
} 
activeSheetFM.getRange(2,1).setValue(id);
  
var file = DriveApp.getFileById("1g25_24OTv_t5Qav2Q1hwEM_YBiPSaWWb");
var source_folder = DriveApp.getFolderById("1pqh74miSSy9WDSD3kpi02kkI6XDuXiuU");
var dest_folder = DriveApp.getFoldersByName(id);
//Logger.log(finalId);


var finalFile = file.makecopy(data+ ','+ secondData + ' ' + Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'yyyy-MM-dd') + ' ' + file.getName());
dest_folder.addFile(finalFile);
source_folder.removeFile(finalFile);
}

解决方法

修改点:

  • 在您的脚本中,isMatch(imgData.data,refImg); // imgData is an actual image data object so we need to access its 'data' property // refImg is the 'data' array saved to local storage,no need to access 'data' on it 中的dest_folder是FolderIterator。
    • 我认为这可能是您遇到var dest_folder = DriveApp.getFoldersByName(id);问题的原因。
  • 根据您的情况,如果用I tried using moveTo and makeCopy but i cant seem to get it to work.检索的文件夹是目标文件夹,则可以直接使用var folders = DriveApp.getFoldersByName(folder_Name);
  • 在当前阶段,我建议使用const folder = folders.next();将文件移动到特定文件夹。

当以上几点反映到您的脚本时,它如下所示。

修改后的脚本:

从:
moveTo
至:
var folders = DriveApp.getFoldersByName(folder_Name);
while (folders.hasNext()) {
      const folder = folders.next();
      var id = folder.getId(); 
} 
activeSheetFM.getRange(2,4,1,1).setValue(id);
  
var file = DriveApp.getFileById("1g25_24OTv_t5Qav2Q1hwEM_YBiPSaWWb");
var source_folder = DriveApp.getFolderById("1pqh74miSSy9WDSD3kpi02kkI6XDuXiuU");
var dest_folder = DriveApp.getFoldersByName(id);
//Logger.log(finalId);


var finalFile = file.makeCopy(data+ ','+ secondData + ' ' + Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'yyyy-MM-dd') + ' ' + file.getName());
dest_folder.addFile(finalFile);
source_folder.removeFile(finalFile);

参考文献:

,

说明:

您基本上需要使用makeCopy(name,destination),而目的地必须是folder类型而不是iterator

因此,您应该这样做:

var dest_folder = DriveApp.getFolderById(id);
var finalFile = file.makeCopy(data+ ','yyyy-MM-dd') + ' ' + file.getName(),dest_folder);

解决方案:

function copyfile() {
var ss = SpreadsheetApp.getActive();
var activeSheet = ss.getSheetByName("sheet_Patients");
var activeSheetFM = ss.getSheetByName("_FolderMaker_");
var lastRow = activeSheet.getLastRow();
var data = activeSheet.getRange(lastRow,3,1).getValue();
var secondData = activeSheet.getRange(lastRow,1).getValue();
var folder_Name = [data+ "," +secondData];

var folders = DriveApp.getFoldersByName(folder_Name);
while (folders.hasNext()) {
      const folder = folders.next();
      var id = folder.getId(); 
} 

activeSheetFM.getRange(2,1).setValue(id);
  
var file = DriveApp.getFileById("1g25_24OTv_t5Qav2Q1hwEM_YBiPSaWWb");
var source_folder = DriveApp.getFolderById("1pqh74miSSy9WDSD3kpi02kkI6XDuXiuU");
var dest_folder = DriveApp.getFolderById(id);
  
var finalFile = file.makeCopy(data+ ',dest_folder);
}