1

I have this Google Apps Script that works fine:

function myFunction(e) {

  var name = e.values[1];
  var kantoor = e.values[2];

  var doc = DocumentApp.create('Sleuteloverdracht ' + name);
  var body = doc.getBody();
  body.appendParagraph('Sleuteloverdracht ' + name);
  body.appendParagraph('Uw naam is '+ name + '\n' + 'U heeft de sleutel van kantoor '+ kantoor);
  doc.saveAndClose();

}

It makes a Google Doc with content from a Spreadsheet that is filled with responses from a Form. It works with a trigger, when the form is send the doc is made.

But the problem is that the Google Doc files are placed in My Drive instead of the same folder as the Form and the Spreadsheet.

Edit: the problem in this Create a Google Doc file directly in a Google Drive folder topic is not the same. I already have a Doc, don't want to create one. The existing Doc just needs to move to another file. See answer below for the solution I used.

2 Answers2

0

This is how to create a new Google Doc in a specific folder. When the Doc is created, the mime type must be set.

Note that this code does NOT first create a Doc file, move it, and then delete the file in the Root Drive. There is another popular answer that does that. This code creates a new Google Doc type file directly in a folder.

You will need to use the Advanced Drive API. It must be enabled in two places.

  • From the code editor choose "Resources" and then choose, "Advanced Google services"
  • Click the button for "Drive API" so that it is ON.
  • Click the link: Google Cloud Platform API Dashboard.
  • Search Drive API
  • Choose Google Drive API from search list
  • Enable the Drive API

Code:

function myFunction(e) {
  var doc,fileResource,folder,ID_of_newFile,multipleFolders,newFile,
      newDocName,rng,sh,ss,ssFile,ssID;

  var name = e.values[1];
  var kantoor = e.values[2];

  newDocName = 'Sleuteloverdracht ' + name;//Set the name of the new file

  rng = e.range;//Get range in the spreadsheet that received the data
  sh = rng.getSheet();//Get sheet tab
  ss = sh.getParent();//Get spreadsheet
  ssID = ss.getSheetId();//Get file ID of spreadsheet - Integer

  ssFile = DriveApp.getFileById(ssID);//Get the spreadsheet file in order to get the
    //folder to put the new file in
  multipleFolders = ssFile.getParents();//Get all parent folders of the spreadsheet file

  folder = multipleFolders.next();//Get the folder of the spreadsheet

  fileResource = {
    'title': newDocName,
    "parents": [{'id':folder.getId()}],  //<--By setting this parent ID to the 
    //folder's ID, it creates this file in the correct folder
    'mimeType': 'application/vnd.google-apps.document'
  };

  newFile = Drive.Files.insert(fileResource);//Create the new document file
   // directly into the same folder as the spreadsheet
  ID_of_newFile = newFile.getId();

  //Logger.log(ID_of_newFile)

  doc = DocumentApp.openById(newFile.getId());//Open the new file as a Google document

  var body = doc.getBody();
  body.appendParagraph('Sleuteloverdracht ' + name);
  body.appendParagraph('Uw naam is '+ name + '\n' + 
    'U heeft de sleutel van kantoor '+ kantoor);
  doc.saveAndClose();

}
Alan Wells
  • 30,746
  • 15
  • 104
  • 152
  • Thanks for your help. Unfortunally I could't get your solution to work but I find another way. I made a different script that search for docs with the right name in the root and moves them to the right folder. – Nina Bakker Nov 28 '18 at 20:46
  • You should post your solution as an answer. You can answer your own question. – Alan Wells Nov 28 '18 at 21:22
0

I found the answer myself.

I used this script (it is a combination of two scripts I found online) to find files with the right name and remove them to the destination folder. After that it removes the file in the root. It works with a trigger, the function is triggered every minute because in my case the Form that creates the Doc (that needs to be moved to the destination folder) is used multiple times per hour (multiple Docs are created).

   function SearchFiles() {

      var searchFor ='title contains "NAME/LETTER"';
      var names =[];
      var fileIds=[];
      var files = DriveApp.searchFiles(searchFor);

      while (files.hasNext()) {
        var file = files.next();
        var fileId = file.getId(); 
        fileIds.push(fileId);
        var name = file.getName();
        names.push(name);


   }

      var docFile = DriveApp.getFileById(fileId);
      DriveApp.getFolderById('FOLDER_ID_DESTINATION_FOLDER').addFile(docFile);
      DriveApp.getRootFolder().removeFile(docFile);

    }