个性化阅读
专注于IT技术分析

看这一篇就够了!Python Openpyxl完整开发实例分析

本文概述

Python Openpyxl

在本教程中, 我们将学习以下主题:

  • Openpyxl简介
  • Openpyxl的工作流程
  • Openpyxl安装
  • Openpyxl将数据写入单元格
  • Openpyxl读取Excel文件
  • Openpyxl从单元格读取数据
  • Openpyxl读取多个单元格
  • Openpyxl工作表
  • Openpyxl过滤和排序数据
  • Openpyxl合并单元格
  • Openpyxl附加值
  • Openpyxl按列迭代
  • Openpyxl按行迭代
  • Openpyxl将图表添加到Excel文件
  • Openpyxl添加图像

Python Openpyxl简介

Python提供了Openpyxl模块, 该模块用于处理Excel文件而不涉及第三方Microsoft应用程序软件。通过使用此模块, 我们无需打开应用程序即可控制excel。它用于执行excel任务, 例如从excel文件中读取数据或将数据写入excel文件, 绘制一些图表, 访问excel工作表, 重命名工作表, 在Excel工作表中进行修改(添加和删除), 在工作表中设置格式, 样式化, 以及其他任何任务。 Openpyxl非常有效地为你执行这些任务。

数据科学家经常使用Openpyxl执行不同的操作, 例如将数据复制到数据挖掘以及数据分析。


Openpyxl的工作流程

Openpyxl库用于写入或读取excel文件中的数据以及许多其他任务。我们用于操作的一个excel文件称为Workbook, 其中包含最少一张纸和最多几十张纸。

  • 工作表由从1开始的行(水平系列)和从A开始的列(垂直系列)组成。
  • 行和列共同构成一个网格, 并形成可以存储一些数据的单元格。数据可以是任何类型, 例如数字, 字符串。
  • Openpyxl提供了从单个单元格读取数据或向其写入数据的灵活性。

安装Openpyxl

在上一节中, 我们简要讨论了openpyxl及其工作过程。为了使用Openpyxl, 应该在系统中安装Python 3.7和openpyxl 2.6.2。让我们通过使用以下命令安装openpyxl来开始使用openpyxl:

pip install openpyxl

xlsx是XML电子表格文件的扩展名。 xlsx文件支持宏。让我们了解与excel文件相关的基本操作。考虑以下代码:

from openpyxl import Workbook
import time

wb = Workbook()
sheet = wb.active

sheet['A1'] = 87
sheet['A2'] = "Devansh"
sheet['A3'] = 41.80
sheet['A4'] = 10

now = time.strftime("%x")
sheet['A5'] = now

wb.save("sample_file.xlsx")

输出如下:

Openpyxl安装

在上面的代码中, 我们已经将数据写入了五个单元格A1, A2, A3, A4和A5。这些单元格由不同类型的值组成。我们已经从openpyxl模块导入了Workbook类。工作簿类是一个包含文档所有部分的容器。

在这里, 我们定义了一个新的工作簿。总是至少用工作簿制作一张纸。

wb = Workbook()

我们获得活动表的位置。

sheet['A1'] = 87
sheet['A2'] = 'Devansh'

我们已经使用save()方法将所有数据保存到了sample_file.xlsx文件中。


Openpyxl将数据写入单元格

我们可以使用以下Python代码将数据添加到excel文件中。首先, 我们将从openpyxl模块导入load_workbook函数, 然后创建文件的对象并将文件路径作为参数传递。考虑以下代码:

from openpyxl import load_workbook
wb = load_workbook(r'C:\Users\DEVANSH SHARMA\Desktop\demo.xlsx')

sheet = wb.active
sheet['A1'] = 'Devansh Sharma'

sheet.cell(row=2, column=2).value = 5
wb.save(r'C:\Users\DEVANSH SHARMA\Desktop\demo.xlsx')

输出如下:

Openpyxl将数据写入单元格

Openpyxl附加值

Openpyxl提供了append()方法, 该方法用于附加值组。我们可以附加任何类型的值。这些值附加在当前工作表的底部。考虑以下代码:

from openpyxl import Workbook

wb = Workbook()
sheet = wb.active

data = (
    (11, 48, 50), (81, 30, 82), (20, 51, 72), (21, 14, 60), (28, 41, 49), (74, 65, 53), ("Peter", 'Andrew', 45.63)
)

for i in data:
    sheet.append(i)
wb.save('appending_values.xlsx')

输出如下:

Openpyxl附加值

Openpyxl从单元格读取数据

我们可以读取先前已写入单元格中的数据。有两种读取单元的方法, 首先, 我们可以通过单元名称来访问它, 其次, 我们可以通过cell()函数来访问它。例如, 我们正在从sample_file.xlrs文件读取数据。

import openpyxl

wb = openpyxl.load_workbook('sample_file.xlsx')

sheet = wb.active

