【问题标题】:.addFile seems to be deprecated, What other method can i use?.addFile 似乎已被弃用,我还能使用什么其他方法?
【发布时间】:2020-10-27 00:27:56
【问题描述】:

我想将文件从 Google Drive 复制到我设置的目标位置,但 .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,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,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);
}

【问题讨论】:

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


【解决方案1】:

修改点:

  • 在您的脚本中,dest_foldervar dest_folder = DriveApp.getFoldersByName(id); 是 FolderIterator。
    • 我认为这可能是您关于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);
到:
var folders = DriveApp.getFoldersByName(folder_Name);
var dest_folder;
if (folders.hasNext()) {
  dest_folder = folders.next();
} else {
  throw new Error("No folder.")
}
activeSheetFM.getRange(2,4,1,1).setValue(dest_folder.getId());
var file = DriveApp.getFileById("1g25_24OTv_t5Qav2Q1hwEM_YBiPSaWWb");
var finalFile = file.makeCopy(data+ ', '+ secondData + ' ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + ' ' + file.getName());
finalFile.moveTo(dest_folder);

参考资料:

【讨论】:

    【解决方案2】:

    解释:

    您基本上需要使用makeCopy(name, destination),其中目标需要是folder 类型而不是iterator

    因此,你应该这样做:

    var dest_folder = DriveApp.getFolderById(id);
    var finalFile = file.makeCopy(data+ ', '+ secondData + ' ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), '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,1).getValue();
    var secondData = activeSheet.getRange(lastRow,4,1,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,4,1,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+ ', '+ secondData + ' ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + ' ' + file.getName(),dest_folder);
    }
    

    【讨论】:

    • 这似乎是另一种有效的方法,一如既往地感谢您帮助我改进。欢呼
    • 很高兴它有帮助:) 你做了正确的事情,接受了另一个答案。信息量更大。 @Naeed
    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多