Search code examples
google-apps-scriptgoogle-sheetsgoogle-docsgoogle-formsgoogle-docs-api

Create new document from Google form and add to a new folder


I have a Google script triggered on submission of a form. It creates a new doc based on a template with certain variables in-filled from answers in the form.

I also have a folder created on the form submission.

The trouble I am having is creating the newly created doc within the newly created folder. Looking for some help merging the two scripts that work on their own to acheive this.

Creating a folder on form submission:

function createChannelFolder() {
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("Completed Certifications");
var ChannelName = names.getRange(names.getLastRow(), 2).getValue(); 
var parentFolder=DriveApp.getFolderById("FOLDERID");
return newFolder=parentFolder.createFolder(ChannelName);
  
}

Creating a document on form submission

function autoFillGoogleDocFromForm(e) {
  //e.values is an array of form values
  var Timestamp = e.values[0];
  var Channel = e.values[1];
  var Name = e.values[2];;
  
  var file = DriveApp.getFileById('FILEID'); 
  
  var folder = DriveApp.getFolderById('FOLDERID')
  var copy = file.makeCopy(Channel + ',' + Name, folder); 
  var newId = copy.getId();
  var doc = DocumentApp.openById(newId); 

  var body = doc.getBody(); 
  body.replaceText('{{Timestamp}}', Timestamp); 
  body.replaceText('{{Channel}}', Channel);  
  body.replaceText('{{Name}}', Name);
         
  doc.saveAndClose(); 
}

Solution

  • Explanation:

    • You need to call createChannelFolder() inside autoFillGoogleDocFromForm(e).

    • just return the folder object within createChannelFolder():

      return parentFolder.createFolder(ChannelName);


    Solution:

    Here is autoFillGoogleDocFromForm(e):

    function autoFillGoogleDocFromForm(e) {
      //e.values is an array of form values
      var Timestamp = e.values[0];
      var Channel = e.values[1];
      var Name = e.values[2];;
      
      var file = DriveApp.getFileById('FILEID'); 
      
      var folder = createChannelFolder(); // 1st modification point
      var copy = file.makeCopy(Channel + ',' + Name, folder); 
      var newId = copy.getId();
      var doc = DocumentApp.openById(newId); 
    
      var body = doc.getBody(); 
      body.replaceText('{{Timestamp}}', Timestamp); 
      body.replaceText('{{Channel}}', Channel);  
      body.replaceText('{{Name}}', Name);
             
      doc.saveAndClose(); 
    }
    

    and here is createChannelFolder():

    function createChannelFolder() {
    var ss = SpreadsheetApp.getActive();
    var names = ss.getSheetByName("Completed Certifications");
    var ChannelName = names.getRange(names.getLastRow(), 2).getValue(); 
    var parentFolder=DriveApp.getFolderById("FOLDERID");
    return parentFolder.createFolder(ChannelName); // 2nd modification point
      
    }