Python办公自动化教程 - 第6章 高级应用 - 解锁更多可能性
第6章 高级应用 - 解锁更多可能性
6.1 本章学习目标
通过本章学习,你将掌握:
- 图片插入:在Excel中插入图片并调整大小位置
- 超链接与批注:添加可点击链接和单元格说明
- 数据验证:创建下拉列表和输入限制
- 筛选与排序:添加自动筛选和数据排序功能
- 打印设置:配置页面布局、页眉页脚和打印区域
6.2 为什么要学习高级功能?
🌟 生活类比:你已经学会了开车(基础操作),现在要学习在高速公路上超车、夜间驾驶、应对恶劣天气(高级技巧)。这些技能让你在复杂场景下游刃有余。
openpyxl高级功能的优势:
- 处理复杂数据:数据透视表、筛选、排序
- 丰富文档内容:插入图片、超链接、批注
- 自动化处理:批量操作、模板生成
- 数据验证:限制输入、下拉列表
6.3 高级功能概览
6.4 实例1:图片插入与处理 🖼️
📁 代码路径: openpyxl-tutorial/chapter_06_advanced/insert_images.py
📝 场景:学习如何在Excel中插入图片,并调整图片的大小和位置
📝 开发思路:
- 创建工作簿并填充数据
- 插入本地图片
- 调整图片大小和位置
- 保存文件
# -*- coding: utf-8 -*-
"""
================================================================================
第6章/图片插入与处理
================================================================================
开发思路:
1. 创建工作簿并填充数据
2. 插入本地图片
3. 调整图片大小和位置
4. 保存文件
================================================================================
"""
# 从openpyxl导入Workbook类
from openpyxl import Workbook
# 导入图片处理类
from openpyxl.drawing.image import Image as XLImage
# 导入样式相关类
from openpyxl.styles import Font, PatternFill, Alignment
# 导入os模块处理文件路径
import os
def insert_images_demo():
"""
演示图片插入功能
注意:需要安装PIL库(pillow)来处理图片
pip install pillow
"""
wb = Workbook()
ws = wb.active
ws.title = "图片插入演示"
# ==================== 1. 填充数据 ====================
ws['A1'] = '产品展示'
ws['A1'].font = Font(size=16, bold=True)
ws['A3'] = '产品名称:'
ws['B3'] = '智能手表 Pro'
ws['A4'] = '产品价格:'
ws['B4'] = '¥2,999'
ws['A5'] = '产品描述:'
ws['B5'] = '高端智能手表,支持心率监测、GPS定位'
# ==================== 2. 使用同目录下的logo.png图片 ====================
# 获取脚本所在目录
script_dir = os.path.dirname(__file__)
# 构建logo.png的完整路径
img_path = os.path.join(script_dir, "logo.png")
# 检查图片是否存在
if not os.path.exists(img_path):
print(f"警告: 未找到图片文件: {img_path}")
print("请确保logo.png文件与脚本在同一目录下")
img_path = None
# ==================== 3. 插入图片 ====================
if img_path and os.path.exists(img_path):
# 创建图片对象
img = XLImage(img_path)
# 使用原图片的宽高比,只设置最大宽度,高度按比例缩放
max_width = 200
# 计算缩放比例,保持宽高比
scale = max_width / img.width
img.width = max_width
img.height = int(img.height * scale)
# 插入图片到指定单元格
ws.add_image(img, 'D3')
print(f"图片已插入到单元格 D3,尺寸: {img.width} x {img.height}")
# ==================== 4. 添加使用说明 ====================
ws['A8'] = '图片插入说明:'
ws['A8'].font = Font(bold=True)
ws['A9'] = '1. 使用 from openpyxl.drawing.image import Image'
ws['A10'] = '2. 创建图片对象: img = Image(图片路径)'
ws['A11'] = '3. 调整大小: img.width = 200'
ws['A12'] = '4. 插入图片: ws.add_image(img, "D3")'
ws['A13'] = '注意:需要安装 pillow 库: pip install pillow'
# ==================== 5. 保存文件 ====================
output_dir = os.path.join(os.path.dirname(__file__), "output")
os.makedirs(output_dir, exist_ok=True)
file_path = os.path.join(output_dir, "图片插入演示.xlsx")
wb.save(file_path)
print("=" * 60)
print("图片插入演示文件创建成功!")
print("=" * 60)
print(f"文件路径: {file_path}")
wb.close()
return file_path
# 如果这个脚本被直接运行(不是被导入),则执行以下代码
if __name__ == "__main__":
insert_images_demo()
📊 知识图谱
📊 代码执行时序图
🖨️ 代码运行效果
运行上述代码后,会生成一个名为 图片插入演示.xlsx 的Excel文件,其中包含插入的图片:

