Script do Google Apps para definir a cor da forma

Aug 26 2020

Eu estava olhando a referência do Google Apps Script aqui e notei que há um método para arquivos setSolidFill(color).

Eu queria saber se era possível escrever um script do Google Apps para definir as cores da forma com base em valores/referência de pesquisa em uma planilha do Google? Essencialmente definir a cor da forma #001 no Google Slides para o código HEX em A2 de uma planilha do Google?

Respostas

3 Tanaike Aug 26 2020 at 14:19

Gostaria de saber se é possível definir as cores da forma com base nos códigos de cores encontrados em uma planilha do Google.

Acho que seu objetivo pode ser alcançado. Portanto, para ajudar a entender o método para atingir seu objetivo, propus os 2 padrões a seguir.

Padrão 1:

Nesse padrão, a cor da forma é alterada usando o ID do objeto da forma no primeiro slide do Apresentações Google. Nesta amostra, a cor hexadecimal é recuperada da célula "A1" da Planilha. Defina o ID da planilha, o nome da planilha e o ID da apresentação.

Exemplo de roteiro:

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);
}

Padrão 2:

Nesse padrão, a cor da forma é alterada usando o tipo de forma da forma no 1º slide no Google Slides. Neste exemplo, a cor hexadecimal é recuperada da célula "A1" da Planilha e a cor das formas "RETÂNGULO" é alterada. Defina o ID da planilha, o nome da planilha e o ID da apresentação. Selecione o tipo de forma em Enum ShapeType .

Exemplo de roteiro:

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));
  }
}

Observação:

  • Estes são os scripts de amostra simples. Portanto, ao usar o script, modifique-o para sua situação real.

Referências:

  • setSolidFill(hexString)
  • getObjectId()
  • getShapeType()
  • Enum ShapeType

Adicionado 1:

Quando você deseja recuperar as IDs de objeto de todas as formas em um slide, pode usar o seguinte script.

Exemplo de roteiro:

const slide = SlidesApp.openById(presentationId).getSlides()[0];
const objectIds = slide.getShapes().map(s => s.getObjectId());
console.log(objectIds)
  • Nesse caso, os IDs de objeto de todas as formas no primeiro slide são colocados em uma matriz.

Adicionado 2:

Por exemplo, quando as cores de todas as formas no 1º slide no Google Slides são alteradas para a cor vermelha, o seguinte script pode ser usado. Quando você quiser selecionar uma das formas usando o ID do objeto, primeiro recupere os IDs do objeto usando o script "Adicionado 1" e use o script "Padrão 1".

Exemplo de roteiro:

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));
  }
}

Adicionado 3:

Sobre can the pattern 1 script use an array (I need to change colours of several shapes, not just one), de sua solicitação adicional de can you please show me how to adjust the pattern 1 script to work with an array?, adicionei mais um script de amostra da seguinte forma.

Neste exemplo, primeiro defina os IDs de objeto e as cores hexadecimais em objectIds. Com isso, as cores das formas do 1º slide podem ser alteradas.

Exemplo de roteiro:

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);
  });
}

Observação:

  • Este é um script de amostra simples. Portanto, modifique-o para sua situação real.