我试图在 Google Slides API 参考中找到有关如何设置 Google Slide 中形状的背景颜色的答案。我给它的标题(使用替代文本功能)“rectangle1”,所以我的意图是按照“如果形状的属性“title”==“rectangle1”的行编写代码,然后将背景颜色设置为红色。
我看不到对“SetBackgroundFill”或 SetBackgroundColor 或任何类似内容的单一引用。
可能吗?
我试图在 Google Slides API 参考中找到有关如何设置 Google Slide 中形状的背景颜色的答案。我给它的标题(使用替代文本功能)“rectangle1”,所以我的意图是按照“如果形状的属性“title”==“rectangle1”的行编写代码,然后将背景颜色设置为红色。
我看不到对“SetBackgroundFill”或 SetBackgroundColor 或任何类似内容的单一引用。
可能吗?
这是另一个可能的答案,使用所谓的“容器绑定脚本”,只能通过特定幻灯片的工具/脚本编辑器菜单访问(没有其他方法,否则它将不起作用)。
我发现这种“容器绑定脚本”方法使我对幻灯片有更多的权力,并且在使用“独立”脚本时避免了对“batchUpdate”的这些昂贵的调用,就像在我的其他“自我回答”中一样。
因此,在某种程度上,我向自己推荐它,但也许对其他人来说,我的其他方法会是更好的选择。
一方面,这种方法的响应时间要快得多。
var hex_color = '#54BdeF';
function test1() {
var selection = SlidesApp.getActivePresentation().getSelection();
var currentPage = selection.getCurrentPage();
var selectionType = selection.getSelectionType();
var shapes = currentPage.getShapes();
for (i=0; i < shapes.length; i++) {
if (shapes[i].getTitle() == 'rectangle1') {
shape_fill = shapes[i].getFill();
shape_fill.setSolidFill(hex_color);
}
}
}
同样,和以前一样,我欢迎任何意见和建议。
要设置背景颜色,您需要Element Operations。
Slides API 允许您创建和编辑各种页面元素,包括文本框、图像、表格、基本形状、线条和嵌入的视频。此页面上的示例显示了可以使用 API 实现的一些常见页面元素操作。
按照此处指定的步骤,将对您指定的形状或元素进行更改。检查示例。
好吧,这是我的解决方案。如果有人看到改进它的方法,我会全神贯注,但到目前为止,它似乎对我有用,没有故障。
首先,我在使用以下逻辑后找到了我的形状:
function ChangeColorMain()
{
ChangeShapeBackgroundColor('title', 'rectangle1', color_to_repl_r, color_to_repl_g, color_to_repl_b, alpha_value );
}
function ChangeShapeBackgroundColor(shape_property_name, shape_property_value, color_to_set_r, color_to_set_g, color_to_set_b) {
Logger.log( 'ChangeShapeBackgroundColor(shape_property_name=%s, shape_property_value=%s, color_to_set_r=%s, color_to_set_g=%s, color_to_set_b=%s) ',
shape_property_name, shape_property_value, color_to_set_r, color_to_set_g, color_to_set_b);
var presentation = Slides.Presentations.get(presentationId);
var slides = presentation.slides;
Logger.log('The presentation contains %s slides:', slides.length);
for (i = 0; i < slides.length; i++) {
for (j = 0; j < slides[i].pageElements.length; j++ ) {
if (shape_property_name == 'title' && shape_property_value == slides[i].pageElements[j].title) {
Logger.log('Found it');
//slides[i].pageElements[j].shape.shapeProperties.shapeBackgroundFill.solidFill.color.rgbColor.red = color_to_set_r;
SubmitRequest(slides[i].pageElements[j].objectId, color_to_set_r, color_to_set_g, color_to_set_b, alpha_value);
}
} //end of for that iterates through every element
}
}
因此,您会注意到我通过调用函数“ChangeColorMain”开始我的流程,该函数还获取我的全局变量 color_to_repl_r...,这些变量在我的 google 脚本项目的不同文件中定义,但这并不重要。
进入 ChangeShapeBackgroundColor() 后,我会遍历幻灯片上的所有“PageElements”(请参阅相关的 for 循环)并使用 if 语句检查是否达到了我正在寻找的形状。最后,一旦找到它,我就会调用所有重要的函数 SubmitRequest(),它是“昂贵的”。你一天不能打太多电话,否则谷歌会阻止这个功能,直到一天结束。但是,如果您每天拨打的电话少于 500 次,这不是问题(这个数字可能是错误的/可能会改变)。
以下是“SubmitRequest()”的详细信息,我通过最终弄清楚如何理解这个参考页面来创建它: https ://developers.google.com/slides/reference/rest/v1/presentations/request #UpdateShapePropertiesRequest
function SubmitRequest(shape_id, r, g, b, a) {
var rgb_color = {
red: r,
green: g,
blue: b
};
var opaque_color = {
rgbColor: rgb_color
};
var solid_fill = {
color: opaque_color,
alpha: a
};
var background_fill = {
solidFill: solid_fill
};
var shape_properties = {
shapeBackgroundFill: background_fill
};
var update_request = {
objectId: shape_id,
shapeProperties: shape_properties,
fields: "shapeBackgroundFill.solidFill.color"
};
var requests = [{
updateShapeProperties: update_request
}];
// Execute the request.
var batch_update_return = Slides.Presentations.batchUpdate({
requests: requests
}, presentationId);
Logger.log(
'This is what you get from Google after submitting batchUpdate request:\n%s', batch_update_return);
}