Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

.addFile seems to be deprecated, what other method can I use?

I want to make a copy of a file from Google Drive to the destination I set it to but .addFile seems to be deprecated. I tried using moveTo and makeCopy but I can't seem to get it to work.

This is the code I have for now:

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);
}
like image 534
Dean Avatar asked Oct 15 '25 20:10

Dean


2 Answers

Modification points:

  • In your script, dest_folder of var dest_folder = DriveApp.getFoldersByName(id); is FolderIterator.
    • I thought that this might be the reason of your issue about I tried using moveTo and makeCopy but i cant seem to get it to work..
  • In your situation, if the folder retrieved with var folders = DriveApp.getFoldersByName(folder_Name); is the destination folder, you can directly use const folder = folders.next();.
  • In the current stage, I would like to propose to use moveTo for movinf the file to the specific folder.

When above points are reflected to your script, it becomes as follows.

Modified script:

From:
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);
To:
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);

References:

  • getFoldersByName(name)
  • moveTo(destination)
like image 88
Tanaike Avatar answered Oct 19 '25 09:10

Tanaike


Explanation:

You basically need to use makeCopy(name, destination) where destination needs to be of a type folder and not an iterator.

Therefore, you should do:

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

Solution:

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);
}
like image 42
soMarios Avatar answered Oct 19 '25 09:10

soMarios