Google 用于设置形状颜色的 Apps 脚本

Google Apps Script to set shape color

我正在查看 Google Apps 脚本参考 here 并注意到 setSolidFill(color).

有一个方法

我想知道是否可以编写 Google Apps 脚本来根据 Google Sheet 中的值/查找参考设置形状颜色?实质上是将 Google 幻灯片中形状 #001 的颜色设置为 Google Sheet?

的 A2 中的十六进制代码

I am wondering if it is possible to set shape colours based on colour codes found in a Google Sheet.

我认为你的目标可以实现。因此,为了帮助理解实现目标的方法,我提出了以下两种模式。

模式 1:

在此模式中,使用 Google 幻灯片中第一张幻灯片中形状的对象 ID 更改形状的颜色。在此示例中,从 Spreadsheet 的单元格“A1”中检索十六进制颜色。请设置 Spreadsheet ID、sheet 名称和演示文稿 ID。

示例脚本:

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

模式二:

在此模式中,使用 Google 幻灯片中第一张幻灯片中形状的形状类型更改形状的颜色。在此示例中,从 Spreadsheet 的单元格“A1”中检索十六进制颜色,并更改“RECTANGLE”形状的颜色。请设置 Spreadsheet ID、sheet 名称和演示文稿 ID。请 select 来自 Enum ShapeType 的形状类型。

示例脚本:

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

注:

  • 这些是简单的示例脚本。所以大家在使用脚本的时候,请根据自己的实际情况进行修改。

参考文献:

已添加 1 个:

当你想检索幻灯片中所有形状的对象ID时,你可以使用以下脚本。

示例脚本:

const slide = SlidesApp.openById(presentationId).getSlides()[0];
const objectIds = slide.getShapes().map(s => s.getObjectId());
console.log(objectIds)
  • 在这种情况下,第一个幻灯片中所有形状的对象 ID 都放在一个数组中。

添加了 2 个:

例如,当Google张幻灯片中第1张幻灯片的所有形状的颜色都改为红色时,可以使用如下脚本。当您想select其中一个形状使用对象ID时,首先,请使用“添加1”的脚本检索对象ID,然后使用“模式1”的脚本。

示例脚本:

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

添加了 3 个:

关于can the pattern 1 script use an array (I need to change colours of several shapes, not just one),根据您对can you please show me how to adjust the pattern 1 script to work with an array?的额外要求,我又添加了一个示例脚本如下。

在这个例子中,首先,请在objectIds中设置对象ID和十六进制颜色。这样,第一张幻灯片的形状颜色就可以改变了。

示例脚本:

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

注:

  • 这是一个简单的示例脚本。所以请根据自己的实际情况修改。