2

我试图在 Google Slides API 参考中找到有关如何设置 Google Slide 中形状的背景颜色的答案。我给它的标题(使用替代文本功能)“rectangle1”,所以我的意图是按照“如果形状的属性“title”==“rectangle1”的行编写代码,然后将背景颜色设置为红色。

我看不到对“SetBackgroundFill”或 SetBackgroundColor 或任何类似内容的单一引用。

可能吗?

4

3 回答 3

2

这是另一个可能的答案,使用所谓的“容器绑定脚本”,只能通过特定幻灯片的工具/脚本编辑器菜单访问(没有其他方法,否则它将不起作用)。

我发现这种“容器绑定脚本”方法使我对幻灯片有更多的权力,并且在使用“独立”脚本时避免了对“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);
    }
  }
}

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

于 2018-02-19T04:12:27.967 回答
0

要设置背景颜色,您需要Element Operations

Slides API 允许您创建和编辑各种页面元素,包括文本框、图像、表格、基本形状、线条和嵌入的视频。此页面上的示例显示了可以使用 API 实现的一些常见页面元素操作。

按照此处指定的步骤,将对您指定的形状或元素进行更改。检查示例。

于 2018-01-25T12:42:39.243 回答
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
  }
}

因此,您会注意到我通过调用函数“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); 

}
于 2018-02-17T03:08:17.543 回答