如何使用 Python 和 openpyxl 在 Excel 中创建图表?


在这篇文章中,我将向您展示如何使用 Python - Openpyxl 模块在 Excel 中创建图表。我们将从头开始创建一个 Excel 电子表格,其中使用网球运动员的大满贯冠军作为数据,使用 openpyxl 模块创建条形图。

介绍..

Microsoft Office 从 Office 2007 开始为 Microsoft Excel 电子表格提供了一个新的扩展名 .xlsx,以支持存储更多行和列。此更改已将 Excel 电子表格迁移到基于 XML 的文件格式并使用 ZIP 压缩。Microsoft 电子表格统治着世界,人们一直将电子表格用于各种目的,其中一个用例是用于数据可视化。

准备就绪..

Python 的 xlrd 模块是 Openpyxl 模块的替代方案,在支持 Excel 格式方面一直表现良好,但是此模块只能对 Excel 电子表格执行读取操作。openpyxl 模块可以对 Excel 电子表格执行读写操作。

如何操作..

1). 让我们首先使用以下命令安装 openpyxl 模块

pip install openpyxl.

2). 定义用于创建新 Excel 电子表格的数据。

# import the module
import openpyxl

# Define your file name and data
file_name = "charts.xlsx"
file_data = (['player', 'titles'], ['Federer', 20], ['Nadal', 20], ['Djokovic', 17], ['Murray', 3])

3). 创建一个新的 Excel 文件。这将创建一个默认工作表,名为 Sheet

xlsxfile = openpyxl.Workbook()
print(f" *** The sheets inside the excel_file are = {xlsxfile.sheetnames}")
new_workbook = xlsxfile['Sheet']


*** The sheets inside the excel_file are = ['Sheet']

4). 将有关网球运动员及其大满贯冠军的数据添加到此工作表中。

for row, (player,titles) in enumerate(file_data, 1):
new_workbook['A{}'.format(row)].value = player
new_workbook['B{}'.format(row)].value = titles

5). 最后将数据保存到 file_name 文件中

xlsxfile.save(file_name)

6). 将文件加载到内存中并列出所有工作表。请注意,我们仅在步骤 2 中创建了一个工作表。

import openpyxl
excel_file_data = openpyxl.load_workbook(file_name)
excel_file_data.sheetnames


['Sheet']

7). 获取第一个工作表并获取单元格的值,例如 A2 和 B2。

sheet_values = excel_file_data['Sheet']
print(f" *** One of the value from the sheet is - {sheet_values['A2'].value} - {sheet_values['B2'].value}")


*** One of the value from the sheet is - Federer - 20

8). 输出电子表格中的所有行和列,只是为了确保我们已正确插入图表数据。

for row in sheet_values:
for cell in row:
print(cell.value)


player
titles
Federer
20
Nadal
20
Djokovic
17
Murray
3

9). 从 openpyxl.chart 中导入 BarChart、Reference 模块并创建 Barchart 对象。

from openpyxl.chart import BarChart, Reference
chart = BarChart()


#10.
# Fill the basic information like chart title,..

chart.title = "Players & Grand Slams"
chart.y_axis.title = 'Titles'
chart.x_axis.title = 'Tennis Players'


#11.
# Now we will create a reference to the data and append the data to the chart.

data = Reference(sheet_values, min_row=2, max_row=5, min_col=1, max_col=2)
chart.add_data(data, from_rows=True, titles_from_data=True)


#12.
# Finally, Add the chart to the sheet and save the file.

new_workbook.add_chart(chart, "A6")
xlsxfile.save(file_name)

步骤 11 通过 Reference 对象创建一个参考框,从第 2 行第 1 列到第 5 行第 2 列,这是我们的数据所在区域,当然不包括标题。

使用 .add_data() 方法将数据添加到图表中。**from_rows** - 使每一行成为不同的数据系列。**titles_from_data** - 使用第一列为系列命名。

示例

我们将把上面解释的所有内容放在一起。

"""
Program: Create charts in excel using Python with openpyxl params: NA
output: Creates a chart.xlsx file with tennis players grandslam titles and a barchart representation of the data
"""
# import the module
import openpyxl
# Define your file name and data
file_name = "charts.xlsx"
file_data = ([ 'player' , 'titles' ], [ 'Federer' , 20 ], [ 'Nadal' , 20 ], [ 'Djokovic' , 17 ], [ 'Murray' , 3 ])
# create an excel spreadsheet
xlsxfile = openpyxl . Workbook ()
print ( f " *** The sheets inside the excel_file are = { xlsxfile . sheetnames } " )
new_workbook = xlsxfile [ 'Sheet' ]
for row , ( player , titles ) in enumerate ( file_data , 1 ):
new_workbook [ 'A {} ' . format ( row )] . value = player
new_workbook [ 'B {} ' . format ( row )] . value = titles
# save the spreadsheet
xlsxfile .save ( file_name )
# read the data
 excel_file_data = openpyxl . load_workbook ( file_name )
excel_file_data . sheetnames

sheet_values = excel_file_data [ 'Sheet' ]
print ( f " *** One of the value from the sheet is - { sheet_values [ 'A2' ] . value } - { sheet_values [ 'B2' ] . value } " )
for row in sheet_values :
for cell in row :
print ( cell . value ) # barchart creation from openpyxl.chart
import BarChart , Reference chart = BarChart ()
# Fill the basic information like chart title,..
chart . title = "Players & Grand Slams"
 chart . y_axis . title = 'Titles'
chart . x_axis . title = 'Tennis Players'
# Now we will create a reference to the data and append the data to the chart.
data = Reference ( sheet_values , min_row = 2 , max_row = 5 , min_col = 1 , max_col = 2 )
chart .
 add_data ( data , from_rows = True , titles_from_data = True )
# Finally, Add the chart to the sheet and save the file.
new_workbook . add_chart ( chart , "A6" )
 xlsxfile . save ( file_name )
*** The sheets inside the excel_file are = ['Sheet']
*** One of the value from the sheet is - Federer - 20
player
titles
Federer
20
Nadal
20
Djokovic
17
Murray
3

输出

执行上述程序时,将在与代码相同的目录中创建 charts.xlsx,如下所示。

更新于: 2020年11月10日

2K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告