x1 = sheet['A1']
x2 = sheet['A2']
#using cell() function
x3 = sheet.cell(row=3, column=1)

print("The first cell value:", x1.value)
print("The second cell value:", x2.value)
print("The third cell value:", x3.value)

输出如下:

The first cell value: 87
The second cell value: Devansh
The third cell value: 41.8

Openpyxl读取多个单元格

我们可以从多个单元格中读取值。在以下示例中, 我们将marks.xlsx命名为excel文件, 并使用范围运算符读取文件的每个单元格。让我们看一下以下程序:

import openpyxl

wb = openpyxl.load_workbook('marks.xlsx')

sheet = wb.active
#
cells = sheet['A1', 'B7']
# cells behave like range operator
for i1, i2 in cells:
    print("{0:8} {1:8}".format(i1.value, i2.value))

输出如下:

Student_name        Marks
Tony Stark           47
Loki                 59
Oddin                73
Nick Fury            62
Samaul               75
Peter Parkar         80

Openpyxl按行迭代

openpyxl提供iter_row()函数, 该函数用于读取与行相对应的数据。考虑以下示例:

from openpyxl import Workbook

wb = Workbook()
sheet = wb.active

rows = (
    (90, 46, 48, 44), (81, 30, 32, 16), (23, 95, 87, 27), (65, 12, 89, 53), (42, 81, 40, 44), (34, 51, 76, 42)
)

for row in rows:
    sheet.append(row)

for row in sheet.iter_rows(min_row=1, min_col=1, max_row=6, max_col=4):
    for cell in row:
        print(cell.value, end=" ")
    print()

book.save('iter_rows.xlsx')

输出如下:

90 46 48 44 
81 30 32 16 
23 95 87 27 
65 12 89 53 
42 81 40 44 
34 51 76 42

Openpyxl按列迭代

openpyxl提供了iter_col()方法, 该方法将工作表中的单元格作为列返回。考虑以下示例:

from openpyxl import Workbook

book = Workbook()
sheet = book.active

rows = (
     (90, 46, 48, 44), (81, 30, 32, 16), (23, 95, 87, 27), (65, 12, 89, 53), (42, 81, 40, 44), (34, 51, 76, 42)
)
for row in rows:
    sheet.append(row)

for row in sheet.iter_cols(min_row=1, min_col=1, max_row=6, max_col=3):
    for cell in row:
        print(cell.value, end=" ")
    print()

book.save('iterbycols.xlsx')

输出如下:

90 81 23 65 42 34 
46 30 95 12 81 51 
48 32 87 89 40 76

Openpyxl工作表

众所周知, 每个工作簿可以有多个工作表。首先, 我们需要在一个工作簿中创建多个工作表, 然后才能使用Python访问这些excel工作表。在下面的示例中, 我们创建了一个包含三页的工作簿:

import openpyxl
wb = openpyxl.load_workbook('dimension_1.xlsx')

#Getting list of all sheet available in workbook
print(wb.get_sheet_names())

# Returning object
active_sheet = wb.active
print(type(active_sheet))

# Title of sheet
sheet = wb.get_sheet_by_name("Monday")
print(sheet.title)

输出如下:

['Sheet', 'Sunday', 'Monday', 'Tuesday', 'Wednesday']
<class 'openpyxl.worksheet.worksheet.Worksheet'>
Monday

它将如下图所示。

Openpyxl工作表

Openpyxl过滤和排序数据

auto_filter属性用于设置过滤和排序条件。考虑以下代码:

from openpyxl import Workbook

wb = Workbook()
sheet = wb.active

sheet['A3'] = 40
sheet['B3'] = 26

row_count = [
    (93, 45), (23, 54), (80, 43), (21, 12), (63, 29), (34, 15), (80, 68), (20, 41)
]

for row in row_count:
    sheet.append(row)

print(sheet.dimensions)

for a1, a2 in sheet[sheet.dimensions]:
    print(a1.value, a2.value)

sheet.auto_filter.add_sort_condition('B2:B8')
sheet.auto_filter.add_filter_column(1, ['40', '26'])

wb.save('dimension_1.xlsx')

输出如下:

A3:B11
40 26
93 45
23 54
80 43
21 12
63 29
34 15
80 68
20 41

Openpyxl合并单元格

我们可以使用merge_cells()方法合并单元格。当我们合并单元格时, 左上角的单元将从工作表中删除。 openpyxl还提供unmerged_cells()方法来取消合并单元格。考虑以下代码:

from openpyxl.styles import Alignment

wb = Workbook()
sheet = wb.active

sheet.merge_cells('A1:B2')

cell = sheet.cell(row=1, column=1)
cell.value = 'Devansh Sharma'
cell.alignment = Alignment(horizontal='center', vertical='center')

wb.save('merging.xlsx')

输出如下:

Openpyxl合并单元格

