我正在尝试在Google幻灯片API参考中找到答案,了解如何设置我在Google幻灯片中拥有的形状的背景颜色。我已经给它了标题(使用Alt Text功能)" rectangle1",所以我的目的是按照&#34的顺序编写代码;如果形状属性"标题&# 34; ==" rectangle1",然后将背景颜色设置为红色。"
我无法看到对#34; SetBackgroundFill"的单一引用或SetBackgroundColor,或任何类似的东西。
有可能吗?
答案 0 :(得分:0)
要设置背景颜色,您需要Element Operations。
Slides API允许您创建和编辑各种页面 元素,包括文本框,图像,表格,基本形状,线条, 和嵌入的视频。此页面上的示例显示了一些常见页面 可以通过API实现的元素操作。
按照指定的步骤here执行指定形状或元素的更改。检查示例。
答案 1 :(得分:0)
嗯,这是我的解决方案。如果有人看到了改善它的方法,我会全力以赴,但到目前为止,它似乎对我没有任何干扰。
首先,我使用以下逻辑找到了我的形状:
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
}
}
所以,你会注意到我通过调用函数&#34; ChangeColorMain&#34;来启动我的过程。这也得到我的全局变量color_to_repl_r ...这是在我的google脚本项目的不同文件中定义的,但这并不重要。
进入ChangeShapeBackgroundColor()后,我遍历所有&#34; PageElements&#34;在我的幻灯片上(参见相关的for循环)并使用if语句来检查我是否达到了我正在寻找的形状。最后,一旦我找到它,我就会调用所有重要的函数SubmitRequest(),这是非常昂贵的&#34;。您不能在一天内拨打太多电话,否则Google会阻止此功能直到当天结束。但如果您每天拨打少于500个电话(这个数字可能错误/可能会改变),这不是问题。
以下是&#34; SubmitRequest()&#34;的详细信息。通过最终弄清楚如何理解这个参考页面,我能够创建: 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);
}
答案 2 :(得分:0)
这是另一个可能的答案,使用所谓的&#34;容器绑定脚本&#34;,只能通过特定幻灯片的工具/脚本编辑器菜单访问(没有其他方式,否则它不会工作。
我发现这个&#34;容器绑定脚本&#34;这种方法让我对幻灯片更有力量,并且当使用&#34;独立的时候,它避免了对这些昂贵的电话进行批量更新&#34;脚本在我的另一个&#34;自我回答&#34;。
所以,在某种程度上,我向自己推荐,但也许,对其他人来说,我的另一种方法是更好的选择。
首先,这种方法的响应时间要快得多。
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);
}
}
}
再次,和以前一样,我欢迎任何意见和建议。