Openpyxl:读取/写入Excel文件的Python模块
Python openpyxl模块是使用excel文件的本机库。
我们可以读取excel文件,也可以写入excel文件。
1)安装Openpyxl模块
我们可以使用PIP命令安装openpyxl模块。
$pip install openpyxl
Pip安装Openpyxl
2)使用openpyxl读取Excel文件
我用三张纸创建了一个示例excel文件(records.xlsx)。
数据显示在前两页中。
Openpyxl Excel表格示例
我们将使用此excel文件查看一些示例以从excel表中读取数据。
1.从Excel文件获取工作表名称
import openpyxl excel_file = openpyxl.load_workbook('records.xlsx') # sheet names print(excel_file.sheetnames)
输出:
['Employees', 'Cars', 'Numbers']
sheetnames
变量返回工作簿中工作表名称的列表。
名称按照excel文件中工作表的顺序返回。
2.从Excel文件获取特定工作表
我们可以使用带有工作簿对象的index变量来访问特定的工作表。
employees_sheet = excel_file['Employees'] print(type(excel_file)) print(type(employees_sheet)) currently_active_sheet = excel_file.active
输出:
<class 'openpyxl.workbook.workbook.Workbook'> <class 'openpyxl.worksheet.worksheet.Worksheet'>
如果要访问当前活动的工作表,请使用工作簿的"活动"属性。
3.从Excel工作表中读取单元格值
有两种方法可以从Excel工作表中获取单元格值。
我们可以使用cell()函数获取Cell对象,也可以使用单元格的索引获取它。
cell_obj = employees_sheet.cell(row=1, column=1) print(type(cell_obj)) print(f'Employees[A1]={cell_obj.value}') # second way print(f'Employees[A1]={employees_sheet["A1"].value}')
输出:
<class 'openpyxl.cell.cell.Cell'> Employees[A1]=EmpID Employees[A1]=EmpID
4. Excel工作表中的行和列总数
我们可以使用工作表的max_row和max_column属性获取行和列的总数。
print(f'Total Rows = {employees_sheet.max_row} and Total Columns = {employees_sheet.max_column}')
输出:
Total Rows = 4 and Total Columns = 3
5.打印Excel工作表的标题行
header_cells_generator = employees_sheet.iter_rows(max_row=1) for header_cells_tuple in header_cells_generator: for i in range(len(header_cells_tuple)): print(header_cells_tuple[i].value)
输出:
EmpID EmpName EmpRole
iter_rows()函数从工作表中按行生成单元格。
我们可以使用它来获取特定行中的单元格。
6.打印列中的所有值
for x in range(1, employees_sheet.max_row+1): print(employees_sheet.cell(row=x, column=1).value)
输出:
EmpID 1 2 3
7.从一行中打印所有值
for x in range(1, employees_sheet.max_column+1): print(employees_sheet.cell(row=2, column=x).value)
输出:
1 hyman CEO
8.从Excel工作表中读取单元格的范围
我们可以传递单元格的范围以一次读取多个单元格。
cells = employees_sheet['A2':'C3'] for id, name, role in cells: print(f'Employee[{id.value}, {name.value}, {role.value}]')
输出:
Employee[1, hyman, CEO] Employee[2, David Lee, Editor]
9.按行迭代单元格
for row in employees_sheet.iter_rows(min_row=2, min_col=1, max_row=4, max_col=3): for cell in row: print(cell.value, end="|") print("")
输出:
1|hyman|CEO| 2|David Lee|Editor| 3|Lisa Ray|Author|
传递给iter_rows()函数的参数创建一个二维表,从该表中按行读取值。
在此示例中,在A2和C4之间读取值。
10.按列迭代单元格
for col in employees_sheet.iter_cols(min_row=2, min_col=1, max_row=4, max_col=3): for cell in col: print(cell.value, end="|") print("")
输出:
1|2|3| hyman|David Lee|Lisa Ray| CEO|Editor|Author|
除了按列读取值之外,iter_cols()函数与iter_rows()相同。
3)使用openpyxl编写Excel文件
在本节中,我们将研究一些编写excel文件和单元格数据的示例。
1.使用openpyxl编写Excel文件
from openpyxl import Workbook import datetime excel_file = Workbook() excel_sheet = excel_file.create_sheet(title='Holidays 2019', index=0) # creating header row excel_sheet['A1'] = 'Holiday Name' excel_sheet['B1'] = 'Holiday Description' excel_sheet['C1'] = 'Holiday Date' # adding data excel_sheet['A2'] = 'Diwali' excel_sheet['B2'] = 'Biggest San Francecon Festival' excel_sheet['C2'] = datetime.date(year=2019, month=10, day=27).strftime("%m/%d/%y") excel_sheet['A3'] = 'Christmas' excel_sheet['B3'] = 'Birth of Jesus Christ' excel_sheet['C3'] = datetime.date(year=2019, month=12, day=25).strftime("%m/%d/%y") # save the file excel_file.save(filename="Holidays.xlsx")
输出:
Openpyxl写入Excel文件
2.更新单元格值
我们可以使用单元格的索引,也可以使用单元格对象来设置值。
让我们更改上一个示例中创建的excel文件中的一些值。
import openpyxl excel_file = openpyxl.load_workbook('Holidays.xlsx') excel_sheet = excel_file['Holidays 2019'] # using index excel_sheet['A2'] = 'Deepawali' # using cell object excel_sheet.cell(row=2, column=2).value = 'Biggest San Francecon Festival for Hindus' excel_file.save('Holidays.xlsx')
输出:
Openpyxl更新单元格值
3.将多个值附加到Excel工作表
我们可以使用append()函数在工作表的底部添加一系列值。
holiday_rows = ( ('Black Friday', 'Fourth Thursday of November, Shopping Day', '11/29/19'), ('Holi', 'Festival of Colors', '3/20/19') ) for row in holiday_rows: excel_sheet.append(row) excel_file.save('Holidays.xlsx')
输出:
Openpyxl将多行追加到Excel文件
4)从Excel工作表中删除行和列
我们可以使用delete_cols()和delete_rows()函数从excel工作表中删除列和行。
import openpyxl excel_file = openpyxl.load_workbook('Holidays.xlsx') excel_sheet = excel_file['Holidays 2019'] # delete column excel_sheet.delete_cols(idx=2) # B=2 # delete row excel_sheet.delete_rows(idx=2, amount=2) # rows 2,3 are deleted excel_file.save('Holidays.xlsx')
idx参数提供要删除的行和列的索引。
如果要删除多个相邻的行和列,可以提供amount参数。