嗯,这是我的解决方案。如果有人看到改进它的方法,我会全力以赴,但到目前为止,它似乎对我来说没有故障。
首先,我使用以下逻辑找到我的形状:
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);
}