修改基本图元的属性

1.1节介绍了获取图表中基本图形元素的方法,本节介绍获取到以后怎么修改它们的属性。图表中的基本图形元素包括点、线、面和文本等,再复杂的图表也是由这些基本图形元素组合而成。[大谦Excel,dqexcel点com]

修改点的属性

Excel图表中,数据点常用点标记表示。点标记可以有不同的标记类型,可以修改点标记内部面的颜色和边线的颜色,可以修改点标记的大小等。

1.1.2小节介绍了获取序列中数据点的方法,获取到的数据点用Point对象表示。利用该对象的属性可以对表示数据点的点标记进行设置。Point对象的常用属性如表1-1中所示。

表1-1 Point对象的常用属性

名 称 意 义
DataLabel 返回一个DataLabel对象,表示数据标签
HasDataLabel 是否显示数据标签
MarkerBackgroundColor 标记背景色,RGB着色
MarkerBackgroundColorIndex 标记背景色,索引着色
MarkerForegroundColor 标记前景色,RGB着色
MarkerForegroundColorIndex 标记前景色,索引着色
MarkerSize 标记的大小
MarkerStyle 标记的样式
Name 点的名称
PictureType 设置在柱状图或条形图上显示图片时图片的显示方式。可以拉伸或堆栈显示

Point对象的MarkerStyle属性设置点标记的样式。该属性的值为XlMarkerStyle枚举类型的值,如表1-2中所示。

表1-2 点标记的样式

名 称 说 明
xlMarkerStyleAutomatic -4105 自动设置标记
xlMarkerStyleCircle 8 圆形标记
xlMarkerStyleDash -4115 长条形标记
xlMarkerStyleDiamond 2 菱形标记
xlMarkerStyleDot -4118 短条形标记
xlMarkerStyleNone -4142 无标记
xlMarkerStylePicture -4147 图片标记
xlMarkerStylePlus 9 带加号的方形标记
xlMarkerStyleSquare 1 方形标记
xlMarkerStyleStar 5 带星号的方形标记
xlMarkerStyleTriangle 3 三角形标记
xlMarkerStyleX -4168 带X记号的方形标记

本例创建带点标记的复合线形图,然后修改两个序列中指定点的点标记的属性。完整代码见:Samples->ch04 美化Excel图表->03 修改点的属性->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  ActiveSheet.Range("A2:C8").Select
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xlLineMarkers, 200, 20, 350, 250, True).Chart
‘序列1中点标记背景色
  cht.SeriesCollection(1).MarkerBackgroundColor = RGB(255, 255, 255)
‘序列1点标记大小
  cht.SeriesCollection(1).MarkerSize = 14
‘序列2中点标记类型为棱形
  cht.SeriesCollection(2).MarkerStyle = xlMarkerStyleDiamond
‘序列2中点标记背景色
  cht.SeriesCollection(2).MarkerBackgroundColor = RGB(0, 255, 0)
‘序列2中点标记的大小
  cht.SeriesCollection(2).MarkerSize = 14
  SetStyle cht, 0, 0.28
End Sub

运行代码生成图1-4。

Document Image
\[\]

图1-4 修改点标记的属性

修改线的属性

图表中的线形图形元素包括线形图中的折线、柱状图和条形图中的柱面边线等,获取到线形图形元素后,可以修改它们的颜色、线型和线宽等属性。

在Excel图形对象中,线形对象用LineFormat对象表示。Shape对象的Line属性返回LineFormat对象,例如直线段本身、矩形区域和圆形区域的边、标注的引线等都是LineFormat对象。

得到LineFormat对象以后,就可以用该对象的属性和方法进行编程。下面两小节内容详细介绍LineFormat对象,即线形对象的颜色、线型、线宽、箭头、透明度和图案填充等属性的设置。

用LineFormat对象的ForeColor属性设置线条的颜色。可以用RGB着色、主题颜色着色、配色方案着色等几种方法进行着色,1.3节会详细介绍。用LineFormat对象的DashStyle属性设置线条的线型,可用线型如表1-3中所示。

表1-3 可用线型

名 称 说 明
msoLineDash 4 虚线
msoLineDashDot 5 点虚线
msoLineDashDotDot 6 点点虚线
msoLineDashStyleMixed -2 不支持
msoLineLongDash 7 长虚线
msoLineLongDashDot 8 长点虚线
msoLineRoundDot 3 圆点线
msoLineSolid 1 实线
msoLineSquareDot 2 方点线

