Search code examples
javascriptgoogle-apps-scriptgoogle-slides-apigoogle-slides

How to add a new slide with new layout on Google Slides?


The following is what I did:

  1. Created a new presentation on Google Slides,

  2. Edited one of the predefined layouts on the Master Layout view in order to have a new layout that I want to use,

  3. Edited the name of the Master Layout to "Meeting",

  4. Edited the name of the predefined layout that I want to use to "Office".

My problem is that on Google Script I am not being able to reference this specific predefined layout that I want to use.

So far, my code is the following:

function AddSlideToPresentatio() {

// The following line opens my presentation
var presentation = SlidesApp.openById('PresentationID');

//Now, I try to use my new layout
  presentation.appendSlide("Office");
}

I have absolutely no idea on why this doesn't work. When I try to run it, I get the error:

"Cannot find method appendSlide(string). (line 6, file "Office").

The following are some of the combinations that I tried, and they get me similar errors:

presentation.appendSlide('Office');
presentation.appendSlide(Office);
presentation.appendSlide("Meeting - Office");
presentation.appendSlide('Meeting - Office');
presentation.appendSlide(Meeting - Office);

If I just use presentation.appendSlide() it creates a new slide, but not with the layout that I want to use.

In the Google Apps Script Reference there are three methods:

  1. appendSlide(),
  2. appendSlide(layout),
  3. appendSlide(predefinedLayout)

However, I can't seem to understand what is the difference between that last two, because when I try to use them they seem to do the same thing.


Solution

  • You are passing layout object's name for the appendSlide method, but you should pass LayoutObject parameter.

    appendSlide(LayoutObject)

    // The following line opens my presentation
    var presentation = SlidesApp.openById('PresentationID');
    // this will return an array of all the layouts
    var layouts = presentation.getLayouts();
    
    //if your first array item is the office layout
    var newSlide = presentation.appendSlide(layouts[0]);
    
    //Orelse you can search for your layout
    var selectedLayout;
    for(var item in layouts)
    {
       //Logger.log(layouts[item].getLayoutName());
       if(layouts[item].getLayoutName() =='CUSTOM_1')
       {
         selectedLayout = layouts[item];
       }
    }
    var newSlide = presentation.appendSlide(selectedLayout);
    

    PreDefinedLayout is an enum. It contains layouts that commonly found in presentations. Read all the available predefined layouts

    use them as below;

    presentation.appendSlide(SlidesApp.PredefinedLayout.SECTION_TITLE_AND_DESCRIPTION);