一、ColorFormat 对象
代表单色对象的颜色、带有过渡或图案填充的对象的前景或背景色,或者指针的颜色。可以将颜色设为显式的红-绿-蓝值(使用 RGB 属性)或设为配色方案中的一种颜色(使用 SchemeColor 属性)。
使用下表中列出的属性之一返回 ColorFormat 对象。
使用此属性
对此对象 如果要返回一个 ColorFormat 对象,该对象代表
DimColor AnimationSettings 变暗对象使用的颜色
BackColor FillFormat 背景填充色(用于底纹或图案填充)
ForeColor FillFormat 前景填充色(或填充色仅为单色)
Color Font 项目符号或字符颜色
BackColor LineFormat 背景线颜色(使用带图案的线)
ForeColor LineFormat 前景线颜色(或线条颜色仅为实线)
ForeColor ShadowFormat 阴影颜色
PointerColor SlideShowSettings 演示文稿的默认指针颜色
PointerColor SlideShowView 幻灯片放映视图中的临时指针颜色
ExtrusionColor ThreeDFormat 凸出对象的侧面颜色
可以使用 SchemeColor 属性将幻灯片元素的颜色设置为标准配色方案中的颜色。以下示例将当前演示文稿第二张幻灯片第一个形状的文本颜色设为标准配色方案的标题颜色。
ActivePresentation.Slides(2).Shapes(1).TextFrame _
.TextRange.Font.Color.SchemeColor = ppTitle
使用 RGB 属性将颜色设置为显示的红-绿-蓝值。以下示例向 myDocument 中添加一个矩形,然后设置矩形填充的前景色、背景色和过渡。
Set myDocument = ActivePresentation.Slides(1)
With myDocument.Shapes.AddShape(msoShapeRectangle, 90, 90, 90, 50).Fill
.ForeColor.RGB = RGB(128, 0, 0)
.BackColor.RGB = RGB(170, 170, 170)
.TwoColorGradient msoGradientHorizontal, 1
End With
C#代码
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Office = Microsoft.Office.Core;
public class ShapeColorChanger
{
public void ChangeShapeColor()
{
PowerPoint.Presentation presentation = Globals.ThisAddIn.Application.ActivePresentation;
// 将第二张幻灯片上第一个形状的文本框字体颜色设置为 ppTitle
PowerPoint.Shape shape = presentation.Slides[2].Shapes[1];
PowerPoint.TextFrame textFrame = shape.TextFrame;
PowerPoint.TextRange textRange = textFrame.TextRange;
textRange.Font.Color.SchemeColor = Office.MsoColorSchemeIndex.msoThemeColorText1;
// 在第一张幻灯片上添加一个矩形形状,并设置填充颜色和渐变效果
PowerPoint.Slide slide = presentation.Slides[1];
PowerPoint.Shape rectangle = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, 90, 90, 90, 50);
PowerPoint.FillFormat fill = rectangle.Fill;
fill.ForeColor.RGB = RGB(128, 0, 0);
fill.BackColor.RGB = RGB(170, 170, 170);
fill.TwoColorGradient(Office.MsoGradientStyle.msoGradientHorizontal, 1);
}
private int RGB(int Red, int Green, int Blue)
{
return Red + (Green << 8) + (Blue << 16);
}
}
注释:
- 引入 Microsoft.Office.Interop.PowerPoint 和 Microsoft.Office.Core 命名空间。
- 创建一个名为 ShapeColorChanger 的类,用于修改幻灯片形状的颜色。
- 在 ChangeShapeColor 方法中,获取当前活动演示文稿。
- 使用 Slides 和 Shapes 属性获取第二张幻灯片上的第一个形状。
- 获取该形状的文本框、文本范围和字体,并将字体颜色设置为 ppTitle。
- 使用 Slides 属性获取第一张幻灯片。
- 使用 Shapes.AddShape 方法在该幻灯片上添加一个矩形形状。
- 获取形状的填充颜色,并设置前景色和背景色。
- 使用 TwoColorGradient 方法设置渐变效果,水平方向,颜色变化逐渐从前景色到背景色。
二、ColorScheme对象
代表一种配色方案。该配色方案是八种颜色的组合,分别用于幻灯片、备注页或讲义中不同的元素,例如标题或背景(请注意,演示文稿中幻灯片、备注页或讲义的配色方案可以单独设置)。每种颜色由一个 RGBColor 对象代表。ColorScheme 对象是 ColorSchemes 集合的成员。ColorSchemes 集合包含演示文稿中所有的配色方案。
使用 ColorScheme 对象
本节描述如何进行下列操作:
从演示文稿的所有配色方案的集合中返回 ColorScheme 对象。 返回附加到指定幻灯片或母版的 ColorScheme 对象。 从 ColorScheme 对象返回单个幻灯片元素的颜色。
从演示文稿的所有配色方案的集合中返回 ColorScheme 对象使用 ColorSchemes(index) 返回单个 ColorScheme 对象,其中 index 是幻灯片配色方案索引号。以下示例删除当前演示文稿第二个配色方案。
ActivePresentation.ColorSchemes(2).Delete
返回附加到指定幻灯片或母版的 ColorScheme 对象
设置 Slide、SlideRange 或 Master 对象的 ColorScheme 属性可分别返回一张幻灯片、一组幻灯片、或一个幻灯片母版的配色方案。以下示例创建一个基于当前幻灯片的配色方案,将新配色方案添加到演示文稿的标准配色方案集合中,并将幻灯片母版的配色方案设为新的配色方案。所有基于该母版的幻灯片将具有该配色方案。
Set newScheme = ActiveWindow.View.Slide.ColorScheme
newScheme.Colors(ppTitle).RGB = RGB(0, 150, 250)
Set newStandardScheme = _
ActivePresentation.ColorSchemes.Add(newScheme)
ActivePresentation.SlideMaster.ColorScheme = newStandardScheme
从 ColorScheme 对象返回单个幻灯片元素的颜色
使用 Colors 方法返回 RGBColor 对象,该对象代表一个幻灯片元素类型的颜色。可以将一个 RGBColor 对象设置为另一个 RGBColor 对象,或使用 RGB 属性设置或返回 RGBColor 对象的显式的红-绿-蓝(RGB)值。以下示例将第一个配色方案的背景色设为红色,并将标题颜色设为第二个配色方案中定义的标题颜色。
With ActivePresentation.ColorSchemes
.Item(1).Colors(ppBackground).RGB = RGB(255, 0, 0)
.Item(1).Colors(ppTitle) = .Item(2).Colors(ppTitle)
End With
C#代码
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
public class ColorSchemeChanger
{
public void ChangeColorScheme()
{
PowerPoint.Presentation presentation = Globals.ThisAddIn.Application.ActivePresentation;
// 删除第二个颜色方案
presentation.ColorSchemes[2].Delete();
// 获取当前窗口视图的幻灯片颜色方案
PowerPoint.ColorScheme newScheme = Globals.ThisAddIn.Application.ActiveWindow.View.Slide.ColorScheme;
// 设置标题颜色为 RGB(0, 150, 250)
newScheme.Colors[(PowerPoint.PpColorSchemeIndex.ppTitle)].RGB = RGB(0, 150, 250);
// 将新的颜色方案添加为标准方案
PowerPoint.ColorScheme newStandardScheme = presentation.ColorSchemes.Add(newScheme);
// 设置幻灯片母版的颜色方案为新的标准方案
presentation.SlideMaster.ColorScheme = newStandardScheme;
// 修改第一个颜色方案的背景颜色和标题颜色
PowerPoint.ColorScheme colorSchemes = presentation.ColorSchemes;
colorSchemes.Item(1).Colors[(PowerPoint.PpColorSchemeIndex.ppBackground)].RGB = RGB(255, 0, 0);
colorSchemes.Item(1).Colors[(PowerPoint.PpColorSchemeIndex.ppTitle)] = colorSchemes.Item(2).Colors[(PowerPoint.PpColorSchemeIndex.ppTitle)];
}
private int RGB(int Red, int Green, int Blue)
{
return Red + (Green << 8) + (Blue << 16);
}
}
注释:
- 引入 Microsoft.Office.Interop.PowerPoint 命名空间,用于访问 PowerPoint 相关的类和接口。
- 创建一个名为 ColorSchemeChanger 的类,用于修改幻灯片的颜色方案。
- 在 ChangeColorScheme 方法中,获取当前活动演示文稿。
- 使用 ColorSchemes.Delete 方法删除第二个颜色方案。
- 获取当前窗口视图幻灯片的颜色方案,并将标题颜色设置为 RGB(0, 150, 250)。
- 使用 ColorSchemes.Add 方法将新的颜色方案添加为标准方案。
- 将幻灯片母版的颜色方案设置为新的标准方案。
- 使用 ColorSchemes.Item 方法获取第一个颜色方案,并分别设置背景颜色和标题颜色。
三、ColorEffect 对象
ColorEffect 对象:代表动画动作的一种颜色效果。
如何使用ColorEffect对象
使用 AnimationBehavior 对象的 ColorEffect 属性返回 ColorEffect 对象。颜色效果可以使用 ColorEffect 对象的 From 和 To 属性更改,如下所示。颜色效果最初使用 To 属性设置,然后可以使用 By 属性按指定的编号进行更改。以下示例向当前演示文稿的第一张幻灯片中添加一个形状,并且将颜色效果动画动作设置为更改新形状的填充颜色。
Sub YouChangeColorEffect()
Dim sldFirst As Slide
Dim shpHeart As Shape
Dim effNew As Effect
Dim bhvEffect As AnimationBehavior
Set sldFirst = ActivePresentation.Slides(1)
Set shpHeart = sldFirst.Shapes.AddShape(Type:=msoShapeHeart, Left:=100, Top:=100, Width:=100, Height:=100)
Set effNew = sldFirst.TimeLine.MainSequence.AddEffect(Shape:=shpHeart,EffectID:=msoAnimEffectChangeFillColor, Trigger:=msoAnimTriggerAfterPrevious)
Set bhvEffect = effNew.Behaviors.Add(Type:=msoAnimTypeColor)
With bhvEffect.ColorEffect
.From.RGB = RGB(Red:=255, Green:=0, Blue:=0)
.To.RGB = RGB(Red:=0, Green:=0, Blue:=255)
End With
End Sub
C#代码
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
public class ColorEffectChanger
{
public void ChangeColorEffect()
{
PowerPoint.Slide slideFirst = Globals.ThisAddIn.Application.ActivePresentation.Slides[1];
PowerPoint.Shape shapeHeart = slideFirst.Shapes.AddShape(
Type: Microsoft.Office.Core.MsoAutoShapeType.msoShapeHeart,
Left: 100, Top: 100, Width: 100, Height: 100
);
PowerPoint.Effect effectNew = slideFirst.TimeLine.MainSequence.AddEffect(
Shape: shapeHeart,
EffectId: PowerPoint.PpEffectID.ppEffectChangeFillColor,
Trigger: PowerPoint.MsoAnimTriggerType.msoAnimTriggerAfterPrevious
);
PowerPoint.AnimationBehavior behaviorEffect = effectNew.Behaviors.Add(
Type: PowerPoint.MsoAnimType.msoAnimTypeColor
);
PowerPoint.ColorFormat colorEffect = behaviorEffect.ColorEffect;
colorEffect.From.RGB = RGB(Red: 255, Green: 0, Blue: 0);
colorEffect.To.RGB = RGB(Red: 0, Green: 0, Blue: 255);
}
private int RGB(int Red, int Green, int Blue)
{
return Red + (Green << 8) + (Blue << 16);
}
}
注释:
- 引入 Microsoft.Office.Interop.PowerPoint 命名空间,用于访问 PowerPoint 相关的类和接口。
- 创建一个名为 ColorEffectChanger 的类,用于修改颜色效果。
- 在 ChangeColorEffect 方法中,获取当前活动演示文稿的第一张幻灯片。
- 使用 Shapes.AddShape 方法添加一个心形形状,并设置位置和大小参数。
- 使用 TimeLine.MainSequence.AddEffect 方法在幻灯片的主时间轴中添加一个变色效果,并设置触发方式为紧接上一个动画。
- 使用 Behaviors.Add 方法添加一个颜色动画行为。
- 获取颜色动画行为的 ColorEffect 属性,并分别设置起始颜色和结束颜色的 RGB 值。
- 添加了一个辅助方法 RGB,用于将 RGB 分量组合成整数值。
PowerPoint) (PpColorSchemeIndex 列舉)
指定與指定物件相關之已套用色彩配置中的色彩。
MSDN地址:https://learn.microsoft.com/zh-hk/office/vba/api/powerpoint.ppcolorschemeindex
名稱 | 值 | 描述 |
---|---|---|
ppAccent1 | 6 | 輔色1 |
ppAccent2 | 7 | Accent2 |
ppAccent3 | 8 | 輔色3 |
ppBackground | 1 | 背景 |
ppFill | 5 | 填滿 |
ppForeground | 2 | 前景 |
ppNotSchemeColor | 0 | 非色彩配置 |
ppSchemeColorMixed | -2 | 混合色彩配置 |
ppShadow | 3 | 陰影 |
ppTitle | 4 | 標題 |
Office ThemeColorScheme 成員
MSDN地址:https://learn.microsoft.com/zh-tw/office/vba/api/overview/library-reference/themecolorscheme-members-office
名稱 | 描述 |
---|---|
Colors | 會取得一個物件,代表 Microsoft Office 佈景主題之色彩配置中的色彩。 |
GetCustomColor | 會取得一個值,代表 Microsoft Office 佈景主題之色彩配置中的色彩。 |
負載 | 會從檔案載入 Microsoft Office 佈景主題的色彩配置。 |
Save | 會將 Microsoft Office 佈景主題的色彩配置儲存至檔案。 |
GetCustomColor 會取得一個值,代表 Microsoft Office 佈景主題之色彩配置中的色彩。
Dim tTheme As OfficeTheme
Dim tcsThemeColorScheme As ThemeColorScheme
Dim csCustomColor As MsoThemeColorSchemeIndex
Set tcsThemeColorScheme = tTheme.ThemeColorScheme
csCustomColor = tcsThemeColorScheme.GetCustomColor("CheerfulColor")
Office 365 主题和颜色的 VBA 代码
我在 MSDN 上和网上偶尔发现了 msoThemeColor 和 msoThemeColorIndex 参考资料
VBA(Visual Basic for Applications)语言编写的,用于操作 PowerPoint 的主题和颜色方案。
首先,代码声明了一些变量:
vbCopy CodeDim x As OfficeTheme
Dim mycolor As ThemeColor
Dim mythemecolorscheme As ThemeColorScheme
Dim mycolorindex As MsoThemeColorIndex
Dim mythemecolorschemeindex As MsoThemeColorSchemeIndex
接下来,代码执行了以下操作:
setname = mythemecolorscheme.Colors(msoThemeAccent2):这行代码将变量 setname 设置为 mythemecolorscheme 对象的 Colors 集合中的 msoThemeAccent2 主题颜色。
foobar = mythemecolorscheme.Count:这行代码将变量 foobar 设置为 mythemecolorscheme 对象的颜色计数。
x = OfficeTheme.ThemeColorSchemeIndex(1):这行代码将变量 x 设置为 OfficeTheme 对象的第一个主题颜色方案。
x.ThemeColorScheme.Colors.RGB = RGB(255, 0, 0):这行代码将 x 对象的主题颜色方案的颜色设置为红色(RGB 值为 255, 0, 0)。
x.ThemeColorScheme.Count:这行代码获取 x 对象的主题颜色方案的颜色计数。
x.ThemeColorScheme.Save (myfilename):这行代码将 x 对象的主题颜色方案保存到指定的文件名 myfilename 中。
x.ThemeColorScheme.Load (myfilename):这行代码从指定的文件名 myfilename 中加载主题颜色方案到 x 对象中。
C#代码
using Microsoft.Office.Core;
using Microsoft.Office.Interop.PowerPoint;
public class PPTPlugin
{
public void ModifyThemeColors(string filename)
{
Application pptApp = new Application();
Presentation pptPresentation = pptApp.Presentations.Open(filename, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoTrue);
try
{
ThemeColorScheme themeColorScheme = pptPresentation.SlideMaster.Theme.ThemeColorScheme;
// 获取指定颜色并设置变量
ColorFormat setColor = themeColorScheme.Colors[(MsoThemeColorIndex)msoThemeAccent2];
string setName = setColor.RGB.ToString();
// 获取颜色计数
int colorCount = themeColorScheme.Count;
// 修改主题颜色方案
OfficeTheme officeTheme = pptPresentation.SlideMaster.Theme;
officeTheme.ThemeColorSchemeIndex = 1; // 选择第一个主题颜色方案
// 设置特定颜色为红色
ColorFormat newColor = officeTheme.ThemeColorScheme.Colors[(MsoThemeColorSchemeIndex)MsoThemeColorSchemeIndex.msoThemeColorAccent2];
newColor.RGB = RGB(255, 0, 0);
// 获取颜色计数
int newColorCount = officeTheme.ThemeColorScheme.Count;
// 保存修改后的主题颜色方案
officeTheme.ThemeColorScheme.Save("modified_theme_color.xml");
// 加载保存的主题颜色方案
officeTheme.ThemeColorScheme.Load("modified_theme_color.xml");
}
finally
{
// 关闭 PowerPoint 应用程序并释放资源
pptPresentation.Close();
pptApp.Quit();
ReleaseCOMObject(pptPresentation);
ReleaseCOMObject(pptApp);
}
}
private void ReleaseCOMObject(object obj)
{
if (obj != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
}
}
注释:
- 引入命名空间 Microsoft.Office.Core 和 Microsoft.Office.Interop.PowerPoint,用于访问 PowerPoint 相关的类和接口。
- 创建一个名为 PPTPlugin 的类,用于插件开发。
- 在 ModifyThemeColors 方法中,打开 PowerPoint 文件并获取一个 Presentation 对象来操作幻灯片。
- 使用 ThemeColorScheme 属性获取主题颜色方案,并设置变量和获取颜色计数。
- 使用 SlideMaster.Theme 属性获取幻灯片母版的主题对象,并设置选择的主题颜色方案。
- 使用 ThemeColorScheme.Colors 属性获取指定的颜色对象,并将其 RGB 值设置为红色。
- 获取修改后的主题颜色方案的颜色计数,并将其保存到 XML 文件中。
- 加载保存的主题颜色方案。
- 最后,在 finally 块中关闭 PowerPoint 应用程序,释放相关的 COM 对象资源。
- 添加了一个辅助方法 ReleaseCOMObject 用于释放 COM 对象资源。