使用openpyxl处理表格数据

本文介绍了如何使用Python的openpyxl库来读取、写入Excel文件,包括进行数据计算、设置单元格样式、绘制图表和添加图片。通过示例代码展示了如何在Centos8中安装openpyxl,以及如何读取和写入数据、执行算术运算、合并和取消合并单元格、设置字体样式、绘制条形图和折线图,以及添加图片到工作表。
导读你们都一定在生活中的某个时候使用过 Excel,并且一定觉得需要自动化在本教程中,我们将学习如何使用 Python 处理 Excel 一些重复或乏味的任务。

Openpyxl 是一个 Python 库,它提供了各种使用 Python 与 Excel 文件交互的方法。它允许读、写、算术运算、绘制图形等操作。

Centos8中安装方式如下:

[root@localhost ~]# yum -y install python3-openpyxl

从Excel表格中读取数据

如果要读取 Excel 文件,必须使用 load_workbook() 方法打开电子表格。之后可以使用 active 来选择第一个可用的工作表,并通过传递 row 和 column 参数使用 cell() 属性来选择单元格。value 属性返回特定单元格的值。请参阅下面的示例以获得更好的理解。

注意:第一行或第一列整数是 1,而不是 0。

下面的数据可以保存在excel表格文件中,用来做下面的实验,文件名称为wb.xlsx

NameCourseBranchSemester
AnkitB.TechCSE4
RahulM.TechCSE2
PriyaMBAHR3
NikhilB.TechCSE4
NishaB.TechBiotech5

[root@localhost data]# python3

# 导入openpyxl库
>>> import openpyxl
# path变量指定表格文件的位置
>>> path = "/data/wb.xlsx"
# 加载表格文件
>>> wb_obj = openpyxl.load_workbook(path)
# 激活默认的工作表
>>> sheet_obj = wb_obj.active
# 选择第一行第一列的单元格,也就是A1单元格
>>> cell_obj = sheet_obj.cell(row = 1, column = 1)
# 打印单元格所属位置
>>> print(cell_obj)
<cell 'Sheet1'.A1>
# 打印A1单元格的值
>>> print(cell_obj.value)
Name

使用openpyxl处理表格数据使用openpyxl处理表格数据

从多个单元格读取数据

从多个单元格中读取数据的方式有两种。

方法一:我们可以分别使用 max_row 和 max_column 获得总行数和总列数。我们可以在 for 循环中使用这些值来根据情况获取所需行或列或任何单元格的值。让我们看看如何获取第一列和第一行的值。

# 使用max_row获取工作表有多少行的数据
>>> row = sheet_obj.max_row
# 使用max_column获取工作表有多少列的数据
>>> column = sheet_obj.max_column
# 打印行数
>>> print("Total Rows: ", row)
Total Rows:  6
# 打印列数
>>> print("Total Cols: ", column)
Total Cols:  4

# 使用for循环打印第一列数据
>>> for i in range(1, row + 1):
...   cell_obj = sheet_obj.cell(row = i, column = 1)
...   print(cell_obj.value)
... 
Name
Ankit
Rahul
Priya
Nikhil
Nisha

# 使用for循环打印第二条数据:
>>> for i in range(1, column + 1):
...   cell_obj = sheet_obj.cell(row = 3, column = i)
...   print(cell_obj.value, end = " ")
... 
Rahul M.Tech CSE 2 

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据


方法二:我们还可以使用单元格名称从多个单元格中读取。这可以看作是Python的列表切片。

# 选中A1到B6的单元格
>>> cell_obj = sheet_obj['A1':'B6']
>>> 
# for玄幻打印两列的数据
>>> for cell1, cell2 in cell_obj:
...   print(cell1.value, cell2.value)
... 
Name Course
Ankit B.Tech
Rahul M.Tech
Priya MBA
Nikhil B.Tech
Nisha B.Tech

使用openpyxl处理表格数据使用openpyxl处理表格数据

写入表格数据

首先,让我们创建一个新的表格,然后我们将一些数据写入新创建的文件。可以使用 Workbook() 方法创建一个空的表格。让我们看看下面的例子。

[root@localhost data]# python3

# 导入openpyxl库里面的Workbook
>>> from openpyxl import Workbook
>>> 
# 创建空的工作簿
>>> workbook = Workbook()
>>> 
# 保存文件
>>> workbook.save(filename="/data/sample.xlsx")
>>> 

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据


创建一个空文件后,让我们看看如何使用 Python 向其中添加一些数据。要首先添加数据,我们需要选择活动工作表,然后使用 cell() 方法,我们可以通过传递行号和列号作为其参数来选择任何特定的单元格。我们也可以使用单元格名称进行书写。

