这是一个第三方库,可以处理xlsx
格式的Excel文件。pip install openpyxl
安装。如果使用Aanconda,应该自带了。
读取Excel文件
需要导入相关函数。
from openpyxl import load_workbook# 默认可读写,若有需要可以指定write_only和read_only为Truewb = load_workbook('mainbuilding33.xlsx')
默认打开的文件为可读写,若有需要可以指定参数read_only
为True
。
获取工作表--Sheet
# 获得所有sheet的名称print(wb.get_sheet_names())# 根据sheet名字获得sheeta_sheet = wb.get_sheet_by_name('Sheet1')# 获得sheet名print(a_sheet.title)# 获得当前正在显示的sheet, 也可以用wb.get_active_sheet()sheet = wb.active
获取单元格
# 获取某个单元格的值,观察excel发现也是先字母再数字的顺序,即先列再行b4 = sheet['B4']# 分别返回print(f'({b4.column}, {b4.row}) is {b4.value}') # 返回的数字就是int型# 除了用下标的方式获得,还可以用cell函数, 换成数字,这个表示B2b4_too = sheet.cell(row=4, column=2)print(b4_too.value)
b4.column
返回B
, b4.row
返回4, value则是那个单元格的值。另外cell还有一个属性coordinate
, 像b4这个单元格返回的是坐标B4
。
获得最大行和最大列
# 获得最大列和最大行print(sheet.max_row)print(sheet.max_column)
获取行和列
# 因为按行,所以返回A1, B1, C1这样的顺序for row in sheet.rows: for cell in row: print(cell.value)# A1, A2, A3这样的顺序for column in sheet.columns: for cell in column: print(cell.value)
上面的代码就可以获得所有单元格的数据。如果要获得某行的数据呢?给其一个索引就行了,因为sheet.rows
是生成器类型,不能使用索引,转换成list之后再使用索引,list(sheet.rows)[2]
这样就获取到第二行的tuple对象。
for cell in list(sheet.rows)[2]: print(cell.value)
如何获得任意区间的单元格?
可以使用range函数,下面的写法,获得了以A1为左上角,B3为右下角矩形区域的所有单元格。注意range从1开始的,因为在openpyxl中为了和Excel中的表达方式一致,并不和编程语言的习惯以0表示第一个值。
for i in range(1, 4): for j in range(1, 3): print(sheet.cell(row=i, column=j)) # out<Cell mainbuilding33.A1><Cell mainbuilding33.B1><Cell mainbuilding33.A2><Cell mainbuilding33.B2><Cell mainbuilding33.A3><Cell mainbuilding33.B3>
新闻热点
疑难解答