使用Win32::OLE操作Excel——Excel对象模型

时间:2022-02-09 20:19:17
像VBA操作Excel一样,Win32::OLE模块也是通过对象操作来控制Excel。

如果想自动化操作和控制Excel应用程序,则必须要与Excel对象模型所提供的对象进行交互。理解和熟悉Excel对象模型,就可以更容易的操作Excel。

Excel对象模型提供了很多对象[1],有些对象可能会经常遇到。一般情况下,对Excel程序的设置、对工作簿和工作表的操作、单元格和单元格区域的操作以及图标的操作,是经常涉及到的。因此,在学习Excel对象模型时,先集中学习与这些操作相关的对象、属性、方法和事件,以此来加深对Excel对象模型的认识和理解。

以上内容的操作,实际上是就对Excel对象的操作:

  • Excel程序  Application对象
  • 工作簿       Workbook对象
  • 工作表       Worksheet对象
  • 单元格       Range对象
  • 图标          Chart对象

Application对象

Excel Application对象代表Excel应用程序本身。Application对象公开了大量有关正在运行的应用程序、应用于该实例的选项以及在该实例中打开的当前用户对象的信息。

Application对象提供了很多属性来控制Excel的一般状态。

表1:一些控制Excel状态的Application属性

属性 类型 说明
EditDirectoryInCell 布尔 直接就地获取或设置编辑单元格的能力。如果为 False,则您只能在公式栏中编辑单元格。
FixedDecimal 布尔 如果为 True,则所有的数字值都使用 FixedDecimalPlaces 属性来确定小数位数;否则将忽略 FixedDecimalPlaces 属性(默认值为 False)。
FixedDecimalPlaces long 确定用于数值数据的小数位数(如果 FixedDecimal 属性为 True)。
ScreenUpdating 布尔 如果为 True,Excel 就会在每个方法调用之后更新其屏幕。为了节省时间并且使您的应用程序看起来更加专业,您可以在代码运行时关掉显示。一旦完成,就一定要再次将此属性值重新设置为 True。Excel 不会自动为您重新设置它。
StandardFont 字符串 获取或设置 Excel 中默认字体的名称;只有在重新启动 Excel 之后才会生效。
StandardFontSize long 获取或设置 Excel 中默认字体的大小;只有在重新启动 Excel 之后才会生效。

在表1列出的所有属性中,最可能使用的一个属性是ScreenUpdating。使用这个属性,不但使Excel应用程序看起来更专业,还可以提高它们的运行效率——在每次修改后更新显示会严重影响代码的运行效率。

Application对象还提供了一组控制Excel中显示的属性,可以修改这些属性改变用户在屏幕上所看到的内容。

表2:一些控制Excel外观的Application属性

属性 类型 说明
DisplayAlerts 布尔 如果为 True(默认值),则当运行代码时,只要有必要(例如在删除一个工作表时),Excel 就会显示警告消息。设置为 False 以忽略警告。Excel 的行为就好像您已经为每个警告选择了默认值。
DisplayFormulaBar 布尔 如果为 True(默认值),Excel 就会显示标准公式栏以编辑单元格;设置为 False 以隐藏公式栏。
DisplayFullScreen 布尔 如果为 True,则 Excel 以全屏模式运行(这种模式与仅仅最大化 Excel 窗口的效果不一样);其默认值为 False。

Application对象的一些属性能够返回其他的对象。

  表3:返回对象的Application属性

属性 类型 说明
ActiveCell 范围 返回对活动窗口(顶部的窗口)中当前活动单元格的引用。如果没有活动窗口,此属性会产生一个错误。
ActiveChart 图表 返回对当前活动的图表的引用。对于一个嵌入式图表来说,只有当此图表被选中或被激活时才可认为是活动的。
ActiveSheet 对象 返回对活动工作簿中的活动工作表的引用。
ActiveWindow 窗口 返回对活动窗口(顶部的窗口)的引用;如果没有活动窗口,则不返回任何结果。
Charts 工作表 返回 Sheet 对象(Chart 和 Worksheet 对象的父对象)的集合,这些对象包含对活动工作簿中的每个图表的引用。
Selection 对象 返回应用程序中选中的对象。可能是一个 Range、一个 Worksheet 或任何其他的对象 — 同样适用于 Window 类,在这种情况下,选择通常是一个 Range 对象。如果当前没有对象被选中,则不返回任何结果。
Sheets 工作表 返回 Sheet 对象的集合,这些对象包含对活动工作簿中每个工作表的引用。
Workbooks 工作簿 返回 Workbook 对象的集合,这些对象包含对所有打开的工作簿的引用。

最常用的是Workbooks属性,它可以打开、新建或循环访问打开的工作簿。

  • 新建工作簿

my $workbook = $excel->Workbooks->add();

  • 打开已有工作簿

my $workbook = $excel->Workbooks->open('c:/documents/myworkbook.xls');

  • 引用某个工作簿

可以使用整数(指示在集合中的位置)或工作簿名作为 Workbooks 集合中的索引。

my $workbook = $excel->Workbooks(1);

如果想要通过名称引用工作簿,需要注意对其进行引用的方法:必须使用在标题栏看到的名称,在保存该文件之前,这个名称不包括“.xls”扩展名:

# 保存工作簿之前,这样引用

my $workbook = $excel->Workbooks('Book1');

# 保存工作簿之后,这样引用

my $workbook = $excel->Workbooks('Book1.xls');

  • 关闭工作簿

与大多数的集合不同,这个集合允许一次性地关闭所有的成员。下面的方法调用关闭所有打开的工作簿:

$excel->Workbooks->close();

Workbook对象

 

Worksheet对象

 

Range对象

[1] 查看Excel对象模型的方法:打开Excel后,按F1键,在“Excel帮助”中,点击“目录”,然后点击“Microsoft Excel 对象模型”链接即可。