# 获取激活的工作表
>>> sheet = workbook.active
>>> 
# 为A1添加Hello值
>>> c1 = sheet.cell(row = 1, column = 1, value = 'Hello')
# 为B1添加World值
>>> C2 = sheet.cell(row = 1, column = 2, value = 'World')
>>> 
# 为A2添加Welcome值
>>> C3  = sheet['A2'].value = 'Welcome'
# 为B2添加Everyone值
>>> C4 = sheet['B2'].value = 'Everyone'
>>> 
# 保存到文件
>>> workbook.save("/data/sample.xlsx")

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据

附加数据到表格

在上面的示例中,您将看到每次尝试写入表格时,现有数据都会被覆盖,并且该文件将另存为新文件。发生这种情况是因为 Workbook() 方法总是创建一个新的工作簿文件对象。要写入现有工作簿,必须使用 load_workbook() 方法打开文件。

[root@localhost data]# python3

>>> import openpyxl
>>> 
# 使用load_workbook加载文件
>>> wb = openpyxl.load_workbook("/data/sample.xlsx")
>>> 
>>> sheet = wb.active
>>> 
>>> c = sheet['A3']
>>> 
>>> c.value = 'New Data'
>>> 
>>> wb.save("/data/sample.xlsx")

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据


我们还可以使用 append() 方法在工作表的末尾附加多个数据。

# 定义数据
>>> data = (
... (1,2,3),
... (4,5,6)
... )
>>> 
# 使用for循环将内容附加到工作表中
>>> for row in data:
...   sheet.append(row)
... 
>>> wb.save('/data/sample.xlsx')

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据

Excel表格的算术运算

可以通过在电子表格的特定单元格中键入公式来执行算术运算。例如,如果我们想求和,则使用 Excel 文件的 =Sum() 公式。

[root@localhost data]# python3

>>> import openpyxl
>>> 
# 创建新工作簿
>>> wb = openpyxl.Workbook()
>>> 
>>> sheet = wb.active
>>> 
# 在单元格中写入数据
>>> sheet['A1'] = 200
>>> sheet['A2'] = 300
>>> sheet['A3'] = 400
>>> sheet['A4'] = 500
>>> sheet['A5'] = 619

# 在A7单元格求和
>>> sheet['A7'] = '=SUM(A1:A5)'
>>> 
# 保存文件名称为sum.xlsx
>>> wb.save('/data/sum.xlsx')

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据

调整单元格的行和列

工作表对象具有控制行高和列宽的 row_dimensions 和 column_dimensions 属性。工作表的 row_dimensions 和 column_dimensions 是类似字典的值;row_dimensions 包含 RowDimension 对象, column_dimensions 包含 ColumnDimension 对象。在 row_dimensions 中,可以使用行号(在本例中为 1 或 2)访问其中一个对象。在 column_dimensions中,可以使用列的字母(在本例中为 A 或 B)访问其中一个对象。

[root@localhost data]# python3

# 导入模块
>>> import openpyxl
>>> 
# 创建新工作簿
>>> wb = openpyxl.Workbook()
>>> 
>>> sheet = wb.active
>>> 
# 向A1单元格写入数据
>>> sheet.cell(row = 1, column = 1, value = ' Hello ')
<cell 'Sheet'.A1>
# 向B2单元格写入数据
>>> sheet['B2'].value = ' Everyone '
>>> 
# 设置第一行单元格高度为45
>>> sheet.row_dimensions[1].height = 45
>>> 
# 设置B列单元格宽度为70
>>> sheet.column_dimensions['B'].width = 70
>>> 
>>> wb.save('/data/h_and_w.xlsx')

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据

合并单元格

可以使用 merge_cells() 方法将多个单元格合并为单个单元格。

[root@localhost data]# python3

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

# 合并A2到D4单元格,并添加数据
>>> sheet.merge_cells('A2:D4')
>>> sheet['A2'].value = 'Twelve cells join together.'
>>> 
# 合并C6到D6单元格,并添加数据
>>> sheet.merge_cells('C6:D6')
>>> sheet['C6'].value = 'Two merge cells.'
>>> 
>>> wb.save('/data/merge_cells.xlsx')

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据

取消合并单元格

如要取消合并单元格,请用 unmerge_cells() 方法。

# 取消合并A2到D4单元格
>>> sheet.unmerge_cells('A2:D4')
>>> 
# 取消合并C6到D6单元格
>>> sheet.unmerge_cells('C6:D6')
>>> 
>>> wb.save('/data/merge_cells.xlsx')

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据

设置字体样式

要自定义单元格中的字体样式,重点是从 openpyxl.styles 模块导入 Font() 函数。

[root@localhost data]# python3

