Application对象表示Excel应用本身,是Workbook, Worksheet, Range等其他对象的根对象。
Application对象
使用Excel对象模型,首先要创建Application对象。
【Excel VBA】
Excel VBA中直接使用Application表示Application对象,不需要单独创建,而且在很多情况下可以省略。
在其他应用程序比如Word, PPT中创建Excel应用,常使用下面的方式创建Application对象:
Dim App As Object
Set xl = CreateObject("Excel.Sheet")
Set App=xl.Application
【Python xlwings】
使用xlwings包时,使用顶级函数App()可以创建App对象:
>>> import xlwings as xw
>>> app = xw.App()
>>> app2 = xw.App()
查看app中工作簿的个数:
【Excel VBA】
Application.Workbooks.Count
或者省略Application:
Workbooks.Count
【Python xlwings】
>>> app.books.count
【Python xlwings API】
>>> app.api.Workbooks.Count
在Python xlwings使用方式下,激活应用app2,使之成为当前应用:
>>> app2.activate()
Apps对象是所有App对象的集合。
>>> import xlwings as xw
>>> xw.apps
用add方法创建一个新的应用程序。新的应用程序自动成为活动的应用程序。
>>> xw.apps.add()
用active属性返回活动的应用程序。
>>> xw.apps.active
用count属性返回应用的个数。
>>> xw.apps.count
2
每个Excel应用都有一个唯一的PID值,可用它对应用集合进行索引。用keys方法获取全部应用的PID值,以列表的形式返回。
>>> pid=xw.apps.keys()
>>> pid
[3672, 4056]
然后可以用PID值引用单个的应用。下面获取第一个应用的标题。
>>> xw.apps[pid[0]].api.Caption
'工作簿1 - Excel'
在Python xlwings形式下,App对象没有Caption属性,采用的是API的用法。
使用kill方法,强制Excel应用程序通过终止其进程退出。
>>> app.kill()
使用Quit(quit)方法,退出应用程序而不保存任何工作簿。
【Excel VBA】
Application.Quit
【Python xlwings】
>>> app.quit()
位置、大小、标题、可见性和状态属性
每个Excel应用都是一个Excel图形窗口,可以获取跟窗口相关的一些属性。
Left属性和Top属性的值定义窗口左上角点的横坐标和纵坐标,即定义窗口的位置。
【Excel VBA】
Application.Left '30.25
Application.Top '95.25
【Python xlwings API】
>>> app.api.Left
30.25
>>> app.api.Top
95.25
Width属性和Height属性的值定义窗口的宽度和高度,即定义窗口的大小。
【Excel VBA】
Application.Width '635.25
Application.Height '390.0
【Python xlwings API】
>>> app.api.Width
635.25
>>> app.api.Height
390.0
用Caption属性的值表示窗口的标题。
【Excel VBA】
Application.Caption ' '工作簿1 - Excel'
【Python xlwings API】
>>> app.api.Caption
'工作簿1 - Excel'
用Visible属性返回或设置窗口的可见性。属性的值为True时,窗口可见;值为False时,窗口不可见。
【Excel VBA】
Application.Visible 'True
【Python xlwings API】
>>> app.api.Visible
True
用WindowState属性定义窗口的显示状态,包括3种状态,即窗口最小化、最大化和正常显示,其常数分别对应于xlMinimized, xlMaximized和xlNormal,对应的值为-4140, -4137和-4143。
【Excel VBA】
Application.WindowState '-4143
【Python xlwings API】
>>> app.api.WindowState
-4143
下面设置窗口最大化:
【Excel VBA】
Application.WindowState=xlMaximized
【Python xlwings API】
>>> 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】
Application.ScreenUpdating=False
【Python xlwings】
>>> app.screen_updating=False
注意,操作完成以后,要记得将该属性的值设置为True。
二、显示警告
编写程序,从来不是一蹴而就的事情,需要不断地调试,不断地发现错误改正错误。即使没有错误了,也会有不完美的地方。此时,程序运行时可能会弹出一些对话框来,给出一些提示或者警告什么的。这个事情会中断程序的运行,需要进行人工干预,关闭它以后程序才会继续运行。所以,它对于我们追求的自动化操作是一大威胁,不再丝滑。
这样的提示或警告并不是程序出错导致的,并不会影响程序的结果。使用DisplayAlerts (display_alerts)属性,设置它的值为False,可以禁止弹出这些对话框提示,从而保障程序流畅运行。当然,任务处理完以后,还需要将它的值设置为True。
【Excel VBA】
Application.DisplayAlerts=False
【Python xlwings】
>>> app.display_alerts=False
三、调用工作表函数
Excel的工作表函数功能非常强大,编写脚本时,如果能够调用它们进行处理,将能事半功倍。
利用WorksheetFunction属性可以调用工作表函数,轻松完成很多任务。
对于图1-1工作表中给出的数据,可以使用工作表函数CountIf统计其中大于8的数据的个数。
图1-1 给定的数据
编写代码如下:
【Excel VBA】
WorksheetFunction.CountIf(Range("B2:F5"),">8") '7.0
【Python xlwings API】
>>> app.api.WorksheetFunction.CountIf(app.api.Range("B2:F5"),">8")
7.0
输出结果为7.0,表示工作表给定范围内大于8的数据的个数为7。