当前位置:  首页>> 技术小册>> Python与办公-玩转Excel

一个Excel工作簿里面至少有一张工作表,刚刚我们新建了工作簿但并没有新建工作表啊,不应该会报错吗?既然没有报错那就说明有默认的工作表了,你可以打开刚刚保存的Excel文件瞄一眼,就会发现里面有一张名为“Sheet”的工作表。

在openpyxl中一个工作表即一个Worksheet对象,我们可以使用Workbook对象的active()方法获取默认的Worksheet对象。我们知道单词“active”是“激活”的意思,在Excel中可以操作的工作表就是当前被激活的工作表,你可以打开Excel,新建多个工作表,你要修改哪个工作表就需要用鼠标单击一下哪个工作表,这个单击动作其实就是激活工作表。

同一时刻只有一个工作表是被激活的,直观的表现就是你看得到的那个工作表就是当前被激活的工作表,在openpyxl中第一张表就是被激活的。
了解了激活的概念之后,我们试一下通过Workbook对象的active()方法获取一下默认被激活的工作表,代码如下:

  1. from openpyxl import Workbook
  2. wb = Workbook()
  3. ws = wb.active()
  4. # 报错:TypeError:'Worksheet'object is not callable

调用完Workbook对象的active()方法之后发现报错了,提示内容大概是说Worksheet对象不能调用,这是为什么呢?如果你使用的IDE是pycharm,可以把鼠标移到active()方法上面,然后按住Ctrl键再按一下鼠标左键就会跳到定义该方法的地方了,我们可以看到源码中的active()方法有两个:

  1. @property
  2. def active(self):
  3. ...
  4. @active.setter
  5. def active(self,value):
  6. ...

第一个active()方法不带参数,它的作用是返回默认的Worksheet对象,还注意到它上面有@property,说明它被property装饰器所装饰,还记得property装饰器吧?我之前可是专门花一小节介绍它的,现在再带你复习一遍吧。装饰器的作用就是给函数或类增加新的功能,而property装饰器的作用是把方法当成属性使用,所以我们在调用active()方法的时候就要按照访问属性的写法了,即方法名后面不需要写括号了。

再看一下下面的那个带value参数的active()方法,它的作用是修改被当前激活的工作表,它被装饰器active.setter所装饰,该装饰器的作用也是把方法当成属性使用,但它修改属性,就是给属性直接赋值。请注意,很多库都会通过装饰器把方法当成属性使用,也许你以后还会经常遇到,不过我们学过之后就应该看得懂,以后遇到了不要大惊小怪哦。好了,我们访问一下active属性获取一下默认的工作表:

  1. from openpyxl import Workbook
  2. wb = Workbook()
  3. ws = wb.active
  4. print(type(ws),ws)
  5. # 输出:<class 'openpyxl.worksheet.worksheet.Worksheet'>
  6. <Worksheet "Sheet">

该分类下的相关小册推荐: