Microsoft . 技术之路...

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

人们在初次尝试某件事情时总是认为它很不错,并且他们会有这样的想法:对,就是它,这件事太棒了,从今往后就干这个了。但是,当最初的激情冲动过去之后,许多人便开始怀疑这件事是否值得托付终身了。(如果您不相信,我们可以向您讲述一个“脚本编写兄弟”的经历,他在过去的 20 来年做过滑翔手、摩托车手、摩托艇冲浪手、船主、高山滑雪手、山地自行车手以及其他数不清的行当,他为此投入了巨资,最后他终于感到厌倦,决定去尝试一下别的事情。)生活原本如此:对于先前本以为是完美无缺的事物,过一会儿就能找出一大堆毛病。

呃,当然,这不包括“脚本编写夫妻”。(不然的话,要是他们当中有人正在阅读本文,那可就麻烦了。)

说这么多与 Microsoft Office 应用程序脚本编写有何相干?是这样,在以前的专栏中我们就使用 Microsoft Excel 创建图表和图形开始了一个新的系列,而且只用了短短一课向您展示了如何创建类似下面的图形:

Microsoft Excel


毫无疑问,您起初一定对此感到相当兴奋。不过,一阵儿过后,您便可能开始觉得有点沮丧。怎么 Internet 突然变成黑白的了?难道不能在图形中使用两种或两种以上的颜色吗?难道就只能使用这些蓝灰色的东西,而不能在图形中使用真色彩?只能使用这种字体吗?只有纯白色背景吗?如果我们这个系列重在创建既可显示信息又合乎审美情趣的图形,这难道不是我们应该做的吗?

嗨,请放宽心;别忘了,好事多磨嘛。Excel 中的图表和图形绘制一门很大的学问,我们需要一段时间才能把一切都讲清楚。不过,我们同时也意识到您渴望更新、更令人兴奋的事情。没问题:今天,我们将介绍设置基本柱形图格式的基础知识,该图与我们上周所创建的那个图类似。读完我们的介绍之后,您将能够创建类似下面的图形:

Microsoft Excel


嗯,不错吧,情人眼里西施嘛。尽管这可能并不恰如君意,但至少我们使用了蓝灰以外的颜色,而且我们通过变化字体并在图表区周围添加边框,着实费力对其进行了一番装扮。如果您不喜欢我们带来的图表,那没关系:我们将向您展示如何更改颜色、字体、边框以及其他元素,以帮助您将自己的艺术想象变为现实。所有这一切都可以为您的 Excel 图形绘制添姿加彩。

不过,在此之前让我们先来了解一下 Excel 在涉及图表和图形处理时所使用的某些对象:

Microsoft Excel


要查看此图像的实际尺寸版本,请单击此处

今天,我们暂且将这些对象分成三个基本类别:图表区、图表标题和图表轴。首先是不同的图表区对象:ChartAreaPlotAreaWallsFloorSeriesCollection。虽然有多种方式可以设置这些对象的格式,但我们将仅限于指定颜色和边框。Excel 的一个妙处在于,对于上述每个对象,可以使用完全相同的方法来设置属性;如果可以为 ChartArea 对象设置背景颜色,那么也可以为 Walls 对象设置背景颜色。

接下来是 ChartTitle 对象;对于该对象,我们今天不想多谈,只是向您展示如何更改字体大小和颜色。最后是三个图表轴。同样,我们对此也不会多谈,但我们至少会将字体设置为粗体并向您介绍配置图表轴的入门知识。

让我们先来为 ChartArea 赋予颇具艺术性的黑色背景。(对,正如巴黎那些高贵的图表设计师们所做的那样。)为任何图表区类型的对象设置背景颜色都只需要一行代码:只要指明该对象而后将 Interior.ColorIndex 属性设置为所需的值即可。以下这行代码将 ChartArea 颜色设置为黑色:

objChart.ChartArea.Interior.ColorIndex = 1

注意。要查看可显示所有颜色及其相应索引号的脚本,请单击此处

这就是您全部需要做的。想要将 PlotArea 的颜色设置为浅橙色吗?那么,就请继续试试以下的脚本:

objChart.PlotArea.Interior.ColorIndex = 40

想要更改 Walls、Floor 或任一 SeriesCollection 对象的颜色吗?只需将 Interior.ColorIndex 属性设置为所需的颜色即可。在本专栏的最后,我们将提供一个设置所有这些属性的脚本;只要您仔细阅读该脚本,便可以毫不费力地确定我们是何时以及如何执行诸如设置 Floor 对象背景颜色等操作的。

那么,为 PlotArea 添加边框又如何呢?正如您将会看到的那样,其难度只是更改背景颜色的二倍;我们需要一行代码来指定线宽(即线的粗度),还需要一行代码来设置 Border.ColorIndex 属性的值,仅此而已:

