工作簿对象是工作表对象的父对象,是对现实办公场景中文件夹的抽象和模拟。一个工作簿中可以有一个或多个工作表。使用工作簿对象的属性和方法,可以对工作簿进行设置和操作。
跟工作簿有关的对象,xlwings API使用方式下主要有Workbook, Workbooks和ActiveWorkbook等,xlwings方式下有Book和books两种。复数形式的类表示集合,所有单数形式的对象都在对应集合中存储和管理。ActiveWorkbook表示当前活动工作簿。[大谦Excel,dqexcel点com]
创建和打开工作簿
可以使用xlwings和API两种方式创建和打开工作簿。
在xlwings使用方式下,用books对象的add方法,或者xlwings的Book方法创建工作簿。新建一个application对象也会创建一个工作簿。在另外两种使用方式下,用Workbooks对象的Add方法创建工作簿。
【xlwings】
>>> import xlwings as xw
>>> bk=xw.books.add()
或
>>> bk=xw.Book()
或
>>> app=xw.App()
>>> bk=xw.books.active
【xlwings API】
>>> import xlwings as xw
>>> app=xw.App()
>>> bk=app.api.Workbooks.Add()
用xlwings API方式时,创建application对象的时候创建了一个工作簿,用Workbooks.Add方法又创建一个,实际上是创建了两个工作簿。可以用下面的代码引用前一步创建的工作簿。
>>> bk=app.api.Workbooks(1)
创建一个新工作簿,新工作簿自动成为活动工作簿。在xlwings使用方式下,用books对象的active属性获取当前活动工作簿:
>>> bk=xw.books.active
>>> bk.name
'工作簿1'
在xlwings API使用方式下用ActiveWorkbook对象引用活动工作簿。
>>> app.api.ActiveWorkbook.Name
'工作簿1'
在xlwings API使用方式下,可以在新建工作簿的同时指定工作簿中工作表的类型。指定工作表类型,可以直接指定,也可以指定一个文件,新建工作簿中工作表的类型与该文件中的相同。
【xlwings API】
>>> bk=app.api.Workbooks.Add(xw.constants.WBATemplate.xlWBATChart)
>>> bk=app.api.Workbooks.Add(r"C:\1.xlsx")
工作表类型参数的取值可以有4个:xlWBATWorksheet, xlWBATChart, xlWBATExcel4MacroSheet和xlWBATExcel4IntlMacroSheet,分别表示普通工作表、图表工作表、宏工作表和国际宏工作表。
对于已经存在的工作簿文件,在xlwings方式下,使用books对象的open方法打开;在另外两种方式下,用Workbooks对象的Open方法打开。如果工作簿尚未打开则打开并返回。 如果它已经打开,不会引发异常,只是返回工作簿对象。open(Open)方法的参数是一个字符串,指定完整的路径名和文件名。如果只指定文件名,则在当前工作目录中查找该文件。
【xlwings】
>>> xw.books.open(r"C:/1.xlsx")
<Book [1.xls]>
也可以使用Book对象打开Excel文件。
>>> xw.Book(r"C:/1.xlsx")
<Book [1.xls]>
【xlwings API】
>>> bk=app.api.Workbooks.Open(r"C:\1.xlsx")
引用、激活、保存和关闭工作簿
在xlwings使用方式下,book对象是books集合的成员,可以直接用book对象在books集合中的索引号进行引用。
>>> import xlwings as xw
>>> xw.books[0]
<Book [工作簿1]>
也可以用小括号进行引用,例如
>>> xw.books(1)
<Book [工作簿1]>
注意,使用中括号引用时基数为0,使用小括号引用时基数为1。
如果有多个Excel应用同时打开,可以使用工作簿的名称进行引用。
下面创建一个新的Excel应用,引用其中名称为“工作簿1”的工作簿。
>>> app = xw.App()
>>> app.books["工作簿1"]
如果已经存在多个Excel应用,可以用xw.apps.keys()获取它们的PID,通过PID索引得到需要的应用,然后用该应用的books属性建立对工作簿的引用。
>>> pid=xw.apps.keys()
>>> pid
[3672, 4056]
>>> app=xw.apps[pid[0]]
>>> app.books[0]
<Book [工作簿1]>
使用activate方法可以激活工作簿。
>>> xw.books(1).activate()
用books对象的active属性返回活动工作簿。
>>> xw.books.active.name
'工作簿1'
用save方法保存工作簿。
>>> bk.save()
>>> bk.save(r'C:\path\to\new_file_name.xlsx')
用close方法关闭工作簿而不保存。
>>> bk.close()
在xlwings API使用方式下,也可以用索引号和名称引用工作簿。
【xlwings API】
>>> bk=app.api.Workbooks(1)
>>> bk=app.api.Workbooks("工作簿1")
使用Activate方法可以激活工作簿。
【xlwings API】
>>> app.api.Workbooks(1).Activate()
用ActiveWorkbook对象引用活动工作簿。
【xlwings API】
>>> app.api.ActiveWorkbook.Name
'工作簿1'
保存工作簿的更改调用Workbooks对象的Save方法。
【xlwings API】
>>> bk=app.api.Workbooks(1)
>>> bk.Save()
如果想将文件另存为一个新的文件,或者第一次保存一个新建的工作簿,就用SaveAs方法。参数指定文件保存的路径及文件名。如果省略路径,则默认将文件保存在当前目录中。
【xlwings API】
>>> bk=app.api.Workbooks(1)
>>> bk.SaveAs(r"D:\test.xlsx")
使用SaveAs方法将工作簿另存为新文件后,将自动关闭原文件,然后打开新文件。如果希望继续保留原文件而不打开新文件,可以用SaveCopyAs方法。
【xlwings API】
>>> bk=app.api.Workbooks(1)
>>> bk.SaveCopyAs(r"D:\test.xlsx")
使用Workbooks对象的Close方法关闭工作簿。如果不带参数,则关闭所有打开的工作簿
【xlwings API】
>>> app.api.Workbooks(1).Close()