将谷歌幻灯片形状的背景更改为红色

时间:2018-01-25 04:45:25

标签: google-slides-api google-slides

我正在尝试在Google幻灯片API参考中找到答案,了解如何设置我在Google幻灯片中拥有的形状的背景颜色。我已经给它了标题(使用Alt Text功能)" rectangle1",所以我的目的是按照&#34的顺序编写代码;如果形状属性"标题&# 34; ==" rectangle1",然后将背景颜色设置为红色。"

我无法看到对#34; SetBackgroundFill"的单一引用或SetBackgroundColor,或任何类似的东西。

有可能吗?

3 个答案:

答案 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);
    }
  }
}

再次,和以前一样,我欢迎任何意见和建议。