>>> import openpyxl
# 从openpyxl.styles导入Font函数
>>> from openpyxl.styles import Font
>>> 
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>> 
# 为A1单元格添加内容,并设置字体大小为24
>>> sheet['A1'].value = 'Linuxprobe.com'
>>> sheet['A1'].font = Font(size = 24)

# B2单元格添加内容,设置字体大小24,斜体
>>> sheet.cell(row = 2, column = 2, value = "Linuxprobe.com").font = Font(size = 24, italic = True)

# C3单元格添加内容,设置字体大小24,粗体
>>> sheet.cell(row = 3, column = 3, value ="Linuxprobe.com").font = Font(size = 24, bold = True)

# D4单元格添加内容,设置字体大小24,设置字体样式
>>> sheet.cell(row = 4, column = 4, value = "Linuxprobe.com").font = Font(size = 24, name = 'Times New Roman')
>>> wb.save('/data/font_styles.xlsx')

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据

绘制图表

要在 Excel 表格上绘制图表,首先要创建特定图表类(即 BarChart、LineChart 等)的图表对象。创建图表对象后,在其中插入数据,最后将该图表对象添加到工作表中。

[root@localhost data]# python3

>>> import openpyxl
# 导入图表库
>>> from openpyxl.chart import BarChart, Reference
>>>
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>> 
# 使用循环为工作表附加内容
>>> for i in range(10):
...   sheet.append([i])
... 
# 为图表创建数据
>>> values = Reference(sheet, min_col=1,min_row=1,max_col=1,max_row=10)
#创建图表实例
>>> chart = BarChart()
# 向条形图添加数据
>>> chart.add_data(values)
# 添加图表标题
>>> chart.title = " BAR-CHART "
# 添加X坐标标题
>>> chart.x_axis.title = " X_AXIS "
# 添加Y坐标标题
>>> chart.y_axis.title = " Y_AXIS "
>>> 
# 工作表的E2单元格添加图表
>>> sheet.add_chart(chart, 'E2')
>>> 
>>> wb.save("/data/charts.xlsx")

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据


下面实例,是添加折线图:

[root@localhost data]# python3

>>> import openpyxl
# 导入图表库
>>> from openpyxl.chart import LineChart, Reference
>>>
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>> 
# 使用循环为工作表附加内容
>>> for i in range(10):
...   sheet.append([i])
... 
# 为图表创建数据
>>> values = Reference(sheet, min_col=1,min_row=1,max_col=1,max_row=10)
#创建图表实例
>>> chart = LineChart()
# 向折现图添加数据
>>> chart.add_data(values)
# 添加图表标题
>>> chart.title = " LINE-CHART "
# 添加X坐标标题
>>> chart.x_axis.title = " X_AXIS "
# 添加Y坐标标题
>>> chart.y_axis.title = " Y_AXIS "
>>> 
# 工作表的E2单元格添加图表
>>> sheet.add_chart(chart, 'E2')
>>> 
>>> wb.save("/data/charts.xlsx")

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据

添加图片

为了在我们的工作表中导入图像,我们将使用 openpyxl.drawing.image.Image。该方法是在pillow库中找到的 PIL.Image 方法。因此,必须安装 python3-pillow库才能使用此方法。

[root@localhost data]# yum -y install python3-pillow
[root@localhost data]# python3

>>> import openpyxl
# 导入Image函数
>>> from openpyxl.drawing.image import Image
>>>
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>>
# 向工作表第一行添加内容
>>> sheet.append(["abc",10,"def",20])
# 添加图片
>>> img = Image("/data/banner1.jpg")
>>> 
>>> sheet.add_image(img, 'A2')
>>> 
>>> wb.save("/data/images.xlsx")

使用openpyxl处理表格数据使用openpyxl处理表格数据

使用openpyxl处理表格数据使用openpyxl处理表格数据

总结

本文讲述了如何使用Python和openpyxl库读取和写入Excel表格数据、计算、单元格设置、绘制图表和添加突变等操作。

