购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 工作簿操作常调用的api属性

当xlwings模块的Book对象提供的属性和函数不能满足需求时,可通过api属性将Book对象转换为Excel VBA中的Workbook对象,再通过调用Workbook对象的属性和函数来完成所需的工作簿操作。本节将介绍Excel VBA中Workbook对象的一些常用属性和函数。

2.3.1 Protect()函数——保护工作簿结构

为了防止其他用户更改工作簿的结构,如在工作簿中移动、删除或插入工作表,可通过xlwings模块中Book对象的api属性调用VBA中Workbook对象的Protect()函数来保护工作簿的结构。其语法格式如下:

表达式.api.Protect(Password,Structure,Windows)

参数说明:

表达式:一个Book对象,通常用打开或新建工作簿的方式来创建。

Password:指定保护工作簿结构的密码。

Structure:当参数值为True时,表示保护工作簿的结构;当参数值为False或者省略该参数时,表示不保护工作簿的结构。

Windows:当参数值为True时,表示保护工作簿窗口;当参数值为False或者省略该参数时,表示不保护工作簿窗口。

应用场景 保护指定工作簿的结构

◎代码文件:Protect()函数.py

◎数据文件:员工档案表.xlsx

打开文件夹“F:\python\第2章”中的工作簿“员工档案表.xlsx”,右击任意工作表的标签,在弹出的快捷菜单中可看到工作表的插入、删除、移动或复制等命令为可用状态,如下图所示。

下面在Python代码中调用VBA中Workbook对象的Protect()函数来保护工作簿的结构。演示代码如下:


1 import xlwings as xw # 导入xlwings模块并简写为xw
2 app = xw.App(visible=False, add_book=False) # 启动Excel程序
3 workbook = app.books.open('F:\\python\\第2章\\员工档案表.xlsx') # 打开指定的工作簿
4 workbook.api.Protect(Password='111', Structure=True, Windows=True) # 保护指定工作簿的结构
5 workbook.save() # 保存工作簿
6 workbook.close() # 关闭工作簿
7 app.quit() # 退出Excel程序

运行以上代码后,打开工作簿“员工档案表.xlsx”,右击任意工作表的标签,在弹出的快捷菜单中可看到插入、删除、移动或复制等命令变为灰色的不可用状态,如下图所示,说明工作簿的结构被保护了。

如果要取消对工作簿结构的保护,可以调用VBA中Workbook对象的Unprotect()函数,并传入正确的保护密码作为参数。核心代码示例如下:


1 workbook.api.Unprotect(Password='111')

2.3.2 Password属性——为工作簿设置打开密码

通过xlwings模块中Book对象的api属性调用VBA中Workbook对象的Password属性,然后为该属性赋值,可为工作簿设置打开密码,从而防止工作簿中的信息被泄露或者被更改。调用Password属性的语法格式如下:

表达式.api.Password

参数说明:

表达式:一个Book对象,通常用打开或新建工作簿的方式来创建。

应用场景 为指定工作簿设置打开密码

◎代码文件:Password属性.py

◎数据文件:员工档案表.xlsx

本案例要在Python代码中调用VBA中Workbook对象的Password属性,为文件夹“F:\python\第2章”中的工作簿“员工档案表.xlsx”设置打开密码。演示代码如下:


1 import xlwings as xw # 导入xlwings模块并简写为xw
2 app = xw.App(visible=False, add_book=False) # 启动Excel程序
3 workbook = app.books.open('F:\\python\\第2章\\员工档案表.xlsx') # 打开指定的工作簿
4 workbook.api.Password = '111' # 设置工作簿的打开密码为“111”
5 workbook.save() # 保存工作簿
6 workbook.close() # 关闭工作簿
7 app.quit() # 退出Excel程序

运行以上代码后,打开工作簿“员工档案表.xlsx”,将会弹出如右图所示的“密码”对话框,只有在“密码”文本框中输入正确的保护密码“111”,再单击“确定”按钮,才能打开工作簿。

如果为一个工作簿设置了打开密码,那么用2.2.1节介绍的open()函数打开该工作簿时,需要通过password参数传入正确的打开密码。如果还想删除打开密码,可将一个空字符串赋给Password属性。核心代码示例如下:


1 workbook = app.books.open('F:\\python\\第2章\\员工档案表.xlsx',password='111')
2 workbook.api.Password = ''

2.3.3 SaveAs()函数——转换工作簿的文件格式

在Excel中,可通过“另存为”操作来转换工作簿的文件格式。例如,将“.xlsx”格式的工作簿另存为“.xls”格式,以在早期版本的Excel中打开。要通过Python编程转换工作簿的文件格式,可通过xlwings模块中Book对象的api属性调用VBA中Workbook对象的SaveAs()函数来实现。其语法格式如下:

表达式.api.SaveAs(path,FileFormat)

参数说明:

表达式:一个Book对象,通常用打开或新建工作簿的方式来创建。

path:更改格式后的工作簿的保存路径,可为绝对路径或相对路径。只支持路径字符串,如果要使用路径对象,可使用str()函数将路径对象转换为路径字符串。

FileFormat:另存文件时使用的文件格式。设置为56时表示另存为“.xls”格式,设置为51时表示另存为“.xlsx”格式。

应用场景 更改指定工作簿的文件格式

◎代码文件:SaveAs()函数.py

◎数据文件:员工档案表.xlsx

本案例要在Python代码中调用VBA中Workbook对象的SaveAs()函数,将文件夹“F:\python\第2章”中的工作簿“员工档案表.xlsx”另存为“档案.xls”。演示代码如下:


1 import xlwings as xw # 导入xlwings模块并简写为xw
2 app = xw.App(visible=False, add_book=False) # 启动Excel程序
3 workbook = app.books.open('F:\\python\\第2章\\员工档案表.xlsx') # 打开指定的工作簿
4 workbook.api.SaveAs('F:\\python\\第2章\\档案.xls', FileFormat=56) # 将工作簿另存为“.xls”格式
5 workbook.close() # 关闭工作簿
6 app.quit() # 退出Excel程序

运行以上代码后,可在文件夹中看到另存得到的工作簿“档案.xls”。

2.3.4 PrintOut()函数——打印工作簿

如果要打印一个工作簿中的所有工作表,可以通过xlwings模块中Book对象的api属性调用VBA中Workbook对象的PrintOut()函数来实现。其语法格式如下:

表达式.api.PrintOut(Copies,ActivePrinter,Collate)

参数说明:

表达式:一个Book对象,通常用打开或新建工作簿的方式来创建。

Copies:指定打印的份数。如果省略该参数,则表示只打印一份。

ActivePrinter:指定打印机的名称。如果省略该参数,则表示使用操作系统的默认打印机。

Collate:当该参数值为True时,表示逐份打印。

应用场景 打印指定工作簿的所有工作表

◎代码文件:PrintOut()函数.py

◎数据文件:汽车备案信息.xlsx

打开文件夹“F:\python\第2章”中的工作簿“汽车备案信息.xlsx”,可看到其中有3个工作表,如下图所示。

下面在Python代码中调用VBA中Workbook对象的PrintOut()函数,将该工作簿中的所有工作表分别打印两份。演示代码如下:


1 import xlwings as xw # 导入xlwings模块并简写为xw
2 app = xw.App(visible=False, add_book=False) # 启动Excel程序
3 workbook = app.books.open('F:\\python\\第2章\\汽车备案信息.xlsx') # 打开指定的工作簿
4 workbook.api.PrintOut(Copies=2, ActivePrinter='DESKTOP-HP01', Collate=True) # 打印指定的工作簿
5 workbook.close() # 关闭工作簿
6 app.quit() # 退出Excel程序

运行以上代码,即可将工作簿“汽车备案信息.xlsx”中的3个工作表分别打印两份。 1riAaYkoTzmvh72bfqpMNxkx6K+ahfJfB0AnMQzv0R9znqcEErBXsZ+mXrR+FkLq

点击中间区域
呼出菜单
上一章
目录
下一章
×