Excel文件包含多个表,当前查看的表为活动表。每个表有多列,从A开始编号;也有多个行,从1开始计数。
读取文件
- 打开文件
python打开excel文件需要导入openpyxl
模块,使用openpyxl.load_workbook()
函数,该函数接受一个文件名,获得Workbook()
对象。
import openpyxl
wb = openpyxl.load_workbook('table.xlsx')
- 读取表格
get_sheet_names()
可以取得文件中所有表名,返回一个列表。
wb.get_sheet_names()
get_sheet_by_name()
放入传入表名可以获得表,返回一个Worksheet
对象。该对象的.title
属性可以获得名称。
sheet = wb.get_sheet_by_name('Sheet1')
sheet.title
active
属性可以获得活动表,也即当前查看的表。
anotherSheet = wb.active
- 获取一个单元格
获得表格后,通过下表访问单元格,获得Cell
对象。单元格有value
属性,得到单元格中保存的值。
sheet = wb.get_sheet_by_name('Sheet1')
sheet['A1'].value
Worksheet
对象的max_row()
和max_column()
属性获得表的大小。
sheet.max_row
sheet.max_column
Cell
对象也有row
、column
和coordinate
属性,提供单元格位置信息。
c = sheet['A1']
c.row # 行信息,1
c.column # 列信息,2
c.coordinate # 行列信息,A1
获得单元格时也可以传入row
和column
关键字参数来指定。
sheet.cell(row=1, column=1).value
for i in range(1, 5):
print(sheet.cell(row=i, column=1).value)
第一行或第一列从1开始编号。
- 获得一片单元格
Worksheet
对象可以切片,获得一行、一列或者一个区域中的全部单元格对象,然后使用循环遍历每个单元格。
Worksheet
对象可以通过rows
和columns
属性获得行和列的切片。
list(sheet.rows)[1]
list(sheet.columns)[2]
for i in (sheet.columns)[1]:
print(i.value)
还可以获得矩形切片。
for i in sheet sheet['A1', 'D4']
for j in i:
print(j.coordinate, j.value)
这里遍历的是A1到D4中全部单元格对象,外层循环遍历每一行,内层循环遍历每个单元格。
写入文件
- 创建文档
调用openpyxl.Workbook()
函数创建一个新的Workbook
对象。
wb = openpyxl.Workbook()
wb.get_sheet_names()
sheet = wb.active
sheet.title = 'sheet1'
创建Workbook
对象后有一个名为Sheet
的表,可以通过title
属性修改表名。
- 保存文档
调用save()
方法保存文档,传入一个文件名。
wb.save('table.xlsx')
- 创建工作表
利用create_sheet()
方法添加工作表。
wb.create_sheet()
新创建的表默认是最后一个工作表,可以利用index
参数指定新工作表的索引。
wb.create_sheet(index=0)
还可以利用title
参数指定工作表名称。
wb.create_sheet(index=0, title='New Sheet')
- 删除工作表
利用remove_sheet()
方法删除工作表。该方法接受一个Worksheet
对象作为参数,而不是工作表的名称。因此,就需要调用get_sheet_by_name()
方法输入表的名称,将返回结果传入remove_sheet()
方法。
wb.remove_sheet(wb.get_sheet_by_name('New Sheet'))
- 写入数据
通过下标的方式把数据写入单元格。
sheet['A1'] = 'hello world'