Excel应用对象

Application对象表示Excel应用本身,是Workbook, Worksheet, Range等其他对象的根对象。

Application对象

使用Excel对象模型,首先要创建Application对象。

【Excel VBA】

Excel VBA中直接使用Application表示Application对象,不需要单独创建,而且在很多情况下可以省略。

在其他应用程序比如Word, PPT中创建Excel应用,常使用下面的方式创建Application对象:

code.vba
Dim App As Object
Set xl = CreateObject("Excel.Sheet")
Set App=xl.Application

【Python xlwings】

使用xlwings包时,使用顶级函数App()可以创建App对象:

code.python
>>> import xlwings as xw
>>> app = xw.App()
>>> app2 = xw.App()

查看app中工作簿的个数:

【Excel VBA】

code.vba
Application.Workbooks.Count

或者省略Application:

code.vba
Workbooks.Count

【Python xlwings】

code.python
>>> app.books.count

【Python xlwings API】

code.python
>>> app.api.Workbooks.Count

在Python xlwings使用方式下,激活应用app2,使之成为当前应用:

code.python
>>> app2.activate()

Apps对象是所有App对象的集合。

code.python
>>> import xlwings as xw
>>> xw.apps

用add方法创建一个新的应用程序。新的应用程序自动成为活动的应用程序。

code.python
>>> xw.apps.add()

用active属性返回活动的应用程序。

code.python
>>> xw.apps.active

用count属性返回应用的个数。

code.python
>>> xw.apps.count
2

每个Excel应用都有一个唯一的PID值,可用它对应用集合进行索引。用keys方法获取全部应用的PID值,以列表的形式返回。

code.python
>>> pid=xw.apps.keys()
>>> pid
[3672, 4056]

然后可以用PID值引用单个的应用。下面获取第一个应用的标题。

code.python
>>> xw.apps[pid[0]].api.Caption
'工作簿1 - Excel'

在Python xlwings形式下,App对象没有Caption属性,采用的是API的用法。

使用kill方法,强制Excel应用程序通过终止其进程退出。

code.python
>>> app.kill()

使用Quit(quit)方法,退出应用程序而不保存任何工作簿。

【Excel VBA】

code.vba
Application.Quit

【Python xlwings】

code.python
>>> app.quit()

位置、大小、标题、可见性和状态属性

每个Excel应用都是一个Excel图形窗口,可以获取跟窗口相关的一些属性。

Left属性和Top属性的值定义窗口左上角点的横坐标和纵坐标,即定义窗口的位置。

【Excel VBA】

code.vba
Application.Left  '30.25
Application.Top  '95.25

【Python xlwings API】

code.python
>>> app.api.Left
30.25
>>> app.api.Top
95.25

Width属性和Height属性的值定义窗口的宽度和高度,即定义窗口的大小。

【Excel VBA】

code.vba
Application.Width  '635.25
Application.Height  '390.0

【Python xlwings API】

code.python
>>> app.api.Width
635.25
>>> app.api.Height
390.0

用Caption属性的值表示窗口的标题。

【Excel VBA】

code.vba
Application.Caption  ' '工作簿1 - Excel'

【Python xlwings API】

code.python
>>> app.api.Caption
'工作簿1 - Excel'

用Visible属性返回或设置窗口的可见性。属性的值为True时,窗口可见;值为False时,窗口不可见。

【Excel VBA】

code.vba
Application.Visible  'True

【Python xlwings API】

code.python
>>> app.api.Visible
True

用WindowState属性定义窗口的显示状态,包括3种状态,即窗口最小化、最大化和正常显示,其常数分别对应于xlMinimized, xlMaximized和xlNormal,对应的值为-4140, -4137和-4143。

【Excel VBA】

code.vba
Application.WindowState  '-4143

【Python xlwings API】

code.python
>>> app.api.WindowState
-4143

下面设置窗口最大化:

【Excel VBA】

code.vba
Application.WindowState=xlMaximized

【Python xlwings API】

code.python
>>> app.api.WindowState=xw.constants.WindowState.xlMaximized

其他常用属性

下面介绍几个比较常用,也很有用的属性,包括ScreenUpdating(screen_updating)属性、DisplayAlerts(display_alerts)属性和WorksheetFunction属性。

一、刷新画面

Excel为用户提供了非常漂亮的图形用户界面,它相当于一个功能强大的虚拟办公环境。从编程的角度来讲,我们需要知道的是,这个漂亮的界面是由图形组成的,是“画”出来的。而且,当鼠标和键盘进行单击、移动、按下、释放等每一个动作时,这个画面都会刷新,即所谓的重画。当我们对工作表,对单元格进行频繁的操作,就会频繁地重画整个界面。

重画是需要时间的。所以,如果能关闭这个重画的动作,就能显著提高脚本的运行速度。这就是ScreenUpdating(screen_updating)这个属性的意义所在。

设置ScreenUpdating(screen_updating)的值为False时,关闭刷新画面的动作,此后对工作表,对单元格所做的任何改变不会在界面上显示出来,直到设置ScreenUpdating(screen_updating)属性的值为True。

【Excel VBA】

code.vba
Application.ScreenUpdating=False

【Python xlwings】

code.python
>>> app.screen_updating=False

注意,操作完成以后,要记得将该属性的值设置为True。

二、显示警告

编写程序,从来不是一蹴而就的事情,需要不断地调试,不断地发现错误改正错误。即使没有错误了,也会有不完美的地方。此时,程序运行时可能会弹出一些对话框来,给出一些提示或者警告什么的。这个事情会中断程序的运行,需要进行人工干预,关闭它以后程序才会继续运行。所以,它对于我们追求的自动化操作是一大威胁,不再丝滑。

这样的提示或警告并不是程序出错导致的,并不会影响程序的结果。使用DisplayAlerts (display_alerts)属性,设置它的值为False,可以禁止弹出这些对话框提示,从而保障程序流畅运行。当然,任务处理完以后,还需要将它的值设置为True。

【Excel VBA】

code.vba
Application.DisplayAlerts=False

【Python xlwings】

code.python
>>> app.display_alerts=False

三、调用工作表函数

Excel的工作表函数功能非常强大,编写脚本时,如果能够调用它们进行处理,将能事半功倍。

利用WorksheetFunction属性可以调用工作表函数,轻松完成很多任务。

对于图1-1工作表中给出的数据,可以使用工作表函数CountIf统计其中大于8的数据的个数。

Document Image

图1-1 给定的数据

编写代码如下:

【Excel VBA】

code.vba
WorksheetFunction.CountIf(Range("B2:F5"),">8")    '7.0

【Python xlwings API】

code.python
>>> app.api.WorksheetFunction.CountIf(app.api.Range("B2:F5"),">8")
7.0

输出结果为7.0,表示工作表给定范围内大于8的数据的个数为7。