Openpyxl:读取/写入Excel文件的Python模块

时间:2020-02-23 14:42:23  来源:igfitidea点击:

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参数。