【问题标题】:Google Apps Script to set shape color用于设置形状颜色的 Google Apps 脚本
【发布时间】:2020-08-26 05:49:42
【问题描述】:

我正在查看 Google Apps 脚本参考 here 并注意到 setSolidFill(color) 有一个方法。

我想知道是否可以编写一个 Google Apps 脚本来根据 Google 表格中的值/查找参考设置形状颜色?本质上将 Google Slides 中 Shape #001 的颜色设置为 Google Sheet A2 中的 HEX 代码?

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。为了正确理解你的问题,我可以问你write a Google Apps Script to set shape colors based on values/ lookup reference in a Google SheetEssentially set the colour of Shape #001 in Google Slides to the HEX code in A2 of a Google Sheet?的细节吗?还有,Shape #001 是什么?
  • 你的链接没有指向这样的方法
  • @TheMaster,谢谢我更新了链接以显示我正在查看的内容
  • @Tanaike,我想知道是否可以根据 Google 表格中的颜色代码设置形状颜色。这可以节省我每次输入新数据时手动调整每种颜色的时间。我认为有一个形状或对象 ID 可以用来设置该形状的颜色。
  • 感谢您的回复。根据您的回复,我提出了 2 个示例脚本。如果这些帮助您理解实现目标,我很高兴。如果我误解了您的目标,我深表歉意。

标签: google-apps-script google-slides


【解决方案1】:

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

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

模式一:

在此模式中,形状的颜色使用 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:

例如,当谷歌幻灯片中第一张幻灯片中所有形状的颜色都变为红色时,可以使用以下脚本。当您想使用对象 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);
  });
}

注意:

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

【讨论】:

  • 抱歉,我如何在 Google Apps 脚本中使用它?
  • @DrPaulVella 感谢您的回复。我不得不为我糟糕的英语水平道歉。不幸的是,我不确定我是否能正确理解how do i use this in Google Apps Script?。如果要运行脚本,请执行以下流程。 1. 创建新的 Google 幻灯片并创建一个形状(例如,它是矩形。) 2. 在 Google 幻灯片中打开脚本编辑器。 3. 复制并粘贴上述脚本。 4. 通过选择函数名称,使用脚本编辑器运行函数。 Ref
  • @DrPaulVella 我不确定我是否能正确理解how do i use this in Google Apps Script?。所以我又添加了一个示例脚本。你能确认一下吗?在这种情况下,Google 幻灯片中第一张幻灯片中所有形状的颜色都会更改为红色。这对您的情况没有用。我再次道歉。
  • @Tanakie,谢谢,我想我找到了 ObjectID,在运行脚本后,在 Google Apps 脚本中我去了查看 > 日志
  • @DrPaulVella 感谢您的回复。我可以理解您可以检索对象 ID。如果您的问题仍未解决,请告诉我。我想确认一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多