objChart.PlotArea.Border.Weight = 4
objChart.PlotArea.Border.ColorIndex 
= 46

不过,Microsoft 却知道他们付钱让我们来“教”诸位的东西几乎根本不用费力。让我们保守我们之间的这个小秘密,好吗?

唯一有些棘手的部分是为 SeriesCollection 设置属性值。这是因为在一个图表中可以有多个 SeriesCollection。例如,此图表就有两个系列集合:

Microsoft Excel


这意味着在设置格式时,我们需要指明自己要处理哪个 SeriesCollection 对象。但即使这件事也很容易做到:SeriesCollection 中的每个对象均被赋予了一个唯一的索引号。(集合中的第一项是 SeriesCollection(1),接下来的一项是 SeriesCollection(2),依此类推。)在我们的图形中仅有一个 SeriesCollection 对象,因而,若要将颜色指定为红色,我们只需引用集合中的第一项 SeriesCollection(1),并为其指定该颜色:

objChart.SeriesCollection(1).Interior.ColorIndex = 3

要是还有一个 SeriesCollection 对象,而且我们想要将对象的背景颜色也设置为红色,又该如何?好啊,为什么不试试:

objChart.SeriesCollection(2).Interior.ColorIndex = 3

注意。当您参考专栏末尾的“大师”脚本时,请注意,除了设置背景颜色以外,我们还为 SeriesCollection 起了一个名:2004。这正是脚本专家引以为傲的众多附赠特色之一!

对于 ChartTitle,我们所要做的只是将字体大小更改为 24 磅,将字体颜色更改为白色。这只需存取 ChartTitle.Font 并设置以下各值即可:

objChart.ChartTitle.Font.Size = 24
objChart.ChartTitle.Font.ColorIndex 
= 2

最后(但当然不是最不重要),我们来谈谈图表轴。在标准的柱形图中有三个不同的轴,无论何时设置图表格式,都需要指定自己要处理哪个轴:

轴。“值”轴(对您而言即是数学上的 y 轴)是图形的垂直轴。要处理“值”轴,我们需要定义一个名为 xlValue 的常量并为该常量赋值 2。

类别轴。“类别”轴(即 x 轴)是图形的水平轴。要处理“类别”轴,我们需要定义一个名为 xlCategory 的常量并为该常量赋值 1。

系列轴。代表三维图表的“深度”;“系列”轴在图表中存在一个以上的 SeriesCollection 时最为有用。要处理“系列”轴,我们需要定义一个名为 xlSeriesAxis 的常量并为该常量赋值 3。

在今天的脚本中,我们要将所有三个轴的“刻度标签”的字体改为粗体。这样做的主要目的是向您展示如何存取不同的轴;例如,这行代码会修改“值”轴的刻度标签:

objChart.Axes(xlValue).TickLabels.Font.Bold = TRUE

同样,对于轴还有更多的事情可做,但其中大多数要等到以后的专栏再做介绍。同时,如果您决定参照 Excel VBA 语言参考自行探索,这篇文章至少应能引领您走上正确的方向。开始时,您不妨只在我们所提供的基本脚本上进行一些更改。可以更改 ChartTitle 的字体颜色或字体大小,也可以更改 PlotArea 的背景颜色。还可以尝试做一些我们没有谈及的事情。只要觉得有趣,任何事情都可以做,不是吗?

顺便说一下,下面就是那个可以生成具有艺术美感图表的脚本:

Const xlCategory = 1
Const xlValue = 2
Const xlSeriesAxis = 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= 987
objWorksheet.Cells(
4,2= 611
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.HasLegend 
= FALSE
objChart.ChartTitle.Text 
= "Operating System Use"
objChart.ChartType 
= -4100
objChart.ChartArea.Interior.ColorIndex 
= 1
objChart.ChartTitle.Font.Size 
= 24
objChart.ChartTitle.Font.ColorIndex 
= 2
objChart.Walls.Interior.ColorIndex 
= 37
objChart.Floor.Interior.ColorIndex 
= 37
objChart.SeriesCollection(
1).Interior.ColorIndex = 3
objChart.SeriesCollection(
1).Name = "2004"
objChart.PlotArea.Interior.ColorIndex 
= 40
objChart.PlotArea.Border.Weight 
= 4
objChart.PlotArea.Border.ColorIndex 
= 46
objChart.Axes(xlValue).TickLabels.Font.Bold 
= TRUE
objChart.Axes(xlCategory).TickLabels.Font.Bold 
= TRUE
objChart.Axes(xlSeriesAxis).TickLabels.Font.Bold 
= TRUE