Search code examples
javascriptgoogle-apps-scriptgoogle-appsgoogle-docs-api

Execution failed: TypeError: - Following replacement of DocsList with DriveApp


I now understand that my broken script began as a result of the recent depreciation of DocsList. Following instruction I have now replaced all instances of this to DriveApp. However execution still fails, multiple file copies are being made in various folders and emails are not sending. I would really appreciate is someone could help me fix this as this is killing my novice brain!

Here is the execution transcript.

[15-04-23 12:57:06:192 BST] FormApp.getActiveForm() [0.234 seconds]
[15-04-23 12:57:06:491 BST] FormApp.getActiveForm() [0.23 seconds]
[15-04-23 12:57:06:524 BST] Starting execution
[15-04-23 12:57:06:558 BST] FormResponse.getItemResponses() [0.012 seconds]
[15-04-23 12:57:06:559 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:06:559 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:06:559 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:06:890 BST] SpreadsheetApp.openById([1pxcz1Xt9_29n2L5kDgJlacHCZ8APlIXiTsPXL5M1zuM]) [0.33 seconds]
[15-04-23 12:57:07:178 BST] Spreadsheet.getDataRange() [0.286 seconds]
[15-04-23 12:57:07:269 BST] Range.getValues() [0.09 seconds]
[15-04-23 12:57:07:270 BST] Range.getLastRow() [0 seconds]
[15-04-23 12:57:07:270 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:07:271 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:07:271 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:07:271 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:07:271 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:07:271 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:07:272 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:07:272 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:07:272 BST] (class).getResponse() [0 seconds]
[15-04-23 12:57:07:513 BST] SpreadsheetApp.openById([1fdOI61__16jFCEDJCvWHtVMu6BhkxS88x5408-JB8oA]) [0.239 seconds]
[15-04-23 12:57:07:513 BST] Spreadsheet.getSheetByName([main]) [0 seconds]
[15-04-23 12:57:07:690 BST] Sheet.getLastRow() [0.176 seconds]
[15-04-23 12:57:07:691 BST] Sheet.getRange([475, 1, 1, 7]) [0 seconds]
[15-04-23 12:57:07:693 BST] Range.setValues([[[23.04.2015 12:57:07, Andrew Davies, Lisa Smith, AWOL, 2015-04-23, 11:30, 20:00]]]) [0.001 seconds]
[15-04-23 12:57:07:859 BST] CalendarApp.getDefaultCalendar() [0.165 seconds]
[15-04-23 12:57:08:275 BST] Calendar.createEvent([Lisa Smith  AWOL deadline., Thu Apr 23 07:00:00 PDT 2015, Thu Apr 23 07:15:00 PDT 2015, {guests=andrew.davies@uk.webhelp.com,adam.taylor@uk.webhelp.com, sendInvites=true}]) [0.414 seconds]
[15-04-23 12:57:08:485 BST] DriveApp.getFileById([17i-HIzzNTMeVs8u7gIs_NHDoCDlFWX2y7D6LjnYEjUI]) [0.208 seconds]
[15-04-23 12:57:11:188 BST] File.makeCopy([AWOL_copy]) [2.702 seconds]
[15-04-23 12:57:11:280 BST] Execution failed: TypeError: Cannot find function removeFromFolder in object AWOL_copy. (line 164, file "utils") [4.646 seconds total runtime]

And here is the referenced error code

function copy_file(path, file,new_name) {
  var file_copy = file.makeCopy(new_name);
      file_copy.removeFromFolder(DriveApp.getRootFolder());
      file_copy.addToFolder(DriveApp.getFolder(path));
  return file_copy;
}


function create_doc_in_path(path, filename) {
  var doc = DocumentApp.create(filename);
  var file = DriveApp.getFileById(doc.getId());
  file.removeFromFolder(DriveApp.getRootFolder());
  file.addToFolder(DriveApp.getFolder(path));
  return doc;
}

Solution

  • Zig Mandel is correct, you need to map each functionality of older api with newer api.more info of DriveApp

    here is code may work.

    function copy_file(path,file,new_name) 
    {
      var folder = DriveApp.getFolderById(path);
      var file_copy = file.makeCopy(new_name);
      var document = DriveApp.getFileById(file_copy.getId());
      folder.addFile(document);
      return file_copy;
    }
    
    function create_doc_in_path(path,filename) 
    {
      var folder = DriveApp.getFolderById(path);
      var doc = DocumentApp.create(filename);
      var file = DriveApp.getFileById(doc.getId());
      folder.addFile(file);
      return doc;
    }