Google Apps Script zum Festlegen der Formfarbe

Aug 26 2020

Ich war auf der Suche über die Google Apps Script Referenz hier und bemerkte , dass es ein Verfahren zum setSolidFill(color).

Ich habe mich gefragt, ob es möglich ist, ein Google Apps-Skript zu schreiben, um Formfarben basierend auf Werten / Nachschlagewerken in einem Google Sheet festzulegen. Stellen Sie im Wesentlichen die Farbe von Form # 001 in Google Slides auf den HEX-Code in A2 eines Google Sheet ein.

Antworten

3 Tanaike Aug 26 2020 at 14:19

Ich frage mich, ob es möglich ist, Formfarben basierend auf Farbcodes in einem Google Sheet festzulegen.

Ich denke, dass Ihr Ziel erreicht werden kann. Um die Methode zur Erreichung Ihres Ziels besser zu verstehen, habe ich die folgenden zwei Muster vorgeschlagen.

Muster 1:

In diesem Muster wird die Farbe der Form mithilfe der Objekt-ID der Form auf der ersten Folie in Google Slides geändert. In diesem Beispiel wird die Hex-Farbe aus der Zelle "A1" der Tabelle abgerufen. Bitte legen Sie die Tabellenkalkulations-ID, den Blattnamen und die Präsentations-ID fest.

Beispielskript:

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

Muster 2:

In diesem Muster wird die Farbe der Form mithilfe des Formtyps der Form auf der ersten Folie in Google Slides geändert. In diesem Beispiel wird die Hex-Farbe aus der Zelle "A1" der Tabelle abgerufen und die Farbe der "RECTANGLE" -Formen wird geändert. Bitte legen Sie die Tabellenkalkulations-ID, den Blattnamen und die Präsentations-ID fest. Bitte wählen Sie den Formtyp aus Enum ShapeType .

Beispielskript:

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

Hinweis:

  • Dies sind die einfachen Beispielskripte. Wenn Sie das Skript verwenden, ändern Sie es bitte an Ihre aktuelle Situation.

Verweise:

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

1 hinzugefügt:

Wenn Sie die Objekt-IDs aller in einer Folie geformten Elemente abrufen möchten, können Sie das folgende Skript verwenden.

Beispielskript:

const slide = SlidesApp.openById(presentationId).getSlides()[0];
const objectIds = slide.getShapes().map(s => s.getObjectId());
console.log(objectIds)
  • In diesem Fall werden die Objekt-IDs aller Formen in der ersten Folie in ein Array eingefügt.

Hinzugefügt 2:

Wenn beispielsweise die Farben aller Formen in der ersten Folie in Google Folien in die rote Farbe geändert werden, kann das folgende Skript verwendet werden. Wenn Sie eine der Formen mithilfe der Objekt-ID auswählen möchten, rufen Sie zunächst die Objekt-IDs mithilfe des Skripts "Hinzugefügt 1" und des Skripts "Muster 1" ab.

Beispielskript:

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

Hinzugefügt 3:

Über can the pattern 1 script use an array (I need to change colours of several shapes, not just one)Ihre zusätzliche Anfrage von habe can you please show me how to adjust the pattern 1 script to work with an array?ich ein weiteres Beispielskript wie folgt hinzugefügt.

In diesem Beispiel legen Sie zunächst die Objekt-IDs und Hex-Farben fest objectIds. Auf diese Weise können die Farben der Formen der 1. Folie geändert werden.

Beispielskript:

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

Hinweis:

  • Dies ist ein einfaches Beispielskript. Bitte ändern Sie es für Ihre aktuelle Situation.