在现代工作中,Excel 是最常用的数据处理工具之一,而如果你每次都需要手动整理、排序或格式化数据,必然会浪费大量时间。今天,我将带你深入学习 Python 中一个非常强大的库——openpyxl
,它专门用于处理 Excel 文件(.xlsx
格式)。掌握了 openpyxl
,你将能够自动化各种 Excel 任务,提高工作效率。
在这篇教程中,我们不仅会介绍 openpyxl
库的基础功能,还将通过代码示例,深入讲解如何使用它完成实际任务,如读取数据、格式化表格、合并单元格处理、插入图表等。
1. 安装 openpyxl
在使用 openpyxl
前,首先需要安装它。你可以通过以下命令来安装:
pip install openpyxl
2. 打开 Excel 文件和读取数据
打开一个现有的 Excel 文件并读取其中的数据是 openpyxl
最基础的操作之一。让我们首先看一下如何打开一个文件并读取特定的单元格内容。
import openpyxl
# 打开 Excel 文件
workbook=openpyxl.load_workbook('example.xlsx')
# 选择活跃的工作表
sheet=
workbook.active
# 读取 A1 单元格的内容
cell_value=sheet['A1'].value
print(f"Cell A1 value: {cell_value}")
在这段代码中:
load_workbook()
用来打开一个现有的 Excel 文件。
workbook.active
选择活动的工作表(默认情况下是第一个工作表)。
通过 sheet['A1']
获取 A1
单元格的内容。
3. 写入数据到 Excel 文件
除了读取数据,我们还可以将数据写入到 Excel 文件中的特定单元格。
import openpyxl
# 打开现有的 Excel 文件
workbook=openpyxl.load_workbook('example.xlsx')
sheet=workbook.active
# 向 A2 单元格写入数据
sheet['A2'] ="Hello, Excel!"
# 保存文件
workbook.save('example.xlsx')
这里,我们将 "Hello, Excel!"
写入到 A2
单元格,并保存修改后的 Excel 文件。
4. 合并和拆分单元格
在 Excel 中,经常会使用合并单元格来增强表格的可读性,openpyxl
同样支持合并和拆分单元格。
合并单元格:
import openpyxl
# 打开工作簿
workbook=openpyxl.load_workbook('example.xlsx')
sheet=workbook.active
# 合并 A1 和 B1 单元格
sheet.merge_cells('A1:B1')
# 设置合并后单元格的值
sheet['A1'] ="Merged Cells!"
# 保存修改
workbook.save('example.xlsx')
拆分单元格:
openpyxl
不支持直接拆分合并单元格,但可以通过取消合并来实现类似拆分的效果:
import
openpyxl
# 打开工作簿
workbook=openpyxl.load_workbook('example.xlsx')
sheet=workbook.active
# 取消 A1 和 B1 的合并
sheet.unmerge_cells('A1:B1')
# 保存修改
workbook.save('example.xlsx')
5. 设置单元格格式(字体、颜色、对齐)
openpyxl
提供了丰富的功能来设置单元格的样式。例如,你可以改变字体、背景色、对齐方式等。
设置字体样式:
from openpyxl.styles import Font
# 打开工作簿
workbook=openpyxl.load_workbook('example.xlsx')
sheet=workbook.active
# 设置 A1 单元格的字体为粗体、红色
sheet['A1'].font=Font(bold=True, color="FF0000")
# 保存文件
workbook.save
('example.xlsx')
设置单元格背景颜色:
from openpyxl.styles import PatternFill
# 打开工作簿
workbook=openpyxl.load_workbook('example.xlsx')
sheet=workbook.active
# 设置 A1 单元格的背景色为黄色
yellow_fill=PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
sheet['A1'].fill=yellow_fill
# 保存文件
workbook.save('example.xlsx')
设置单元格对齐:
from openpyxl.styles import Alignment
# 打开工作簿
workbook=openpyxl.load_workbook('example.xlsx')
sheet=workbook.
active
# 设置 A1 单元格的内容居中对齐
sheet['A1'].alignment=Alignment(horizontal="center", vertical="center")
# 保存文件
workbook.save('example.xlsx')
6. 批量处理数据:遍历所有单元格
如果你想批量处理 Excel 中的数据,可以使用 openpyxl
提供的 iter_rows()
和 iter_cols()
方法,这两个方法可以用来遍历行或列中的单元格。
import openpyxl
# 打开工作簿
workbook = openpyxl.load_workbook('example.xlsx')
sheet = workbook.active
# 遍历所有行和列,打印每个单元格的值
for row in sheet.iter_rows(min_row=1, max_row=sheet.max_row, min_col=1, max_col=sheet.max_column):
for cell in row:
print(cell.value)
在这个示例中,我们使用 iter_rows()
方法遍历工作表中的每一行。你也可以使用 iter_cols()
来遍历列。
7. 处理合并单元格排序
如果你在处理含有合并单元格的数据时需要排序,openpyxl
提供了灵活的接口来检测和处理合并单元格。
import openpyxl
def num_sort(sheet, col, start_row=1, start_num=1):
merged_ranges = sheet.merged_cells.ranges # 获取合并单元格的范围
current_value = start_num # 初始编号
current_row = start_row # 起始行
col_index = openpyxl.utils.column_index_from_string(col) # 获取列的索引
while current_row <= sheet.max_row:
is_merged = False # 是否是合并单元格
merged_height = 1 # 默认为单一单元格
for merged in merged_ranges:
if (merged.min_col <= col_index <= merged.max_col and
merged.min_row <= current_row <= merged.max_row):
is_merged = True
merged_height = merged.max_row - merged.min_row + 1 # 获取合并单元格的高度
break
# 如果是合并单元格
if is_merged:
if current_row == merged.min_row:
sheet[f"{col}{current_row}"].value = current_value # 在合并单元格的首行填入值
current_value += 1
current_row += merged_height # 跳过合并单元格的所有行
else:
sheet[f"{col}{current_row}"].value = current_value # 在当前行填入编号
current_value += 1
current_row += 1 # 下一行
if __name__ == '__main__':
workbook = openpyxl.load_workbook('example.xlsx')
sheet = workbook.active
num_sort(sheet, 'A') # 在 A 列进行编号
workbook.save('example.xlsx')
总结:
通过 openpyxl
库,你可以高效地自动化 Excel 文件的读取、写入、排序、格式化以及合并单元格的处理。掌握这些功能后,你将能极大提高数据处理的效率,减少手动操作的错误。如果你是数据分析师、报表工程师或其他需要频繁操作 Excel 文件的职场人士,openpyxl
无疑是一个必备的强大工具。
希望这篇教程能帮助你轻松上手 openpyxl
,让你的工作更高效!
对Python,AI,自动化办公提效,副业发展等感兴趣的伙伴们,扫码添加逍遥,限免交流群
备注【成长交流】