社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

完全掌握 openpyxl:Python 自动化处理 Excel 文件的终极教程

A逍遥之路 • 4 天前 • 39 次点击  

在现代工作中,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=Truecolor="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知识日日补!






           对Python,AI,自动化办公提效,副业发展等感兴趣的伙伴们,扫码添加逍遥,限免交流群

备注【成长交流】

图片

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/182353
 
39 次点击