【问题标题】:Replacing shapes by colour in Google Slides & Google Apps Script在 Google 幻灯片和 Google Apps 脚本中用颜色替换形状
【发布时间】:2021-09-17 12:53:08
【问题描述】:

我正在尝试使用 Google Apps 脚本替换 Google 幻灯片演示文稿中的形状颜色。

function changeColors() {
  const objectId = "#an-id#";  // Please set the object ID.

  const slides = SlidesApp.openById(objectId).getSlides();
  slides.forEach(loopSlides);
  
}

function loopSlides(slide){

  var shapes = slide.getShapes();
  if (shapes.length > 0) {
    shapes.forEach(myFunction);
  }
}

function myFunction(shape) {
  try{
    var st = shape.getShapeType();
  if (st != SlidesApp.ShapeType["RECTANGLE"] && 
      st != SlidesApp.ShapeType["ROUND_RECTANGLE"] &&
      st != SlidesApp.ShapeType["UNSUPPORTED"]){
          Logger.log("Not a box!!");
          Logger.log(st);
          Logger.log(shape.getText());
        return;
      }
  }
  catch(err) {
    Logger.log("Not a Shape!!");
   return; // not a shape!
}
  var hexColor = shape.getFill().getSolidFill();
  Logger.log(hexColor);
  switch (hexColor){
    case "#f16727ff": // Computer Science
      shape.getFill().setSolidFill("#413c73ff");
    case "#0b9faeff": // Information technology
      shape.getFill().setSolidFill("#d90368ff");
    case "#d71b55ff": // Digital Literacy
      shape.getFill().setSolidFill("#aa968aff");    
      }

}

上面的代码永远不会运行替换代码(基本上永远不会到达Logger.log(hexColor);指令

【问题讨论】:

    标签: google-apps-script google-slides-api


    【解决方案1】:

    当我运行您的代码时,它会到达Logger.log(hexColor);。 您的代码中的问题是您的 hexColor 变量实际上是一个 SolidFill 对象,因为您使用了 getSolidFill()

    如果要获取当前形状的RGB十六进制字符串,首先需要使用getColorType()检查ColorType是否为RGB。然后使用asRgbColor() 获取RgbColor 对象。最后,使用asHexString() 获取rgb 颜色十六进制字符串。

    示例代码:

    function myFunction(shape) {
      try{
        var st = shape.getShapeType();
        if (st != SlidesApp.ShapeType["RECTANGLE"] && 
            st != SlidesApp.ShapeType["ROUND_RECTANGLE"] &&
            st != SlidesApp.ShapeType["UNSUPPORTED"]){
            Logger.log("Not a box!!");
            Logger.log(st);
            Logger.log(shape.getText());
            return;
        }
      }
      catch(err) {
        Logger.log("Not a Shape!!");
        return; // not a shape!
      }
      var colorType = shape.getFill().getSolidFill().getColor().getColorType();
      if(colorType != SlidesApp.ColorType.RGB ){
        Logger.log("TYPE: "+colorType);
        Logger.log("ColorType not RGB");
        return;
      }
      var hexColor = shape.getFill().getSolidFill().getColor().asRgbColor().asHexString().toLowerCase();
      Logger.log(hexColor);
      switch (hexColor){
        case "#f16727": // Computer Science
          shape.getFill().setSolidFill("#413c73");
          break;
        case "#0b9fae": // Information technology
          shape.getFill().setSolidFill("#d90368");
          break;
        case "#d71b55": // Digital Literacy
          shape.getFill().setSolidFill("#aa968a");  
          break; 
      }
      
    }
    

    样本输出:

    注意:

    • 我使用String.toLowerCase() 将您的switch 语句的rgb 十六进制字符串更改为小写
    • 您的 rgb 十六进制字符串不正确。 (我删除了尾随的ff)。 RGB 十六进制字符串只能包含 6 个字符。
    • 您的 switch case 缺少每个 case 的 break。如果您不包含break,形状颜色将始终设置为最后一个实心填充设置,即#aa968a

    【讨论】:

    • 谢谢罗恩!完美运行
    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多