Copy a single (spreadsheet) file by Google id into multiple (many!) existing files by their id's

Viewed 24

I've got the following script that I found on here and I've been trying to get it to work for what I need. I've got a spreadsheet that has folder names in column A and their folder id's in column B.

I want to put a copy of my google spreadsheet file into each... but it's just not happening!

    function CopiestoFolder() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var data = ss.getDataRange() //Get all non-blank cells
                 .getValues() //Get array of values
                 .splice(1); //Remove header line
  //Define column numbers for data. Array starts at 0.
  var NAME = 0;
  var FOLDERID = 1;

  //For each folder ID listed in spreadsheet, create a copy of
  //each item into each folder.  

  for (var i=0; i<data.length; i++) {
    var name = data[i][NAME];
    var folderId = data[i][FOLDERID];

    var srcFolder = DriveApp.getFolderById("1d8rQZ2jDUoGl1Ek6DRtMpfgaoID8KREF");
    var dstFolder = DriveApp.getFolderById(folderId);  
    var files = srcFolder.getFiles();

    while (files.hasNext()) {
      var file = files.next();
      if (file.getMimeType() == MimeType.GOOGLE_APPS_SCRIPT) {
        dstFolder.addFile(file);
      }
    }
  }     
}`

When I deploy it just does nothing... then I changed the MimeType to Google_Sheets and it moved the original file into the first folder...

I'm a novice, apologies for being somewhat rubbish.

For context, I'm a teacher and I need to put copies of 7 spreadsheets into 130 odd folders in a shared google drive so each member of staff has their own copy.

Any help gratefully appreciated.

Best,

Pete

1 Answers

Try this:

function CopiestoFolder() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0")
  const vs = sh.getRange(2, 2, sh.getLastRow() - 1).getValues().flat();
  const f = DriveApp.getFileById(ss.getId())
  const n = ss.getName();
  const ssf = DriveApp.getFileById(ssid);
  vs.forEach(id => f.makeCopy(n,DriveApp.getFolderById(id)));
}
Related