Script do Google Apps para definir a cor da forma
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
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.