📊 图片插入效果
| 属性 | 设置值 | 说明 |
|---|---|---|
| 图片宽度 | 200 | 像素单位 |
| 图片高度 | 150 | 像素单位 |
| 图片位置 | D3单元格 | 锚点位置 |
图片插入要点:
| 步骤 | 代码 | 说明 |
|---|---|---|
| 导入类 | from openpyxl.drawing.image import Image |
导入图片处理类 |
| 创建对象 | img = Image(image_path) |
加载图片文件 |
| 调整大小 | img.width = 200 |
设置宽度 |
| 调整大小 | img.height = 150 |
设置高度 |
| 添加图片 | ws.add_image(img, "D3") |
添加到指定单元格 |
⚠️ 依赖安装:使用图片功能前需要安装Pillow库:
pip install pillow
📁 生成的文件结构
openpyxl_tutorial/
├── chapter_06_advanced/
│ ├── insert_images.py # 演示脚本
│ └── product.png # 示例图片
└── output/
└── 图片插入演示.xlsx # 生成的Excel文件
6.5 实例2:超链接与批注 🔗
📁 代码路径: openpyxl-tutorial/chapter_06_advanced/hyperlinks_and_comments.py
📝 场景:学习如何在单元格中添加超链接和批注
📝 开发思路:
- 创建工作簿并填充数据
- 添加外部超链接(网址)
- 添加内部超链接(工作表间跳转)
- 添加批注
- 保存文件
# -*- coding: utf-8 -*-
"""
================================================================================
第6章/超链接与批注
================================================================================
开发思路:
1. 创建工作簿并填充数据
2. 添加外部超链接(网址)
3. 添加内部超链接(工作表间跳转)
4. 添加批注
5. 保存文件
================================================================================
"""
# 从openpyxl导入Workbook类
from openpyxl import Workbook
# 导入批注类
from openpyxl.comments import Comment
# 导入样式相关类
from openpyxl.styles import Font, colors
# 导入os模块处理文件路径
import os
def hyperlinks_and_comments_demo():
"""
演示超链接和批注功能
"""
wb = Workbook()
# ==================== 1. 创建第一个工作表 ====================
ws1 = wb.active
ws1.title = "超链接演示"
ws1['A1'] = '超链接与批注演示'
ws1['A1'].font = Font(size=16, bold=True)
# 外部超链接(网址)
ws1['A3'] = '外部链接示例:'
ws1['A3'].font = Font(bold=True)
# 使用HYPERLINK公式创建可点击的超链接
ws1['B3'] = '=HYPERLINK("https://www.baidu.com", "访问百度")'
ws1['B3'].font = Font(color='0563C1', underline='single')
ws1['B4'] = '=HYPERLINK("https://www.python.org", "访问Python官网")'
ws1['B4'].font = Font(color='0563C1', underline='single')
ws1['B5'] = '=HYPERLINK("https://openpyxl.readthedocs.io", "访问openpyxl文档")'
ws1['B5'].font = Font(color='0563C1', underline='single')
# 内部超链接(工作表间跳转)
ws1['A7'] = '内部链接示例:'
ws1['A7'].font = Font(bold=True)
# 创建第二个工作表
ws2 = wb.create_sheet("详细信息")
ws2['A1'] = '这是详细信息页面'
ws2['A1'].font = Font(size=14, bold=True)
ws2['A3'] = '这里可以放置更多详细信息...'
# 添加跳转到第二个工作表的链接(内部链接使用 HYPERLINK 公式)
ws1['B7'] = '=HYPERLINK("#详细信息!A1", "跳转到详细信息")'
ws1['B7'].font = Font(color='0563C1', underline='single')
# 在第二个工作表添加返回链接
ws2['A5'] = '=HYPERLINK("#超链接演示!A1", "返回主页面")'
ws2['A5'].font = Font(color='0563C1', underline='single')
# ==================== 2. 添加批注 ====================
ws1['A9'] = '批注示例:'
ws1['A9'].font = Font(bold=True)
# 添加带批注的单元格
ws1['B9'] = '鼠标悬停查看批注'
# 创建批注
comment = Comment('这是一个批注示例!\n批注可以包含多行文本。', '作者:Admin')
ws1['B9'].comment = comment
# 另一个批注示例
ws1['B10'] = '重要数据'
comment2 = Comment('这个数据需要特别注意,每月更新。', '作者:Manager')
ws1['B10'].comment = comment2
# ==================== 3. 添加使用说明 ====================
ws1['A12'] = '使用说明:'
ws1['A12'].font = Font(bold=True)
ws1['A13'] = '• 超链接:=HYPERLINK("URL", "显示文本")'
ws1['A14'] = '• 外部链接:=HYPERLINK("https://...", "文本")'
ws1['A15'] = '• 内部链接:=HYPERLINK("#工作表名!单元格", "文本")'
ws1['A16'] = '• 批注:cell.comment = Comment(文本, 作者)'
# ==================== 4. 保存文件 ====================
output_dir = os.path.join(os.path.dirname(__file__), "output")
os.makedirs(output_dir, exist_ok=True)
file_path = os.path.join(output_dir, "超链接与批注.xlsx")
wb.save(file_path)
print("=" * 60)
print("超链接与批注演示文件创建成功!")
print("=" * 60)
print(f"文件路径: {file_path}")
print(f"\n包含内容:")
print(" - 外部超链接(百度、Python官网、openpyxl文档)")
print(" - 内部超链接(工作表间跳转)")
print(" - 单元格批注")
wb.close()
return file_path
# 如果这个脚本被直接运行(不是被导入),则执行以下代码
if __name__ == "__main__":
hyperlinks_and_comments_demo()
📊 知识图谱
📊 代码执行时序图
🖨️ 代码运行效果
运行上述代码后,会生成一个名为 超链接与批注.xlsx 的Excel文件,包含2个工作表:
📊 超链接与批注效果
| 工作表 | 内容 | 类型 |
|---|---|---|
| 超链接演示 | 外部链接、内部链接、批注 | 主页面 |
| 详细信息 | 返回链接 | 子页面 |
超链接语法:
| 类型 | 公式 | 示例 |
|---|---|---|
| 外部链接 | =HYPERLINK("URL", "显示文本") |
=HYPERLINK("https://www.baidu.com", "访问百度") |
| 内部链接 | =HYPERLINK("#工作表名!单元格", "显示文本") |
=HYPERLINK("#详细信息!A1", "跳转到详细信息") |
批注语法:
| 步骤 | 代码 | 说明 |
|---|---|---|
| 导入类 | from openpyxl.comments import Comment |
导入批注类 |
| 创建批注 | Comment(文本, 作者) |
创建批注对象 |
| 添加批注 | cell.comment = comment |
将批注添加到单元格 |
链接样式:
| 样式 | 代码 | 效果 |
|---|---|---|
| 蓝色字体 | Font(color='0563C1') |
链接默认颜色 |
| 下划线 | Font(underline='single') |
链接下划线 |
📁 生成的文件结构
openpyxl_tutorial/
├── chapter_06_advanced/
│ ├── hyperlinks_and_comments.py # 演示脚本
└── output/
└── 超链接与批注.xlsx # 生成的Excel文件
6.6 实例3:数据验证 📋
📁 代码路径: openpyxl-tutorial/chapter_06_advanced/data_validation_demo.py
📝 场景:学习如何使用数据验证限制单元格输入,创建下拉列表
📝 开发思路:
- 创建工作簿
- 创建下拉列表(数据验证)
- 创建数值范围限制
- 创建日期限制
- 保存文件
# -*- coding: utf-8 -*-
"""
================================================================================
第6章/数据验证演示
================================================================================
开发思路:
1. 创建工作簿
2. 创建下拉列表(数据验证)
3. 创建数值范围限制
4. 创建日期限制
5. 保存文件
================================================================================
"""
# 从openpyxl导入Workbook类
from openpyxl import Workbook
# 导入数据验证类
from openpyxl.worksheet.datavalidation import DataValidation
# 导入样式相关类
from openpyxl.styles import Font, PatternFill
# 导入os模块处理文件路径
import os
def data_validation_demo():
"""
演示数据验证功能
"""
wb = Workbook()
ws = wb.active
ws.title = "数据验证"
# ==================== 1. 设置标题 ====================
ws['A1'] = '数据验证演示'
ws['A1'].font = Font(size=16, bold=True)
# ==================== 2. 下拉列表示例 ====================
ws['A3'] = '部门选择(下拉列表):'
ws['A3'].font = Font(bold=True)
# 创建下拉列表数据验证
# DataValidation 类用于创建数据验证规则
dv_dept = DataValidation(
type="list", # 类型为列表
formula1='"技术部,市场部,销售部,人事部,财务部"', # 列表选项
allow_blank=True # 允许空值
)
# 设置提示信息
dv_dept.prompt = '请选择部门'
dv_dept.promptTitle = '部门选择'
# 添加数据验证到工作表
ws.add_data_validation(dv_dept)
# 将数据验证应用到单元格
dv_dept.add(ws['B3'])
ws['B3'].fill = PatternFill(start_color='FFF2CC', fill_type='solid')
# ==================== 3. 数值范围限制 ====================
ws['A5'] = '年龄输入(18-60岁):'
ws['A5'].font = Font(bold=True)
# 创建数值范围验证
dv_age = DataValidation(
type="whole", # 整数类型
operator="between", # 介于两者之间
formula1=18, # 最小值
formula2=60, # 最大值
allow_blank=True
)
dv_age.error = '年龄必须在18-60岁之间'
dv_age.errorTitle = '输入错误'
dv_age.prompt = '请输入18-60之间的整数'
dv_age.promptTitle = '年龄输入'
ws.add_data_validation(dv_age)
dv_age.add(ws['B5'])
ws['B5'].fill = PatternFill(start_color='FFF2CC', fill_type='solid')
# ==================== 4. 日期限制 ====================
ws['A7'] = '入职日期(2024年内):'
ws['A7'].font = Font(bold=True)
# 创建日期范围验证
dv_date = DataValidation(
type="date",
operator="between",
formula1="2024-01-01",
formula2="2024-12-31",
allow_blank=True
)
dv_date.error = '日期必须在2024年内'
dv_date.errorTitle = '日期错误'
dv_date.prompt = '请选择2024年内的日期'
dv_date.promptTitle = '入职日期'
ws.add_data_validation(dv_date)
dv_date.add(ws['B7'])
ws['B7'].fill = PatternFill(start_color='FFF2CC', fill_type='solid')
# ==================== 5. 文本长度限制 ====================
ws['A9'] = '手机号(11位):'
ws['A9'].font = Font(bold=True)
# 创建文本长度验证
dv_phone = DataValidation(
type="textLength",
operator="equal",
formula1=11,
allow_blank=True
)
dv_phone.error = '手机号必须是11位数字'
dv_phone.errorTitle = '格式错误'
ws.add_data_validation(dv_phone)
dv_phone.add(ws['B9'])
ws['B9'].fill = PatternFill(start_color='FFF2CC', fill_type='solid')
# ==================== 6. 自定义公式验证 ====================
ws['A11'] = '邮箱格式:'
ws['A11'].font = Font(bold=True)
# 创建自定义公式验证(简单的邮箱格式检查)
dv_email = DataValidation(
type="custom",
formula1='=ISNUMBER(SEARCH("@",B11))',
allow_blank=True
)
dv_email.error = '请输入有效的邮箱地址(包含@符号)'
dv_email.errorTitle = '格式错误'
ws.add_data_validation(dv_email)
dv_email.add(ws['B11'])
ws['B11'].fill = PatternFill(start_color='FFF2CC', fill_type='solid')
# ==================== 7. 添加使用说明 ====================
ws['A13'] = '数据验证类型:'
ws['A13'].font = Font(bold=True)
ws['A14'] = '• list - 下拉列表'
ws['A15'] = '• whole - 整数'
ws['A16'] = '• decimal - 小数'
ws['A17'] = '• date - 日期'
ws['A18'] = '• textLength - 文本长度'
ws['A19'] = '• custom - 自定义公式'
# ==================== 8. 保存文件 ====================
output_dir = os.path.join(os.path.dirname(__file__), "output")
os.makedirs(output_dir, exist_ok=True)
file_path = os.path.join(output_dir, "数据验证演示.xlsx")
wb.save(file_path)
print("=" * 60)
print("数据验证演示文件创建成功!")
print("=" * 60)
print(f"文件路径: {file_path}")
print(f"\n包含验证:")
print(" - 下拉列表(部门选择)")
print(" - 数值范围(年龄18-60)")
print(" - 日期范围(2024年内)")
print(" - 文本长度(手机号11位)")
print(" - 自定义公式(邮箱格式)")
wb.close()
return file_path
# 如果这个脚本被直接运行(不是被导入),则执行以下代码
if __name__ == "__main__":
data_validation_demo()
📊 知识图谱
📊 代码执行时序图
🖨️ 代码运行效果
运行上述代码后,会生成一个名为 数据验证演示.xlsx 的Excel文件,包含5种数据验证:
📊 数据验证效果
| 验证项 | 类型 | 规则 | 提示信息 |
|---|---|---|---|
| 部门选择 | list | 技术部,市场部,销售部,人事部,财务部 | 请选择部门 |
| 年龄输入 | whole | between 18-60 | 年龄必须在18-60岁之间 |
| 入职日期 | date | 2024年内 | 日期必须在2024年内 |
| 手机号 | textLength | 等于11位 | 手机号必须是11位数字 |
| 邮箱格式 | custom | 包含@符号 | 请输入有效的邮箱地址 |
DataValidation参数:
| 参数 | 说明 | 示例 |
|---|---|---|
type |
验证类型 | "list", "whole", "date" |
operator |
操作符 | "between", "equal" |
formula1 |
公式/最小值 | 18, "2024-01-01" |
formula2 |
最大值 | 60, "2024-12-31" |
allow_blank |
允许空值 | True/False |
验证类型:
| 类型 | 用途 |
|---|---|
list |
下拉列表选择 |
whole |
整数范围限制 |
decimal |
小数范围限制 |
date |
日期范围限制 |
textLength |
文本长度限制 |
custom |
自定义公式验证 |
📁 生成的文件结构
openpyxl_tutorial/
├── chapter_06_advanced/
│ ├── data_validation_demo.py # 演示脚本
└── output/
└── 数据验证演示.xlsx # 生成的Excel文件
6.7 实例4:筛选与排序 🔍
📁 代码路径: openpyxl-tutorial/chapter_06_advanced/filter_and_sort.py
📝 场景:学习如何添加自动筛选和排序功能
📝 开发思路:
- 创建工作簿并填充数据
- 添加自动筛选
- 演示排序功能
- 保存文件
# -*- coding: utf-8 -*-
"""
================================================================================
第6章/筛选与排序
================================================================================
开发思路:
1. 创建工作簿并填充数据
2. 添加自动筛选
3. 演示排序功能
4. 保存文件
================================================================================
"""
# 从openpyxl导入Workbook类
from openpyxl import Workbook
# 导入样式相关类
from openpyxl.styles import Font, PatternFill
# 导入os模块处理文件路径
import os
def filter_and_sort_demo():
"""
演示筛选与排序功能
"""
wb = Workbook()
ws = wb.active
ws.title = "筛选与排序"
# ==================== 1. 填充数据 ====================
ws['A1'] = '员工信息表(支持筛选)'
ws['A1'].font = Font(size=16, bold=True)
# 表头
headers = ['姓名', '部门', '职位', '年龄', '工资', '入职日期']
header_fill = PatternFill(start_color='5B9BD5', fill_type='solid')
header_font = Font(bold=True, color='FFFFFF')
for col, header in enumerate(headers, 1):
cell = ws.cell(row=3, column=col, value=header)
cell.font = header_font
cell.fill = header_fill
# 员工数据
employees = [
['张三', '技术部', '工程师', 28, 15000, '2020-03-15'],
['李四', '技术部', '高级工程师', 32, 20000, '2019-06-20'],
['王五', '市场部', '经理', 35, 18000, '2018-01-10'],
['赵六', '市场部', '专员', 25, 8000, '2021-09-05'],
['钱七', '销售部', '销售主管', 30, 16000, '2017-11-22'],
['孙八', '人事部', 'HR专员', 27, 9000, '2022-04-18'],
['周九', '财务部', '会计', 29, 11000, '2020-07-12'],
['吴十', '技术部', '工程师', 26, 14000, '2021-03-08'],
]
for row_idx, emp_data in enumerate(employees, start=4):
for col_idx, value in enumerate(emp_data, 1):
ws.cell(row=row_idx, column=col_idx, value=value)
# ==================== 2. 添加自动筛选 ====================
# auto_filter 属性用于设置自动筛选范围
ws.auto_filter.ref = ws.dimensions
# 或者指定具体范围
# ws.auto_filter.ref = "A3:F11"
print("自动筛选已添加到表头")
# ==================== 3. 添加使用说明 ====================
ws['H3'] = '使用说明:'
ws['H3'].font = Font(bold=True)
ws['H4'] = '1. 点击表头的下拉箭头可以筛选数据'
ws['H5'] = '2. 可以按部门、职位等条件筛选'
ws['H6'] = '3. 可以按工资、年龄排序'
ws['H7'] = '4. 支持多条件组合筛选'
ws['H9'] = 'openpyxl代码:'
ws['H9'].font = Font(bold=True)
ws['H10'] = 'ws.auto_filter.ref = "A3:F11"'
# ==================== 4. 保存文件 ====================
output_dir = os.path.join(os.path.dirname(__file__), "output")
os.makedirs(output_dir, exist_ok=True)
file_path = os.path.join(output_dir, "筛选与排序.xlsx")
wb.save(file_path)
print("=" * 60)
print("筛选与排序演示文件创建成功!")
print("=" * 60)
print(f"文件路径: {file_path}")
print(f"\n功能说明:")
print(" - 表头已启用自动筛选")
print(" - 可以在Excel中点击下拉箭头进行筛选和排序")
wb.close()
return file_path
# 如果这个脚本被直接运行(不是被导入),则执行以下代码
if __name__ == "__main__":
filter_and_sort_demo()
📊 知识图谱
📊 代码执行时序图
🖨️ 代码运行效果
运行上述代码后,会生成一个名为 筛选与排序.xlsx 的Excel文件,表头已启用自动筛选功能:
📊 筛选与排序效果
| 功能 | 说明 | 代码 |
|---|---|---|
| 自动筛选 | 表头添加下拉箭头 | ws.auto_filter.ref = ws.dimensions |
| 指定范围 | 手动设置筛选范围 | ws.auto_filter.ref = "A3:F11" |
表头样式:
| 属性 | 设置值 | 效果 |
|---|---|---|
| 背景色 | 5B9BD5 |
蓝色背景 |
| 字体颜色 | FFFFFF |
白色字体 |
| 字体 | bold=True |
加粗 |
数据表示例:
| 姓名 | 部门 | 职位 | 年龄 | 工资 | 入职日期 |
|---|---|---|---|---|---|
| 张三 | 技术部 | 工程师 | 28 | 15000 | 2020-03-15 |
| 李四 | 技术部 | 高级工程师 | 32 | 20000 | 2019-06-20 |
| … | … | … | … | … | … |
💡 使用说明:在Excel中打开文件后,点击表头的下拉箭头可以进行筛选和排序操作。
📁 生成的文件结构
openpyxl_tutorial/
├── chapter_06_advanced/
│ ├── filter_and_sort.py # 演示脚本
└── output/
└── 筛选与排序.xlsx # 生成的Excel文件
6.8 实例5:打印设置 🖨️
📁 代码路径: openpyxl-tutorial/chapter_06_advanced/print_settings.py
📝 场景:学习如何设置打印页面、打印区域等
📝 开发思路:
- 创建工作簿并填充数据
- 设置页面方向(横向/纵向)
- 设置打印区域
- 设置页眉页脚
- 保存文件
# -*- coding: utf-8 -*-
"""
================================================================================
第6章/打印设置
================================================================================
开发思路:
1. 创建工作簿并填充数据
2. 设置页面方向(横向/纵向)
3. 设置打印区域
4. 设置页眉页脚
5. 保存文件
================================================================================
"""
# 从openpyxl导入Workbook类
from openpyxl import Workbook
# 导入页面设置相关类
from openpyxl.worksheet.page import PageMargins
# 导入样式相关类
from openpyxl.styles import Font
# 导入os模块处理文件路径
import os
def print_settings_demo():
"""
演示打印设置功能
"""
wb = Workbook()
ws = wb.active
ws.title = "打印设置"
# ==================== 1. 填充数据 ====================
ws['A1'] = '打印设置演示'
ws['A1'].font = Font(size=16, bold=True)
# 创建一些示例数据
for row in range(3, 20):
for col in range(1, 8):
ws.cell(row=row, column=col, value=f'数据{row}-{col}')
# ==================== 2. 设置页面方向 ====================
# page_setup 用于设置页面属性
ws.page_setup.orientation = 'landscape' # landscape=横向,portrait=纵向
ws.page_setup.paperSize = 9 # 9 = A4
print("页面方向设置为:横向")
# ==================== 3. 设置打印区域 ====================
# print_area 用于设置打印区域
ws.print_area = 'A1:G15'
print("打印区域设置为:A1:G15")
# ==================== 4. 设置页边距 ====================
ws.page_margins = PageMargins(
left=0.5, # 左边距(英寸)
right=0.5, # 右边距
top=0.75, # 上边距
bottom=0.75, # 下边距
header=0.3, # 页眉距离
footer=0.3 # 页脚距离
)
# ==================== 5. 设置页眉页脚 ====================
# 奇偶页不同的设置
ws.oddHeader.center.text = "公司机密文件"
ws.oddHeader.center.size = 14
ws.oddHeader.center.font = "微软雅黑"
ws.oddFooter.center.text = "第 &[Page] 页,共 &[Pages] 页"
ws.oddFooter.center.size = 10
print("页眉页脚已设置")
# ==================== 6. 设置打印标题行 ====================
# print_title_rows 用于设置每页重复打印的标题行
ws.print_title_rows = '1:1' # 第一行作为标题行
print("打印标题行设置为:第1行")
# ==================== 7. 其他打印选项 ====================
ws.print_options.gridLines = False # 不打印网格线
ws.print_options.horizontalCentered = True # 水平居中
ws.print_options.verticalCentered = False # 不垂直居中
# ==================== 8. 添加使用说明 ====================
ws['I3'] = '打印设置说明:'
ws['I3'].font = Font(bold=True)
ws['I4'] = '• 页面方向:横向'
ws['I5'] = '• 纸张大小:A4'
ws['I6'] = '• 打印区域:A1:G15'
ws['I7'] = '• 页眉:公司机密文件'
ws['I8'] = '• 页脚:第X页,共Y页'
ws['I9'] = '• 标题行:第1行(每页重复)'
# ==================== 9. 保存文件 ====================
output_dir = os.path.join(os.path.dirname(__file__), "output")
os.makedirs(output_dir, exist_ok=True)
file_path = os.path.join(output_dir, "打印设置.xlsx")
wb.save(file_path)
print("=" * 60)
print("打印设置演示文件创建成功!")
print("=" * 60)
print(f"文件路径: {file_path}")
print(f"\n打印设置:")
print(" - 页面方向:横向")
print(" - 打印区域:A1:G15")
print(" - 页眉:公司机密文件")
print(" - 页脚:第X页,共Y页")
wb.close()
return file_path
# 如果这个脚本被直接运行(不是被导入),则执行以下代码
if __name__ == "__main__":
print_settings_demo()
📊 知识图谱
📊 代码执行时序图
🖨️ 代码运行效果
运行上述代码后,会生成一个名为 打印设置.xlsx 的Excel文件,已配置完整的打印设置:
📊 打印设置效果
| 设置项 | 值 | 说明 |
|---|---|---|
| 页面方向 | landscape | 横向 |
| 纸张大小 | 9 | A4 |
| 打印区域 | A1:G15 | 指定范围 |
| 左边距 | 0.5英寸 | 页边距 |
| 右边距 | 0.5英寸 | 页边距 |
| 上边距 | 0.75英寸 | 页边距 |
| 下边距 | 0.75英寸 | 页边距 |
| 页眉 | 公司机密文件 | 居中显示 |
| 页脚 | 第X页,共Y页 | 居中显示 |
| 标题行 | 1:1 | 每页重复 |
| 网格线 | False | 不打印 |
打印设置要点:
| 设置类别 | 属性 | 示例 |
|---|---|---|
| 页面方向 | ws.page_setup.orientation |
'landscape'横向/'portrait'纵向 |
| 纸张大小 | ws.page_setup.paperSize |
9=A4 |
| 打印区域 | ws.print_area |
'A1:G15' |
| 页边距 | ws.page_margins |
PageMargins(left=0.5, ...) |
| 页眉 | ws.oddHeader.center.text |
设置居中页眉内容 |
| 页脚 | ws.oddFooter.center.text |
设置居中页脚内容 |
| 标题行 | ws.print_title_rows |
'1:1'第一行重复 |
页眉页脚变量:
| 变量 | 说明 |
|---|---|
&[Page] |
当前页码 |
&[Pages] |
总页数 |
&[Date] |
当前日期 |
&[Time] |
当前时间 |
&[File] |
文件名 |
&[Tab] |
工作表名 |
📁 生成的文件结构
openpyxl_tutorial/
├── chapter_06_advanced/
│ ├── print_settings.py # 演示脚本
└── output/
└── 打印设置.xlsx # 生成的Excel文件
6.9 本章知识总结 📝
本章重点回顾:
| 功能 | 关键类/属性 | 示例 |
|---|---|---|
| 图片插入 | Image(图片路径) |
ws.add_image(img, 'A1') |
| 超链接 | cell.hyperlink |
cell.hyperlink = 'https://...' |
| 批注 | Comment(文本, 作者) |
cell.comment = Comment(...) |
| 下拉列表 | DataValidation(type="list") |
dv.add(ws['A1']) |
| 数值验证 | DataValidation(type="whole") |
设置formula1/formula2 |
| 自动筛选 | ws.auto_filter.ref |
ws.auto_filter.ref = "A1:D10" |
| 页面设置 | ws.page_setup |
orientation = 'landscape' |
| 打印区域 | ws.print_area |
ws.print_area = 'A1:D10' |
| 页眉页脚 | ws.oddHeader/oddFooter |
设置center.text |
下一章预告:我们将通过一个综合实战案例,把所有学到的知识融会贯通!
更多推荐
所有评论(0)