Python使用openpyxl自动化实现Excel排版与读写

更新时间:2026-10-10 10:00:01 来源:本站整理 浏览:0

核心概念理解

在使用openpyxl时,必须掌握三个核心概念,它们的层级关系如下:

  • Workbook(工作簿):代表整个Excel文件。
  • Worksheet(工作表):代表Excel文件中的一个Sheet页。
  • Cell(单元格):代表Sheet页中的某一个小格子(如A1、B2)。

操作Excel的基本流程:打开Workbook → 选择Worksheet → 操作Cell → 保存Workbook。

读取与修改已有Excel文件

假设我们有一个名为 data.xlsx 的文件,里面有一张“成绩表”。

import openpyxl

# 1. 加载已存在的Excel文件
wb = openpyxl.load_workbook("data.xlsx")

# 2. 获取工作表
# 获取所有sheet的名字: print(wb.sheetnames)
sheet = wb["成绩表"]

# 3. 读取单元格的值
cell_val = sheet["B2"].value
print(f"B2单元格的值是: {cell_val}")

# 4. 修改单元格的值
sheet["C2"] = 98

# 5. 遍历多行数据
for row in sheet.iter_rows(min_row=2, max_row=5, min_col=1, max_col=3, values_only=True):
    print(row)  # 输出每一行的数据元组

# 6. 保存修改(注意:如果在打开状态下保存会报错,请先关闭Excel软件)
wb.save("data_modified.xlsx")

单元格格式大改造

给领导看的报表,格式必须清晰美观。openpyxl提供了 styles 模块来处理格式。

设置字体(Font)

from openpyxl.styles import Font

# 设置字体为微软雅黑,大小14,加粗,红色
custom_font = Font(name="微软雅黑", size=14, bold=True, color="FF0000")
sheet["A1"].font = custom_font

设置对齐方式(Alignment)

from openpyxl.styles import Alignment

# 设置水平居中、垂直居中
align = Alignment(horizontal="center", vertical="center")
sheet["A1"].alignment = align

设置背景填充色(PatternFill)

from openpyxl.styles import PatternFill

# 设置背景色为纯色填充,黄色(Hex颜色代码)
fill = PatternFill(fill_type="solid", start_color="FFFF00")
sheet["A1"].fill = fill

设置边框(Border)

from openpyxl.styles import Border, Side

# 定义细边框线条
thin_line = Side(border_style="thin", color="000000")

# 设置上下左右四个边框
border = Border(left=thin_line, right=thin_line, top=thin_line, bottom=thin_line)
sheet["A1"].border = border

调整行高与列宽

有时候数据太长显示为 ###,我们需要用代码自动调整宽高:

# 设置第一行的行高为 30
sheet.row_dimensions[1].height = 30

# 设置A列的列宽为 20
sheet.column_dimensions["A"].width = 20

小结

这节课我们掌握了 openpyxl 的核心技能,从文件的加载、数据的读写,到字体、对齐、背景、边框的全面美化。利用这些功能,你已经可以写出一个自动给日报/周报排版格式的脚本了。

但如果你有10万条数据需要筛选、统计,openpyxl的速度可能会有点慢。下一节课,我们将引入真正的数据处理大杀器 —— pandas!敬请期待。

原文链接:本站整理

本文来自互联网用户投稿,该文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 service@2cto.cc 进行投诉反馈,一经查实,立即处理!