<think>好的,我现在需要帮用户解决如何使用Openpyxl读取Excel表格数据的问题。用户之前可能已经了解了一些关于Openpyxl的基础知识,但需要具体的步骤和示例。首先,我得回忆一下Openpyxl的基本用法,确保步骤正确。 首先,用户可能需要安装Openpyxl库。虽然用户可能已经安装,但作为教程的一部分,应该先提到安装方法。可以用pip install openpyxl来安装,这个步骤很基础,但必不可少。 接下来,读取Excel文件通常需要先导入库,然后加载工作簿。这里需要注意的是,用户可能需要处理不同的Excel版本,比如.xlsx和.xls。但Openpyxl只能处理.xlsx,所以应该提醒用户确认文件格式是否正确。 然后,用户需要选择具体的工作表。可以通过名称或者索引来获取工作表对象。例如,workbook['Sheet1']或者workbook.worksheets[0]。这部分需要给出示例代码,方便用户直接复制使用。 读取单元格数据是重点。要说明如何通过cell()方法指定行和列,或者像sheet['A1']这样的方式。另外,用户可能想遍历多行数据,特别是处理大量数据的时候,所以需要展示如何用循环来读取行和列的值。 另外,用户可能对读取整个表格数据感兴趣,比如转换为列表或字典。比如使用列表推导式来获取所有行的数据,或者结合表头生成字典,这样方便后续的数据处理。这部分需要给出具体的代码示例,让用户能够直接应用。 还需要注意异常处理,比如文件不存在或者工作表名称错误的情况。虽然用户可能暂时不需要,但作为最佳实践,可以建议使用try-except块来捕获异常,避免程序崩溃。 最后,可能需要提到一些高级功能,比如读取公式的结果,或者处理日期格式的数据,但根据用户的问题,可能暂时不需要深入,但可以简要提及作为扩展知识。 在整理步骤时,要确保代码示例正确,符合Python语法,并且注释清晰。同时,参考之前的引用内容,用户提到Openpyxl处理中文没有问题,所以可以强调这一点,避免用户担心编码问题。 总结一下,回答的结构应该是:安装库、加载工作簿、选择工作表、读取单元格数据、遍历多行数据、转换为数据结构,最后注意事项。每个步骤都提供代码示例,并解释关键点,比如行和列的索引从1开始,以及如何有效遍历数据。 还需要检查是否有遗漏的部分,比如关闭文件的问题。不过,Openpyxl使用load_workbook后通常不需要显式关闭,因为它在读取后会自动处理。但如果是写入操作,则需要保存并关闭,但这里用户只是读取,所以可能不需要提到。 最后,生成的相关问题需要和读取Excel数据相关,比如如何处理大文件、写入数据或者设置单元格样式,这些都可以作为扩展问题,帮助用户进一步学习。</think>以下是如何使用Openpyxl读取Excel表格数据的步骤详解: --- ### 一、安装与导入库 1. **安装Openpyxl** 若未安装,需先执行命令: ```bash pip install openpyxl ``` 2. **导入库** ```python from openpyxl import load_workbook ``` --- ### 二、加载Excel文件 ```python # 加载工作簿(文件需与脚本同目录,否则需写完整路径) workbook = load_workbook(filename='test.xlsx') # 支持.xlsx格式 ``` --- ### 三、选择工作表 1. **通过名称选择** ```python sheet = workbook['Sheet1'] # 工作表名称需与Excel内一致 ``` 2. **通过索引选择** ```python sheet = workbook.worksheets[0] # 索引从0开始 ``` --- ### 四、读取单元格数据 1. **单单元格读取** ```python # 方法1:行号列号从1开始 cell_value = sheet.cell(row=1, column=1).value # 方法2:直接通过坐标(如A1) cell_value = sheet['A1'].value ``` 2. **多行遍历** ```python # 遍历前5行前3列数据 for row in sheet.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3): row_data = [cell.value for cell in row] print(row_data) ``` --- ### 五、读取表格数据结构 1. **转换为列表** ```python all_data = [] for row in sheet.iter_rows(values_only=True): # 直接获取值,跳过Cell对象 all_data.append(list(row)) ``` 2. **转换为字典(表头为键)** ```python headers = [cell.value for cell in sheet[1]] # 假设第一行为表头 data_dicts = [] for row in sheet.iter_rows(min_row=2, values_only=True): data_dicts.append(dict(zip(headers, row))) ``` --- ### 六、完整示例 ```python from openpyxl import load_workbook # 1. 加载文件 workbook = load_workbook('test.xlsx') sheet = workbook['Sheet1'] # 2. 读取A1单元格 print("A1单元格内容:", sheet['A1'].value) # 3. 遍历前3行数据 print("\n前3行数据:") for row in sheet.iter_rows(min_row=1, max_row=3, values_only=True): print(row) # 4. 转换为字典列表 headers = [cell.value for cell in sheet[1]] data = [] for row in sheet.iter_rows(min_row=2, values_only=True): data.append(dict(zip(headers, row))) print("\n字典格式数据:", data) ``` --- ### 注意事项 1. **行号列号从1开始** Openpyxl的索引与Excel界面一致,而非Python的0起始[^3]。 2. **大文件优化** 若文件较大,可设置`read_only=True`提升性能: ```python workbook = load_workbook('large_file.xlsx', read_only=True) ``` 3. **公式计算值** 默认读取公式本身,若需结果,
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值