我想知道是否可以根据 Google 表格中找到的颜色代码设置形状颜色。
我认为你的目标可以实现。因此,为了帮助理解实现目标的方法,我提出了以下两种模式。
模式一:
在此模式中,形状的颜色使用 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”中检索十六进制颜色,并更改“RECTANGLE”形状的颜色。请设置电子表格 ID、工作表名称和演示文稿 ID。请选择形状类型枚举形状类型 https://developers.google.com/apps-script/reference/slides/shape-type.
示例脚本:
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));
}
}
Note:
- 这些是简单的示例脚本。所以大家在使用脚本的时候,请根据自己的实际情况进行修改。
参考:
- 设置实体填充(十六进制字符串) https://developers.google.com/apps-script/reference/slides/fill#setsolidfillhexstring
- 获取对象 ID() https://developers.google.com/apps-script/reference/slides/shape#getobjectid
- 获取形状类型() https://developers.google.com/apps-script/reference/slides/shape#getshapetype
- 枚举形状类型 https://developers.google.com/apps-script/reference/slides/shape-type
Added 1:
当您想要检索幻灯片中所有形状的对象 ID 时,可以使用以下脚本。
示例脚本:
const slide = SlidesApp.openById(presentationId).getSlides()[0];
const objectIds = slide.getShapes().map(s => s.getObjectId());
console.log(objectIds)
- 在本例中,第一张幻灯片中所有形状的对象 ID 都放入一个数组中。
Added 2:
例如,当Google Slides中第一张幻灯片中的所有形状的颜色更改为红色时,可以使用以下脚本。当您想使用对象 ID 选择一个形状时,首先,请使用“Added 1”脚本检索对象 ID,然后使用“Pattern 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));
}
}
Added 3:
About 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?
,我又添加了一个示例脚本,如下所示。
在此示例中,首先,请在中设置对象 ID 和十六进制颜色objectIds
。由此,可以改变第一幻灯片的形状的颜色。
示例脚本:
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);
});
}
Note:
- 这是一个简单的示例脚本。所以请根据您的实际情况进行修改。