冻结窗格只是意味着在滚动到工作表的其他部分时冻结工作表的可见区域。这是有用的功能, 我们可以在屏幕上显示第一行或最左列。我们可以通过将单元名称传递给freeze_panes变量来实现。要取消冻结所有窗格, 请将freeze_panes设置为”无”。考虑以下代码:

from openpyxl import Workbook
from openpyxl.styles import Alignment

wb = Workbook()
sheet = wb.active

sheet.freeze_panes = 'A1'

wb.save('freez_cells.xlsx')

输出如下:

运行上面的代码并滚动工作表。

Openpyxl公式

我们可以将公式写入单元格中。这些公式用于在excel文件中执行操作。写入单元格后, 从工作簿中执行它。考虑以下示例:

from openpyxl import Workbook
wb = Workbook()
sheet = wb.active

rows_count = (
    (14, 27), (22, 30), (42, 92), (51, 32), (16, 60), (63, 13)
)

for i in rows_count:
    sheet.append(i)

cell = sheet.cell(row=7, column=3)
cell.value = "=SUM(A1:B6)"
cell.font = cell.font.copy(bold=True)

wb.save('formulas_book.xlsx')

输出如下:

Openpyxl公式

Openpyxl电池逆变器

openpyxl单元反相器用于反转电子表格中单元的行和列。例如, 第3行的值将反转为5列, 第5行的值将反转为第3列(反之亦然)。你可以在以下图像中看到:

Openpyxl电池逆变器
Openpyxl电池逆变器

该程序是在嵌套的for循环的帮助下编写的。首先, 数据结构将x列和y行的单元格写入sheetData [x] [y], 然后将新创建的电子表格在y列和x行的单元格的spreadData [y] [x]中写入。


将图表添加到Excel文件

图表是表示数据的有效方法。使用图表, 它可以直观显示无法测试的数据。图表有多种类型:饼图, 折线图, 条形图等。我们可以使用openpyxl模块在电子表格上绘制图表。

为了在电子表格上构建任何图表, 我们需要定义图表类型, 例如BarChart, LineChart等。我们还导入引用, 该引用表示用于图表的数据。定义我们要在图表上表示的数据非常重要。让我们通过以下示例进行理解:

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference

wb = Workbook()
sheet = wb.active

# Let's create some sample student data
rows = [
    ["Serial_no", "Roll no", "Marks"], [1, "0090011", 75], [2, "0090012", 60], [3, "0090013", 43], [4, "0090014", 97], [5, "0090015", 63], [6, "0090016", 54], [7, "0090017", 86], ]

for i in rows:
    sheet.append(i)

chart = BarChart()
values = Reference(worksheet=sheet, min_row=1, max_row=8, min_col=2, max_col=3)

chart.add_data(values, titles_from_data=True)
sheet.add_chart(chart, "E2")

wb.save("student_chart.xlsx")

输出如下:

Openpyxl将图表添加到Excel文件

在上面的代码中, 我们创建了示例数据并绘制了与示例数据相对应的条形图。

现在, 我们将创建折线图。考虑以下代码:

import random
from openpyxl import Workbook
from openpyxl.chart import LineChart, Reference

wb = Workbook()
spreadsheet = wb.active

# Let's create some sample data
rows = [
    ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], [1, ], [2, ], [3, ], ]

for row in rows:
    spreadsheet.append(row)

for row in spreadsheet.iter_rows(min_row=2, max_row=4, min_col=2, max_col=13):
    for cell in row:
        cell.value = random.randrange(5, 100)

chart = LineChart()
data = Reference(worksheet=spreadsheet, min_row=2, max_row=4, min_col=1, max_col=13)

chart.add_data(data, from_rows=True, titles_from_data=True)
spreadsheet.add_chart(chart, "C6")

wb.save("line_chart1.xlsx")

输出如下:

Openpyxl将图表添加到Excel文件

在上面的代码中, 我们使用from_rows = True作为参数, 它表示图表是逐行而不是逐列。


新增图片

图像通常不在电子表格中使用, 但有时我们可以根据需要使用。我们可以将图像用于品牌宣传或使电子表格更具个性和吸引力。要将图像加载到电子表格, 我们需要通过以下命令安装一个名为枕头的附加模块。

pip install pillow

在以下程序中, 我们将图像导入excel文件。

from openpyxl import load_workbook
from openpyxl.drawing.image import Image

# Let's use the hello_world spreadsheet since it has less data
workbook = load_workbook(filename="student_chart1.xlsx")
sheet = workbook.active

logo = Image(r"C:\Users\DEVANSH SHARMA\Pictures\Screenshots\image.png")

# A bit of resizing to not fill the whole spreadsheet with the logo
logo.height = 150
logo.width = 150

sheet.add_image(logo, "E2")
workbook.save(filename="hello_world_logo1.xlsx")

在本教程中, 我们介绍了openpyxl的所有基本概念和高级概念。


赞(0)
未经允许不得转载:srcmini » 看这一篇就够了!Python Openpyxl完整开发实例分析

评论 抢沙发

评论前必须登录!