Script di Google Apps per impostare il colore della forma

Aug 26 2020

Stavo esaminando il riferimento a Google Apps Script qui e ho notato che esiste un metodo per setSolidFill(color).

Mi chiedevo se fosse possibile scrivere uno script di Google Apps per impostare i colori delle forme in base a valori/riferimento di ricerca in un foglio di Google. Essenzialmente impostare il colore della forma n. 001 in Presentazioni Google sul codice HEX in A2 di un foglio Google?

Risposte

3 Tanaike Aug 26 2020 at 14:19

Mi chiedo se sia possibile impostare i colori delle forme in base ai codici colore trovati in un foglio Google.

Penso che il tuo obiettivo possa essere raggiunto. Quindi, per aiutarti a capire il metodo per raggiungere il tuo obiettivo, ho proposto i seguenti 2 modelli.

Modello 1:

In questo modello, il colore della forma viene modificato utilizzando l'ID oggetto della forma nella prima diapositiva di Presentazioni Google. In questo esempio, il colore esadecimale viene recuperato dalla cella "A1" del foglio di calcolo. Imposta l'ID del foglio di calcolo, il nome del foglio e l'ID della presentazione.

Esempio di sceneggiatura:

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

Modello 2:

In questo modello, il colore della forma viene modificato utilizzando il tipo di forma della forma nella prima diapositiva di Presentazioni Google. In questo esempio, il colore esadecimale viene recuperato dalla cella "A1" del foglio di calcolo e il colore delle forme "RETTANGOLO" viene modificato. Imposta l'ID del foglio di calcolo, il nome del foglio e l'ID della presentazione. Selezionare il tipo di forma da Enum ShapeType .

Esempio di sceneggiatura:

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:

  • Questi sono i semplici script di esempio. Quindi, quando usi lo script, modificalo per la tua situazione attuale.

Riferimenti:

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

Aggiunto 1:

Quando si desidera recuperare gli ID oggetto di tutte le forme in una diapositiva, è possibile utilizzare il seguente script.

Esempio di sceneggiatura:

const slide = SlidesApp.openById(presentationId).getSlides()[0];
const objectIds = slide.getShapes().map(s => s.getObjectId());
console.log(objectIds)
  • In questo caso, gli ID oggetto di tutte le forme nella prima diapositiva vengono inseriti in un array.

Aggiunto 2:

Ad esempio, quando i colori di tutte le forme nella prima diapositiva di Presentazioni Google vengono cambiati in rosso, è possibile utilizzare il seguente script. Quando si desidera selezionare una delle forme utilizzando l'ID oggetto, in un primo momento, recuperare gli ID oggetto utilizzando lo script di "Aggiunto 1" e utilizzare lo script di "Pattern 1".

Esempio di sceneggiatura:

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

Aggiunto 3:

A proposito can the pattern 1 script use an array (I need to change colours of several shapes, not just one)di , dalla tua richiesta aggiuntiva di can you please show me how to adjust the pattern 1 script to work with an array?, ho aggiunto un altro script di esempio come segue.

In questo esempio, inizialmente, imposta gli ID oggetto e i colori esadecimali in objectIds. In questo modo è possibile modificare i colori delle forme della prima diapositiva.

Esempio di sceneggiatura:

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:

  • Questo è un semplice script di esempio. Quindi, per favore, modificalo per la tua situazione attuale.