Google Apps脚本设置形状颜色 示例脚本:示例脚本:示例脚本:示例脚本:示例脚本:注意:

问题描述

我在浏览Google Apps脚本参考here时发现有一种setSolidFill(color)方法

我想知道是否可以编写Google Apps脚本来基于Google表格中的值/查找参考来设置形状颜色?实质上是将Google幻灯片中的形状#001的颜色设置为Google表格A2中的十六进制代码吗?

解决方法

我想知道是否可以根据Google表格中的颜色代码设置形状颜色。

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

模式1:

在此图案中,形状的颜色使用Google幻灯片上第一张幻灯片中的形状的对象ID进行更改。在此示例中,十六进制颜色是从电子表格的单元格“ A1”中检索的。请设置电子表格ID,工作表名称和演示文稿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);
}

模式2:

在此图案中,形状的颜色使用Google幻灯片上第一张幻灯片中形状的形状类型进行更改。在此示例中,从电子表格的单元格“ A1”中检索十六进制颜色,并且更改了“矩形”形状的颜色。请设置电子表格ID,工作表名称和演示ID。请从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幻灯片中第一张幻灯片的所有形状的颜色都更改为红色时,可以使用以下脚本。要使用对象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: "###",];
  
  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);
  });
}

注意:

  • 这是一个简单的示例脚本。因此,请根据您的实际情况对其进行修改。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...