用LineFormat对象的Weight属性设置线条的线宽。给该属性设置一个浮点数表示线条的粗细。

下面创建一个复合线形图并修改各序列中折线的属性。完整代码见:Samples->ch04 美化Excel图表->04 修改线形图元的属性->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  ActiveSheet.Range("A2:C8").Select
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xlLine, 200, 20, 350, 250, True).Chart
‘序列1线的颜色
  cht.SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(0, 0, 255)
‘序列1线的线型
  cht.SeriesCollection(1).Format.Line.DashStyle = msoLineDash
‘序列1线的线宽
  cht.SeriesCollection(1).Format.Line.Weight = 2
‘序列2线的颜色
  cht.SeriesCollection(2).Format.Line.ForeColor.RGB = RGB(255, 128, 0)
‘序列2线的线型
  cht.SeriesCollection(2).Format.Line.DashStyle = msoLineDashDotDot
‘序列2线的线宽
  cht.SeriesCollection(2).Format.Line.Weight = 3
  SetStyle cht, 0, 0.28
End Sub

运行代码生成图1-6。

Document Image
\[\]

图1-6 设置线形对象的颜色、线型和线宽

修改面的属性

柱状图、条形图、面积图和饼图等用面来表现数据,获取到相应的图形对象后,可以修改它们的属性。面的属性主要有颜色、透明度、纹理和光照反射特性等。对面可以进行单色填充、渐变色填充、图案填充和图片填充。

Excel中,用FillFormat对象表示面。利用Shape对象的Fill属性可以获取到该对象中的FillFormat对象,即面对象,然后对该对象的成员进行编程。

使用FillFormat对象的ForeColor属性,返回一个ColorFormat对象,利用该对象的RGB属性、ObjectThemeColor属性和SchemeColor属性可以对FillFormat对象所表示的面进行RGB着色、主题颜色着色和配色方案着色。

用FillFormat对象的Transparency属性设置或获取面的透明性,取值范围为0.0(不透明)到 1.0(清晰)之间。

创建包含面的图表后,可以对其中的面进行填充操作。可用的填充方式包括单色填充、渐变色填充、图案填充、图片填充和纹理填充等。

使用FillFormat对象的Solid方法各种特殊填充恢复为单色填充。使用FillFormat对象的Patterned方法进行图案填充。该方法有一个参数,是一个MsoPatternType枚举类型的值,表示填充图案。

下面创建有两个序列的复合柱状图,将第一个序列设置为半透明,将第二个序列用图案进行填充。完整代码见:Samples->ch04 美化Excel图表->05 修改面的属性1->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  ActiveSheet.Range("A2:C8").Select
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xlColumnClustered, 200, 20, 350, 250, True).Chart
  cht.ChartGroups(1).GapWidth = 100    ‘分组之间的距离
  cht.ChartGroups(1).Overlap = -15    ‘分组内部柱面之间的距离
‘序列1的填充色
  cht.SeriesCollection(1).Format.Fill.ForeColor.RGB = RGB(0, 0, 255)
  cht.SeriesCollection(1).Format.Fill.Transparency = 0.5    ‘序列1面的透明度
  cht.SeriesCollection(2).Format.Fill.Patterned 10    ‘序列2面用图案填充
  SetStyle cht, 0, 0.28
End Sub

运行代码,效果如图1-9所示。

Document Image
\[\]

图1-9 面的透明度设置和图案填充

用FillFormat对象的OneColorGradient方法进行单色渐变色填充。所谓单色渐变色填充,指的是填充的颜色仅有一种颜色色阶的变化。该方法的语法格式为:

code.vba
ff.OneColorGradient(Style, Variant, Degree)

其中,ff表示一个FillFormat对象。各参数的意义如表1-4中所示。

表1-4 OneColorGradient方法的参数

名 称 必需/可选 数据类型 说 明
Style 必需 MsoGradientStyle 渐变样式
Variant 必需 Integer 渐变变量。 取值范围为1到4。 如果GradientStyle设为 msoGradientFromCenter,则Variant参数只能设为 1 或 2
Degree 必需 Single 渐变程度。 可以为 0.0(暗)到 1.0(亮)之间的值

