如何通过App Script锁定Google幻灯片中形状的主题颜色
锁定Google幻灯片形状颜色,避免主题切换时变色
你希望锁定Google幻灯片中形状的颜色,确保用户切换主题时颜色不会改变。目前你已实现RGB颜色的锁定,但对于主题色(Theme)类型的颜色,现有代码无法达到锁定效果——直接设置主题色类型的填充仍会随主题变化。
现有代码片段
if (pageElements[j].getPageElementType() == "SHAPE") { var fill = pageElements[j].asShape().getFill().getSolidFill().getColor(); var colorType = fill.getColorType(); Logger.log(colorType) if (colorType == "RGB") { shapeColor = fill.asRgbColor().asHexString(); Logger.log(shapeColor) pageElements[j].asShape().getFill().setSolidFill(shapeColor) } else if (colorType == "THEME") { shapeColor = fill.asThemeColor().getThemeColorType(); Logger.log(shapeColor) pageElements[j].asShape().getFill().setSolidFill(shapeColor) } }
解决方案:将主题色转换为固定RGB值
主题色本身与幻灯片主题绑定,无法直接“锁定”它来避免随主题变化。唯一可行的办法是提取当前主题色对应的实际RGB值,将形状填充设置为该固定RGB值,这样即使切换主题,颜色也不会改变。
修改后的代码如下:
if (pageElements[j].getPageElementType() == "SHAPE") { var shape = pageElements[j].asShape(); var fill = shape.getFill().getSolidFill().getColor(); var colorType = fill.getColorType(); Logger.log(colorType); if (colorType == "RGB") { var shapeColor = fill.asRgbColor().asHexString(); Logger.log(shapeColor); shape.getFill().setSolidFill(shapeColor); } else if (colorType == "THEME") { // 获取主题色类型 var themeColorType = fill.asThemeColor().getThemeColorType(); Logger.log(themeColorType); // 获取当前幻灯片主题,提取该主题色对应的RGB颜色 var theme = SlidesApp.getActivePresentation().getTheme(); var rgbColor = theme.getThemeColor(themeColorType).getRgbColor(); // 转换为十六进制字符串并设置为填充色 var hexColor = rgbColor.asHexString(); shape.getFill().setSolidFill(hexColor); } }
代码说明
- 当颜色类型为
THEME时,先通过幻灯片主题对象getTheme()获取当前主题下该主题色对应的RGB值 - 将RGB值转为十六进制字符串,再设置为形状的纯色填充——此时填充色变为固定的RGB值,不再受主题切换影响
参考文档:谷歌幻灯片开发者文档
内容的提问来源于stack exchange,提问作者Amira Muzaffar
相关产品推荐
相关产品推荐

