Microsoft . 技术之路...

—— 专注于微软技术, 分享是快乐的源泉......
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在 Microsoft Excel 中创建饼图

俗话说得好:“面包绝非人类生活的全部。”

注意。也许这样说更恰当:“饮食男女的生活不仅限于面包。”但这读起来不那么顺口,是不是?请注意,我们不是在编写俗语,只是在重复这些话而已,因为我们想不出比这更有意思的话。

当然,这句俗话的含义是,生活需要不断进行调剂,不能总是老调重弹。面包是要有的,但别忘了,我们还需要生活的其它元素。比如说,馅饼。

编写脚本也是如此,也要有多种不同的方式。在有关使用 Microsoft Excel 绘制图表和图形的文集中,开始的几篇文章主要介绍柱形图的创建。但正如他们所说的,柱形图只是现实生活中的一个尘粒。还有许多其它的必要元素。比如说,馅饼。

或者至少还有饼图这种东西。

今天我们将要向您介绍饼图制作的艺术,从创建标准三维饼图的简单脚本开始:

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible 
= True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)
objWorksheet.Cells(
1,1= "Operating System"
objWorksheet.Cells(
2,1= "Windows Server 2003"
objWorksheet.Cells(
3,1= "Windows XP"
objWorksheet.Cells(
4,1= "Windows 2000"
objWorksheet.Cells(
5,1= "Windows NT 4.0"
objWorksheet.Cells(
6,1= "Other"
objWorksheet.Cells(
1,2= "Number of Computers"
objWorksheet.Cells(
2,2= 145
objWorksheet.Cells(
3,2= 487
objWorksheet.Cells(
4,2= 211
objWorksheet.Cells(
5,2= 41
objWorksheet.Cells(
6,2= 56
Set objRange = objWorksheet.UsedRange
objRange.Select
Set colCharts = objExcel.Charts
colCharts.Add()
Set objChart = colCharts(1)
objChart.Activate
objChart.ChartType 
= -4102

今天我们将不详细讨论这段代码;如果您不知道什么是 UsedRange 或者不知道为什么我们要调用 Activate 方法,可以参阅本系列中前面的专栏。目前,我们只关心两件事情;要制成图表的数据以及将数据转换成三维饼图的单行代码。

用于表示组织中计算机使用分布情况的数据如下所示:

操作系统

计算机数目

Windows Server 2003

145

Windows XP

487

Windows 2000

211

Windows NT 4.0

41

其它

56

顺便说一下,这类数据是饼图的制作基础。只要您想演示相对百分比,就应该使用饼图。在此例中,有 487 台计算机运行 Windows XP,但其意义不在于这个具体数字;而是组织中超过半数的计算机使用 Windows XP。通过使用饼图,这种信息可以一目了然。

至于将数据转换成饼图,其脚本的起始阶段与我们先前创建柱形图一样。我们创建一个 Excel 的实例,然后新建一个工作簿和工作表。将数据键入工作表中,选择这些数据,然后添加一个新图表。接下来,我们选择此图表并运行这行代码:

objChart.ChartType = -4102

正是这行代码为我们提供了三维饼图。Microsoft Excel 可以创建很多种图表和图形,并且每一种类型都被指定了一个唯一的 ChartType 编号(您可以在 MSDN 上的 Microsoft Excel VBA 语言参考中的 xlChartType enumeration 中查找这些编号)。例如,您想创建一个分解的圆环图吗?您可以这样设置图表类型:

objChart.ChartType = 80

当然,我们不想要分解的圆环图,我们要三维饼图。(如果有一个脚本专家还在冥思苦想圆形图的分解问题,那他可要郁闷了。)因此,我们将 ChartType 属性的值设置为 -4102,运行脚本,将得到类似下图的图表:

Microsoft Excel


真酷。如果您想创建分裂的饼图,则将 ChartType 属性的值设置为 70。这样将生成类似下图的图表:

Microsoft Excel


感觉不错吧。但别忘了大块可得归我们享用。

总而言之,这是相当出色的图表。不过有些饼的切块有点难于看清;如果我们将图表稍微倾斜一点会更好。而且我们对百分比感兴趣,因此如果图表告诉我们所有计算机运行不同操作系统的百分比会更好。而且图表背后的灰色背景实在不招人喜欢。还有……

好了,我们清楚您的意思了。虽然今天我们不能满足您的所有愿望,但我们将试试能否将老的饼图装扮一新。

首先,看看我们能否将图表稍微倾斜。在图表世界里,我们称之为更改图表高度。默认情况下,新图表的高度为 0 度。如要进行更改,我们只需更改 Elevation 属性的值。例如,将下列这行代码添加至脚本的最后,我们会得到一个高度为 30 度的图表:

objChart.Elevation = 30

如果我们现在运行脚本,将得到如下所示的图表:

Microsoft Excel


嗨,看起来已经更好些了。除了能将图表上下倾斜外,我们还可以将其左右旋转。如果我们不喜欢 Windows XP 切块的位置(位于底部的大块),只需更改 Rotation 属性的值:

objChart.Rotation = 80


当然,那些百分比仍旧没有显示。但这一问题已在处理之列。要显示每个切块的百分比,我们需要定义一个名为 xlDataLabelsShowPercent 的常量(常量赋值为 3),然后将这行代码添加至脚本的结尾:

objChart.ApplyDataLabels xlDataLabelsShowPercent

现在我们得到了如下图所示的图表:

Microsoft Excel


正如您所看到的,我们只是调用 ApplyDataLabels 方法,并将常量 xlDataLabelsShowPercent 传递给它,表示我们希望显示在整体中所占百分比的标签。(您可能想到了,还有其它方法可以应用数据标签;有关详细信息,请参阅 Microsoft Excel VBA 语言参考。)

您说字体太小了?那就将其调大些吧;我们可以很轻松地更改数据标签的大小、颜色、字体样式以及其它属性。您所要做的就是绑定至第一个 SeriesCollection(在这个饼图中只有一个),然后修改 DataLabels.Font 属性。例如,这一行代码将字体大小更改为 14 号:

objChart.SeriesCollection(1).DataLabels.Font.Size = 14

而这一行代码将 ColorIndex 更改为白色:

objChart.SeriesCollection(1).DataLabels.Font.ColorIndex = 2

注意。参阅有关图表和图形的某一个先前的专栏,可获取更多有关在图表和图形中使用颜色的信息。

我们还想向您演示另一项内容,一个灵巧的小技巧,它可适用于任何类型的图表,而不仅限于三维饼图。目前,饼图外面有一个小灰框,称之为绘图区域。我相信这将引发一场讨论,因为至少在这个例子里,这个灰框没有向图表中添加任何东西;而且,我们也不喜欢它。既然如此,为什么不将它去掉呢?

objChart.PlotArea.Fill.Visible = False
objChart.PlotArea.Border.LineStyle 
= -4142

要去掉绘图区域或图表区域,您只需引用相应的对象(PlotAreaChartArea),并执行两项操作:

Fill.Visible 属性设置为 False。

Border.LineStyle 属性设置为 -4142,这一常量表示“完全不要显示边框”。请注意,光设置 Visible 属性将达不到效果:如果您仅设置了 Visible 属性,则图表四周仍会有一个灰色边框。要除去这个灰色边框,您还需设置 LineStyle 属性。

现在我们得到了如下图所示的图表:

Microsoft Excel


或许您已厌倦了单调与重复,那么这些饼图或许能足以为您增添快乐与充实。

现在该凯旋而归了。虽然我们不会告诉您代码,但通过将您今天所学的与您以前学的相结合,您现在应该能够创建如下图所示的图表了:

Microsoft Excel


也罢:我还是把代码告诉您吧。不过这可是最后一次:

Const xlDataLabelsShowPercent = 3
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible 
= True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)
objWorksheet.Cells(
1,1= "Operating System"
objWorksheet.Cells(
2,1= "Windows Server 2003"
objWorksheet.Cells(
3,1= "Windows XP"
objWorksheet.Cells(
4,1= "Windows 2000"
objWorksheet.Cells(
5,1= "Windows NT 4.0"
objWorksheet.Cells(
6,1= "Other"
objWorksheet.Cells(
1,2= "Number of Computers"
objWorksheet.Cells(
2,2= 145
objWorksheet.Cells(
3,2= 487
objWorksheet.Cells(
4,2= 211
objWorksheet.Cells(
5,2= 41
objWorksheet.Cells(
6,2= 56
Set objRange = objWorksheet.UsedRange
objRange.Select
Set colCharts = objExcel.Charts
colCharts.Add()
Set objChart = colCharts(1)
objChart.Activate
objChart.ChartType 
= 70
objChart.Elevation 
= 30
objChart.Rotation 
= 80
objChart.ApplyDataLabels xlDataLabelsShowPercent
objChart.PlotArea.Fill.Visible 
= False
objChart.PlotArea.Border.LineStyle 
= -4142
objChart.SeriesCollection(
1).DataLabels.Font.Size = 14
objChart.SeriesCollection(
1).DataLabels.Font.ColorIndex = 2
objChart.ChartArea.Fill.ForeColor.SchemeColor 
= 49
objChart.ChartArea.Fill.BackColor.SchemeColor 
= 23
objChart.ChartArea.Fill.TwoColorGradient 
1,1
objChart.ChartTitle.Font.Size 
= 24
objChart.ChartTitle.Font.ColorIndex 
= 2
objChart.Legend.Shadow 
= True