OneColorGradient方法的Style参数指定渐变填充的样式,其取值如表1-5中所示。

表1-5 OneColorGradient方法的Style参数的取值

名 称 说 明
msoGradientDiagonalDown 4 从左下角到右上角对角渐变
msoGradientDiagonalUp 3 从右下角到左上角对角渐变
msoGradientFromCorner 5 从各个角向中心渐变
msoGradientHorizontal 1 水平渐变
msoGradientVertical 2 垂向渐变

用FillFormat对象的TwoColorGradient方法进行双色渐变色填充。双色渐变色填充需要指定两种颜色进行渐变填充,可以用FillFormat对象的ForeColor属性和BackColor属性指定。该方法的语法格式为:

code.vba
ff.TwoColorGradient Style, Variant

其中,ff表示一个FillFormat对象。各参数的意义如表1-4中所示。

下面创建有两个序列的复合柱状图,第一个序列使用单色渐变填充,第二个序列使用双色渐变填充。完整代码见:Samples->ch04 美化Excel图表->06 修改面的属性2->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  ActiveSheet.Range("A2:C8").Select
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xlColumnClustered, 200, 20, 350, 250, True).Chart
  cht.ChartGroups(1).GapWidth = 100    ‘分组之间的距离
  cht.ChartGroups(1).Overlap = -15    ‘分组内部柱面之间的距离
‘序列1的面单色渐变填充
  cht.SeriesCollection(1).Format.Fill.ForeColor.RGB = RGB(0, 0, 255)
  cht.SeriesCollection(1).Format.Fill.OneColorGradient msoGradientHorizontal, 1, 1
‘序列2的面双色渐变填充
  cht.SeriesCollection(2).Format.Fill.ForeColor.RGB = RGB(255, 128, 0)
  cht.SeriesCollection(2).Format.Fill.TwoColorGradient msoGradientHorizontal, 1
  cht.SeriesCollection(2).Format.Fill.BackColor.RGB = RGB(255, 255, 0)
  SetStyle cht, 0, 0.28
End Sub

运行代码,效果如图1-10所示。

Document Image
\[\]

图1-10 单色渐变色填充和双色渐变填充

利用FillFormat对象的GradientStops属性返回一个GradientStops对象,使用该对象的Insert方法可以往已有渐变序列中在指定位置上添加新的颜色节点,从而实现多色渐变填充。该方法指定新颜色节点的位置是用一个0到1之间的小数指定的,表示该位置到起点的距离占整个距离的百分比。

下面创建有两个序列的复合柱状图,第一个序列进行竖向多色渐变填充,从下往上分别用红色、橙色和黄色进行渐变填充。第二个序列进行水平方向多色渐变填充,从左到右分别用橙色、白色和橙色进行渐变色填充。完整代码见:Samples->ch04 美化Excel图表->07 修改面的属性3->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  ActiveSheet.Range("A2:C8").Select
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xlColumnClustered, 200, 20, 350, 250, True).Chart
  cht.ChartGroups(1).GapWidth = 100    ‘分组之间的距离
  cht.ChartGroups(1).Overlap = -15    ‘分组内部柱面之间的距离
‘序列1垂向多色渐变填充
  cht.SeriesCollection(1).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
  cht.SeriesCollection(1).Format.Fill.OneColorGradient msoGradientHorizontal, 1, 1
  cht.SeriesCollection(1).Format.Fill.GradientStops.Insert RGB(255, 128, 0), 0.5
  cht.SeriesCollection(1).Format.Fill.GradientStops.Delete 2
  cht.SeriesCollection(1).Format.Fill.GradientStops.Insert RGB(255, 0, 0), 1
‘序列2水平向多色渐变填充
  cht.SeriesCollection(2).Format.Fill.ForeColor.RGB = RGB(255, 128, 0)
  cht.SeriesCollection(2).Format.Fill.TwoColorGradient msoGradientVertical, 1
  cht.SeriesCollection(2).Format.Fill.GradientStops.Insert RGB(255, 255, 255), 0.5
  cht.SeriesCollection(2).Format.Fill.GradientStops.Delete 2
  cht.SeriesCollection(2).Format.Fill.GradientStops.Insert RGB(255, 128, 0), 1
  SetStyle cht, 0, 0.28
End Sub

运行代码,效果如图1-11所示。

Document Image
\[\]

图1-11 多色渐变填充

