Search code examples
google-apps-scriptshapesgroupgoogle-slides

Collecting Google Slides Shapes into a Group Using Apps Script


I have a Google Apps Script that generates 15 to 20 ellipses in specific places on a slide. I have not been able to find how to collect the generated ellipses into a group programmatically. Any insight would be most appreciated.

I have researched the Google Apps Script documentation but have not been able to find a workable solution.

Here is the code I am using:

function createColorCodeLabelsSlide() {
  var objSheetFile = retrieveFileObject(strSheetsFileName);
  var ss = SpreadsheetApp.open(objSheetFile);
  var sheet = ss.getSheetByName(strTargetSheetName);
  var data = sheet.getDataRange().getValues();
  var myPres = SlidesApp.getActivePresentation();
  var newSlide = myPres.appendSlide();

  for (var i=1; i < data.length; i++) {
    var colorCode = data[i][11];
    var myNewShape = newSlide.insertShape(SlidesApp.ShapeType.ELLIPSE,data[i][3],data[i][2],16,16);
    myNewShape
      .getText()
      .setText(colorCode);
    myNewShape
      .getText()
      .getTextStyle()
      .setFontFamily("Arial")
      .setFontSize(12);
    myNewShape
      .getText()
      .getParagraphStyle()
      .setParagraphAlignment(SlidesApp.ParagraphAlignment.CENTER);
    myNewShape
      .getFill()
      .setSolidFill(255,255,255);
  }
}

Solution

  • I believe your goal is as follows.

    • You want to group the inserted shapes using Google Apps Script.

    In this case, how about modifying your script as follows.

    Modified script:

    function createColorCodeLabelsSlide() {
      var objSheetFile = retrieveFileObject(strSheetsFileName);
      var ss = SpreadsheetApp.open(objSheetFile);
      var sheet = ss.getSheetByName(strTargetSheetName);
      var data = sheet.getDataRange().getValues();
      var myPres = SlidesApp.getActivePresentation();
      var newSlide = myPres.appendSlide();
      var shapes = [];
      for (var i = 1; i < data.length; i++) {
        var colorCode = data[i][11];
        var myNewShape = newSlide.insertShape(SlidesApp.ShapeType.ELLIPSE, data[i][3], data[i][2], 16, 16);
        myNewShape.getText().setText(colorCode);
        myNewShape.getText().getTextStyle().setFontFamily("Arial").setFontSize(12);
        myNewShape.getText().getParagraphStyle().setParagraphAlignment(SlidesApp.ParagraphAlignment.CENTER);
        myNewShape.getFill().setSolidFill(255, 255, 255);
        shapes.push(myNewShape);
      }
      newSlide.group(shapes);
    }
    
    • When this script is run, all created shapes myNewShape are grouped.

    Note:

    • In this modification, it supposes that your showing script works without any errors. Please be careful about this.

    Reference: