【问题标题】:Change background of google slides shape to red将谷歌幻灯片形状的背景更改为红色
【发布时间】:2018-01-25 04:45:24
【问题描述】:

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

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

有可能吗?

【问题讨论】:

    标签: google-slides-api google-slides


    【解决方案1】:

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

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

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

    【讨论】:

    • 真的很有帮助。我不知道如何使用setSolidStyle。您的回答为我节省了很多时间
    • @MoizMansur 很高兴它为你解决了。有时需要很长时间才能找到看似简单的答案。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我正在阅读您的“这里”链接。它说“请求协议如下所示。添加文本和形状指南显示了一个等等等等......”所以,我单击“添加文本和形状”,然后查看另一个教程。我尝试使用它,所以我将该代码复制到我的脚本中。立即,该代码存在问题,例如“pageId 是什么”。我将 pageId 替换为我的 presentationId 编号。 (也许那是错误的)。但它不起作用 - 脚本抱怨 Invalid requests[0].createShape: The page (my presentationId) 找不到。有什么帮助吗?
    • 查看此文档以获取projectID
    • 我一定是误会了什么。你提到“projectID”,但链接没有提到这样的事情。另一方面,我想出了“pageId”,现在我有了正确的变量,我感到困惑。因此,至少我能够将示例文本框插入到我的幻灯片中。现在,我正试图弄清楚其他事情。
    • 很高兴知道它在某种程度上有所帮助,如果你已经完成了,请在你的帖子中分享你的修复。让其他人也能看到。
    • 我刚刚发布了我的答案。
    【解决方案3】:

    嗯,这是我的解决方案。如果有人看到改进它的方法,我会全力以赴,但到目前为止,它似乎对我来说没有故障。

    首先,我使用以下逻辑找到我的形状:

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

    【讨论】:

    • 但是我在使用最初响应者指出的这种所谓的“独立”脚本方法时遇到了问题。我还希望能够在我的幻灯片中设置选择,并且使用我的“独立”“非绑定”脚本是不可能的。相反,我需要切换到使用不同类和方法的所谓“绑定脚本”。具体来说,SlidesApp。与幻灯片。类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2017-11-17
    • 2013-01-08
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    相关资源
    最近更新 更多