除了颜色填充外,还可以用图片和纹理对面对象进行填充。

使用FillFormat对象的UserPicture方法进行图片填充。该方法有一个参数,值为字符串类型,表示图片文件的文件路径和名称。

使用FillFormat对象的UserTextured方法进行纹理填充。该方法有一个参数,值为字符串类型,表示纹理图片文件的文件路径, 如果图片在当前工作目录中, 指定图片文件的名称即可。图片填充时不必设置前景色和背景色。

下面创建有两个序列的复合柱状图,第一个序列进行图片填充。第二个序列进行纹理填充。完整代码见:Samples->ch04 美化Excel图表->08 修改面的属性1->py.py。

code.vba
Sub CreateChart()
  Dim cht As Chart
  ActiveSheet.Range("A2:C8").Select
  Set cht = ActiveSheet.Shapes.AddChart2(-1, _
          xlColumnClustered, 200, 20, 350, 250, True).Chart
  cht.ChartGroups(1).GapWidth = 100    ‘分组之间的距离
  cht.ChartGroups(1).Overlap = -15    ‘分组内部柱面之间的距离
  cht.SeriesCollection(1).Format.Fill.UserPicture "d:\picpy2.jpg"    ‘序列1图片填充
  cht.SeriesCollection(2).Format.Fill.UserTextured "d:\picpy2.jpg"    ‘序列2纹理填充
  SetStyle cht, 0, 0.28
End Sub

效果如图1-12所示。可见,图片填充时对图片按长宽比例进行了缩放,使得图片在柱面内正好能放下;纹理填充时图片大小不变,通过平铺图片填充柱形面,超出柱面范围的图片部分被裁剪掉。

Document Image
\[\]

图1-12 图片填充

除了用指定图片作为纹理外,Excel还提供了预设纹理。所谓预设纹理,实际上是Excel内置的图片。用FillFormat对象的PresetTextured方法设置预设纹理。该方法有一个参数,表示要应用的纹理类型。该参数的部分取值如表1-6中所示,有大理石纹理、花岗岩纹理、木质纹理、纸质纹理等很多种。

表1-6 预设纹理

名 称 说 明
msoTextureGranite 12 花岗岩纹理
msoTextureGreenMarble 9 绿色大理石纹理
msoTextureMediumWood 24 中木纹理
msoTextureNewsprint 13 新闻纸纹理
msoTextureOak 23 橡木纹理
msoTexturePaperBag 6 纸张袋纹理
msoTexturePapyrus 1 Papyrus 纹理
msoTextureParchment 15 羊皮纸纹理
msoTextureWalnut 22 胡桃木纹理
msoTextureWaterDroplets 5 水滴纹理
……

修改文本的属性

文本也是构成图表的基本图形元素之一。文本的属性包括文本的内容、对齐方式、颜色、字体大小、字体名称等。图表中常见的文本包括坐标系中的坐标轴标题和刻度标签、图表标题、标注文本和图例中的文本等。

Excel中用Font对象表示字体。当要设置字体时,往往是通过某个属性获取Font对象,然后利用该对象的属性和方法进行设置。

Font对象的主要属性包括:

• Bold属性:是否加粗,值为True时加粗,为False时不加粗。

• Color属性:RGB颜色着色。

• ColorIndex属性:索引着色。颜色查找表中某种颜色的索引号。

• FontStyle属性:字体样式,例如"Bold Italic"。

• Italic属性:是否倾斜,值为True时倾斜,为False时不倾斜。

• Name属性:字体名称。

• Size属性:字体大小。

• Strikethrough属性:是否添加删除线,值为True时添加,为False时不加。

• Subscript属性:是否设置为下标,值为True时设置,为False时不设置。

• Superscript属性:是否设置为上标,值为True时设置,为False时不设置。

• ThemeColor属性:主题颜色着色。

• ThemeFont属性:主题字体。

• TintAndShade属性:对字体颜色变暗或加亮,值为-1(最暗)到1(最亮)之间。

• Underline属性:下划线的类型,值为-4142时,无下划线;值为2时,单下划线;值为-4119时,粗双下划线;值为5时,为紧靠在一起的细双下划线。

第3章介绍坐标系的图表标题和坐标轴标题时介绍了这部分文本的添加和属性设置,请参阅。第5章还会介绍编程方式添加标注文本并设置属性。