前面介绍了利用Python中xlrd与xlwt读写Excel的基本操作( 《使用Python xlrd与xlwt模块读写Excel》),这两个模块可以很方便地对Excel进行处理,非常实用。但由于xlwt只支持Excel2007之前的版本,所以无法生成.xlsx后缀的文件,而且其单个sheet支持的最大行数为65535,数据量一旦超过限制行数,会遇到如下错误
ValueError: row index was 65536, not allowed by .xls format
这是xlwt很大的短板,遇到这种情况只能用其他包代替,openpyxl 是一个不错的选择,它可用于读写Excel2010 xlsx/xlsm/xltx/xltm 文件,同时支持 Pandas 和 NumPy 等包,能够绘制图表,并且同样支持格式控制等,详细文档可以参考:
https://openpyxl.readthedocs.io/en/default/index.html#
下面开始介绍它的一些基本操作:
首先通过pip安装
pip install openpyxl
或者手动安装:https://pypi.python.org/pypi/openpyxl
###Excel的读取
#导入openpyxl package
import openpyxl
#打开一个已有工作簿
f = openpyxl.load_workbook('test.xlsx')
sheet相关操作
#获取sheet名称列表
name_list = f.sheetnames
name_list = f.get_sheet_names()
#通过名称调用sheet
table = f['name']
table = f.get_sheet_by_name('name')
#通过检索调用sheet
table = f.get_sheet_by_name(sheet_names[index])
#调用正在运行的sheet,一般为最后一个
table = f.active
#改变sheet的名字
table.title = 'newname'
单元格相关操作
#读取单元格或范围切片
c = table['A1'] #获取'A1',返回class
c = table.cell(row = 1,column = 1) #按行列数获读取
row5 = table[5] #获取第5行,返回元组
colA = table['C'] #获取C列
cell_range = table['A1':'B4'] #获取范围切片元组
row_range = table[5:8] #5到8行
col_range['A:D'] #A到D列
#按行列数读取范围切片
for row in table.iter_rows(min_row=1, max_col=3, max_row=2): #按行读取
for col in table.iter_cols(min_row=1, max_col=3, max_row=2): #按列读取
table.max_row #最大行数
table.max_column #最大列数
table.rows #按行遍历
table.columns #按列遍历
#读取单元格的值
c = table['A2'].value #按位置读取
c = table.cell(row = 1,column = 1).value #按行列数读取
需要注意的是openpyxl中按行列数检索时参数名‘row =’及‘column =’ 不能省略,而且均从1开始计数,这与xlrd有所不同。
####一个例子
利用openpyxl读出图1所示表中的一些信息,代码及结果如下: