Google Apps Script para establecer el color de la forma

Aug 26 2020

Estaba mirando la referencia de Google Apps Script aquí y noté que hay un método para setSolidFill(color).

Me preguntaba si era posible escribir un script de Google Apps para establecer colores de forma basados ​​en valores/referencia de búsqueda en una hoja de Google. ¿Esencialmente establecer el color de la Forma # 001 en las Presentaciones de Google en el código HEX en A2 de una Hoja de Google?

Respuestas

3 Tanaike Aug 26 2020 at 14:19

Me pregunto si es posible establecer colores de forma según los códigos de color que se encuentran en una hoja de Google.

Creo que tu objetivo se puede lograr. Entonces, para ayudar a comprender el método para lograr su objetivo, propuse los siguientes 2 patrones.

Patrón 1:

En este patrón, el color de la forma se cambia usando el ID de objeto de la forma en la primera diapositiva en Google Slides. En este ejemplo, el color hexadecimal se recupera de la celda "A1" de la hoja de cálculo. Configure el ID de la hoja de cálculo, el nombre de la hoja y el ID de la presentación.

Guión de muestra:

function myFunction() {
  const objectId = "###";  // Please set the object ID.
  
  const hexColor = SpreadsheetApp.openById("spreadsheetId").getSheetByName("sheetName").getRange("A1").getValue();
  const slide = SlidesApp.openById("presentationId").getSlides()[0];
  var obj = slide.getShapes().filter(s => s.getObjectId() == objectId);
  if (obj.length > 0) obj[0].getFill().setSolidFill(hexColor);
}

Patrón 2:

En este patrón, el color de la forma se cambia usando el tipo de forma de la forma en la primera diapositiva en Google Slides. En este ejemplo, el color hexadecimal se recupera de la celda "A1" de la hoja de cálculo y se cambia el color de las formas "RECTÁNGULO". Configure el ID de la hoja de cálculo, el nombre de la hoja y el ID de la presentación. Seleccione el tipo de forma de Enum ShapeType .

Guión de muestra:

function myFunction() {
  const shapeType = "RECTANGLE";  // Please set the shape type.
  
  const hexColor = SpreadsheetApp.openById("spreadsheetId").getSheetByName("sheetName").getRange("A1").getValue();
  const slide = SlidesApp.openById("presentationId").getSlides()[0];
  var objs = slide.getShapes().filter(s => s.getShapeType() == SlidesApp.ShapeType[shapeType]);
  if (objs.length > 0) {
    objs.forEach(obj => obj.getFill().setSolidFill(hexColor));
  }
}

Nota:

  • Estos son los scripts de muestra simples. Entonces, cuando use el script, modifíquelo para su situación real.

Referencias:

  • setSolidFill(hexString)
  • obtenerIdObjeto()
  • obtenerTipoForma()
  • Tipo de forma de enumeración

Añadido 1:

Cuando desee recuperar los ID de objeto de todas las formas en una diapositiva, puede usar el siguiente script.

Guión de muestra:

const slide = SlidesApp.openById(presentationId).getSlides()[0];
const objectIds = slide.getShapes().map(s => s.getObjectId());
console.log(objectIds)
  • En este caso, los ID de objeto de todas las formas en la primera diapositiva se colocan en una matriz.

Añadido 2:

Por ejemplo, cuando los colores de todas las formas en la primera diapositiva en Google Slides se cambian al color rojo, se puede usar el siguiente script. Cuando desee seleccionar una de las formas usando la ID del objeto, al principio, recupere las ID del objeto usando la secuencia de comandos de "Agregado 1" y use la secuencia de comandos de "Patrón 1".

Guión de muestra:

function myFunction() {
  const hexColor = "#ff0000";  // This is a red color.
  const slide = SlidesApp.openById(presentationId).getSlides()[0];
  const shapes = slide.getShapes();
  if (shapes.length > 0) {
    shapes.forEach(obj => obj.getFill().setSolidFill(hexColor));
  }
}

Añadido 3:

Acerca can the pattern 1 script use an array (I need to change colours of several shapes, not just one)de , a partir de su solicitud adicional de can you please show me how to adjust the pattern 1 script to work with an array?, agregué una secuencia de comandos de muestra más de la siguiente manera.

En esta muestra, al principio, configure los ID de objeto y los colores hexadecimales en objectIds. Con esto, se pueden cambiar los colores de las formas de la primera diapositiva.

Guión de muestra:

function myFunction() {
  const objectIds = [
    {objectId: "###", hexColor: "###"},
    {objectId: "###", hexColor: "###"},
    ,
    ,
    ,
  ];
  
  const slide = SlidesApp.openById("presentationId").getSlides()[0];
  const shapeObjects = slide.getShapes().reduce((o, s) => Object.assign(o, {[s.getObjectId()]: s}), {});
  objectIds.forEach(({objectId, hexColor}) => {
    if (shapeObjects[objectId]) shapeObjects[objectId].getFill().setSolidFill(hexColor);
  });
}

Nota:

  • Este es un script de muestra simple. Por lo tanto, modifíquelo para su situación real.