欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手
️ 博客主页:请点击——> 一晌小贪欢的博客主页求关注
该系列文章专栏:请点击——>Python办公自动化专栏求订阅
此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅
此外还有python基础专栏:请点击——>Python基础学习专栏求订阅
文章作者技术和水平有限,如果文中出现错误,希望大家能指正
❤️ 欢迎各位佬关注! ❤️
pip install python-pptx
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.enum.shapes import MSO_SHAPE
from pptx.dml.color import RGBColor
from pptx.enum.dml import MSO_THEME_COLOR
import datetime
# 创建新的演示文稿
prs = Presentation()
# 或加载现有演示文稿
# prs = Presentation('existing_presentation.pptx')
# 获取幻灯片布局
slide_layout = prs.slide_layouts[0] # 标题幻灯片布局
# 添加幻灯片
slide = prs.slides.add_slide(slide_layout)
# 添加标题和副标题
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "演示文稿标题"
subtitle.text = "副标题内容"
# 保存演示文稿
prs.save('my_presentation.pptx')
def explore_layouts():
prs = Presentation()
# 常用布局索引
layouts = {
0: "标题幻灯片",
1: "标题和内容",
2: "节标题",
3: "两栏内容",
4: "比较",
5: "仅标题",
6: "空白",
7: "内容和标题",
8: "图片和标题"
}
for layout_id, layout_name in layouts.items():
if layout_id < len(prs.slide_layouts):
slide_layout = prs.slide_layouts[layout_id]
slide = prs.slides.add_slide(slide_layout)
# 设置标题
if slide.shapes.title:
slide.shapes.title.text = f"布局 {layout_id}: {layout_name}"
prs.save('布局示例.pptx')
def create_text_content():
prs = Presentation()
slide_layout = prs.slide_layouts[5] # 仅标题布局
slide = prs.slides.add_slide(slide_layout)
# 设置标题
slide.shapes.title.text = "文本格式示例"
# 添加文本框
left = Inches(1)
top = Inches(2)
width = Inches(8)
height = Inches(4)
textbox = slide.shapes.add_textbox(left, top, width, height)
text_frame = textbox.text_frame
# 第一段
p1 = text_frame.paragraphs[0]
p1.text = "这是第一段文本"
p1.font.name = "微软雅黑"
p1.font.size = Pt(18)
p1.font.bold = True
p1.font.color.rgb = RGBColor(255, 0, 0) # 红色
# 添加第二段
p2 = text_frame.add_paragraph()
p2.text = "这是第二段文本,演示不同的格式"
p2.font.name = "宋体"
p2.font.size = Pt(14)
p2.font.italic = True
p2.font.color.rgb = RGBColor(0, 0, 255) # 蓝色
# 添加项目符号列表
p3 = text_frame.add_paragraph()
p3.text = "项目符号项目1"
p3.level = 0 # 第一级
p4 = text_frame.add_paragraph()
p4.text = "项目符号项目2"
p4.level = 1 # 第二级
prs.save('文本格式示例.pptx')
def text_alignment_styles():
prs = Presentation()
slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(slide_layout)
slide.shapes.title.text = "文本对齐示例"
# 左对齐文本
left_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.5), Inches(3), Inches(1))
left_frame = left_box.text_frame
left_p = left_frame.paragraphs[0]
left_p.text = "左对齐文本"
left_p.alignment = PP_ALIGN.LEFT
# 居中对齐文本
center_box = slide.shapes.add_textbox(Inches(4), Inches(1.5), Inches(3), Inches(1))
center_frame = center_box.text_frame
center_p = center_frame.paragraphs[0]
center_p.text = "居中对齐文本"
center_p.alignment = PP_ALIGN.CENTER
# 右对齐文本
right_box = slide.shapes.add_textbox(Inches(7.5), Inches(1.5), Inches(3), Inches(1))
right_frame = right_box.text_frame
right_p = right_frame.paragraphs[0]
right_p.text = "右对齐文本"
right_p.alignment = PP_ALIGN.RIGHT
prs.save('文本对齐示例.pptx')
def create_basic_table():
prs = Presentation()
slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(slide_layout)
slide.shapes.title.text = "员工信息表"
# 创建表格 (4行5列)
rows, cols = 4, 5
left = Inches(1)
top = Inches(2)
width = Inches(8)
height = Inches(3)
table = slide.shapes.add_table(rows, cols, left, top, width, height).table
# 设置表头
headers = ['工号', '姓名', '部门', '职位', '薪资']
for i, header in enumerate(headers):
cell = table.cell(0, i)
cell.text = header
# 设置表头样式
cell.text_frame.paragraphs[0].font.bold = True
cell.text_frame.paragraphs[0].font.size = Pt(12)
cell.fill.solid()
cell.fill.fore_color.rgb = RGBColor(79, 129, 189) # 蓝色背景
cell.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255) # 白色文字
# 填充数据
data = [
['E001', '张三', '技术部', '高级工程师', '12000'],
['E002', '李四', '销售部', '销售经理', '10000'],
['E003', '王五', '人事部', 'HR专员', '8000']
]
for row_idx, row_data in enumerate(data, 1):
for col_idx, value in enumerate(row_data):
cell = table.cell(row_idx, col_idx)
cell.text = value
cell.text_frame.paragraphs[0].font.size = Pt(10)
prs.save('员工信息表.pptx')
def create_advanced_table():
prs = Presentation()
slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(slide_layout)
slide.shapes.title.text = "销售业绩表"
# 创建表格
rows, cols = 5, 4
table = slide.shapes.add_table(rows, cols, Inches(1), Inches(2), Inches(8), Inches(4)).table
# 设置列宽
table.columns[0].width = Inches(2)
table.columns[1].width = Inches(2)
table.columns[2].width = Inches(2)
table.columns[3].width = Inches(2)
# 表头数据
headers = ['销售员', '目标(万)', '实际(万)', '完成率']
for i, header in enumerate(headers):
cell = table.cell(0, i)
cell.text = header
# 表头样式
paragraph = cell.text_frame.paragraphs[0]
paragraph.alignment = PP_ALIGN.CENTER
paragraph.font.bold = True
paragraph.font.size = Pt(14)
cell.fill.solid()
cell.fill.fore_color.rgb = RGBColor(68, 114, 196)
paragraph.font.color.rgb = RGBColor(255, 255, 255)
# 数据
sales_data = [
['张三', '100', '120', '120%'],
['李四', '80', '75', '94%'],
['王五', '90', '95', '106%'],
['合计', '270', '290', '107%']
]
for row_idx, row_data in enumerate(sales_data, 1):
for col_idx, value in enumerate(row_data):
cell = table.cell(row_idx, col_idx)
cell.text = value
paragraph = cell.text_frame.paragraphs[0]
paragraph.alignment = PP_ALIGN.CENTER
paragraph.font.size = Pt(12)
# 最后一行(合计行)特殊样式
if row_idx == len(sales_data):
paragraph.font.bold = True
cell.fill.solid()
cell.fill.fore_color.rgb = RGBColor(217, 217, 217)
# 完成率列颜色标识
if col_idx == 3 and row_idx < len(sales_data):
completion_rate = float(value.replace('%', ''))
if completion_rate >= 100:
paragraph.font.color.rgb = RGBColor(0, 128, 0) # 绿色
else:
paragraph.font.color.rgb = RGBColor(255, 0, 0) # 红色
prs.save('销售业绩表.pptx')
def insert_images():
prs = Presentation()
slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(slide_layout)
slide.shapes.title.text = "图片插入示例"
try:
# 插入图片(需要准备图片文件)
left = Inches(1)
top = Inches(2)
width = Inches(4)
height = Inches(3)
# 如果有图片文件
# slide.shapes.add_picture('company_logo.png', left, top, width, height)
# 创建占位符文本框
placeholder = slide.shapes.add_textbox(left, top, width, height)
placeholder.text_frame.text = "[图片占位符]\n请替换为实际图片"
placeholder.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
except FileNotFoundError:
# 如果没有图片文件,创建文本说明
textbox = slide.shapes.add_textbox(Inches(1), Inches(2), Inches(8), Inches(2))
textbox.text_frame.text = "注意:需要准备相应的图片文件才能插入图片"
prs.save('图片示例.pptx')
def add_shapes():
prs = Presentation()
slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(slide_layout)
slide.shapes.title.text = "形状示例"
# 添加矩形
left = Inches(1)
top = Inches(2)
width = Inches(2)
height = Inches(1)
rectangle = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height)
rectangle.text_frame.text = "矩形"
rectangle.fill.solid()
rectangle.fill.fore_color.rgb = RGBColor(79, 129, 189)
# 添加圆形
left = Inches(4)
circle = slide.shapes.add_shape(MSO_SHAPE.OVAL, left, top, width, height)
circle.text_frame.text = "圆形"
circle.fill.solid()
circle.fill.fore_color.rgb = RGBColor(155, 187, 89)
# 添加箭头
left = Inches(7)
arrow = slide.shapes.add_shape(MSO_SHAPE.RIGHT_ARROW, left, top, width, height)
arrow.text_frame.text = "箭头"
arrow.fill.solid()
arrow.fill.fore_color.rgb = RGBColor(192, 80, 77)
prs.save('形状示例.pptx')
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
def create_bar_chart():
prs = Presentation()
slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(slide_layout)
slide.shapes.title.text = "销售数据图表"
# 准备图表数据
chart_data = CategoryChartData()
chart_data.categories = ['Q1', 'Q2', 'Q3', 'Q4']
chart_data.add_series('2023年', (20.4, 30.6, 40.2, 50.8))
chart_data.add_series('2024年', (25.2, 35.4, 45.6, 55.9))
# 添加图表
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
chart = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
).chart
# 设置图表标题
chart.has_title = True
chart.chart_title.text_frame.text = "季度销售对比"
# 设置数据标签
chart.plots[0].has_data_labels = True
data_labels = chart.plots[0].data_labels
data_labels.number_format = '0.0'
prs.save('销售图表.pptx')
def create_pie_chart():
prs = Presentation()
slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(slide_layout)
slide.shapes.title.text = "市场份额分析"
# 饼图数据
chart_data = CategoryChartData()
chart_data.categories = ['产品A', '产品B', '产品C', '产品D', '其他']
chart_data.add_series('市场份额', (35.2, 28.4, 18.6, 12.3, 5.5))
# 添加饼图
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
chart = slide.shapes.add_chart(
XL_CHART_TYPE.PIE, x, y, cx, cy, chart_data
).chart
# 设置图表标题
chart.has_title = True
chart.chart_title.text_frame.text = "产品市场份额分布"
# 设置数据标签
chart.plots[0].has_data_labels = True
data_labels = chart.plots[0].data_labels
data_labels.number_format = '0.0%'
data_labels.position = 2 # 显示在扇形外部
prs.save('市场份额饼图.pptx')
def create_project_report():
prs = Presentation()
# 封面页
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "项目进度汇报"
subtitle.text = f"汇报人:张三\n汇报日期:{datetime.date.today()}"
# 目录页
bullet_slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(bullet_slide_layout)
slide.shapes.title.text = "汇报内容"
content = slide.placeholders[1]
content.text = "项目概述\n进度情况\n遇到的问题\n解决方案\n下一步计划"
# 项目概述页
slide = prs.slides.add_slide(bullet_slide_layout)
slide.shapes.title.text = "项目概述"
content = slide.placeholders[1]
tf = content.text_frame
tf.text = "项目名称:客户管理系统"
p = tf.add_paragraph()
p.text = "项目目标:提升客户服务效率"
p.level = 1
p = tf.add_paragraph()
p.text = "项目周期:2024年1月-6月"
p.level = 1
p = tf.add_paragraph()
p.text = "团队规模:8人"
p.level = 1
# 进度情况页
slide = prs.slides.add_slide(prs.slide_layouts[5])
slide.shapes.title.text = "项目进度"
# 创建进度表格
table = slide.shapes.add_table(5, 4, Inches(1), Inches(2), Inches(8), Inches(3)).table
# 表头
headers = ['阶段', '计划完成时间', '实际完成时间', '完成状态']
for i, header in enumerate(headers):
cell = table.cell(0, i)
cell.text = header
cell.text_frame.paragraphs[0].font.bold = True
cell.fill.solid()
cell.fill.fore_color.rgb = RGBColor(68, 114, 196)
cell.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)
# 进度数据
progress_data = [
['需求分析', '2024-01-31', '2024-01-28', '已完成'],
['系统设计', '2024-02-28', '2024-03-05', '已完成'],
['开发阶段', '2024-04-30', '进行中', '80%'],
['测试阶段', '2024-05-31', '待开始', '0%']
]
for row_idx, row_data in enumerate(progress_data, 1):
for col_idx, value in enumerate(row_data):
cell = table.cell(row_idx, col_idx)
cell.text = value
# 状态列颜色标识
if col_idx == 3:
if '已完成' in value:
cell.text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 128, 0)
elif '进行中' in value:
cell.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 165, 0)
# 问题和解决方案页
slide = prs.slides.add_slide(bullet_slide_layout)
slide.shapes.title.text = "遇到的问题及解决方案"
content = slide.placeholders[1]
tf = content.text_frame
tf.text = "主要问题:"
p = tf.add_paragraph()
p.text = "第三方API接口不稳定"
p.level = 1
p = tf.add_paragraph()
p.text = "数据库性能瓶颈"
p.level = 1
p = tf.add_paragraph()
p.text = "解决方案:"
p = tf.add_paragraph()
p.text = "增加API重试机制和备用方案"
p.level = 1
p = tf.add_paragraph()
p.text = "优化数据库查询和增加缓存"
p.level = 1
prs.save('项目汇报.pptx')
def create_training_slides():
prs = Presentation()
# 课程封面
title_slide = prs.slides.add_slide(prs.slide_layouts[0])
title_slide.shapes.title.text = "Python基础培训"
title_slide.placeholders[1].text = "讲师:李老师\n时间:2024年1月\n地点:培训室A"
# 课程大纲
outline_slide = prs.slides.add_slide(prs.slide_layouts[1])
outline_slide.shapes.title.text = "课程大纲"
content = outline_slide.placeholders[1]
tf = content.text_frame
tf.text = "Python简介"
topics = [
"基础语法",
"数据类型",
"控制结构",
"函数定义",
"面向对象",
"实战练习"
]
for topic in topics:
p = tf.add_paragraph()
p.text = topic
p.level = 1
# 知识点详解页
detail_slide = prs.slides.add_slide(prs.slide_layouts[1])
detail_slide.shapes.title.text = "Python数据类型"
content = detail_slide.placeholders[1]
tf = content.text_frame
tf.text = "基本数据类型:"
data_types = [
("整数 (int)", "例:age = 25"),
("浮点数 (float)", "例:price = 99.99"),
("字符串 (str)", "例:name = 'Python'"),
("布尔值 (bool)", "例:is_valid = True"),
("列表 (list)", "例:numbers = [1, 2, 3]"),
("字典 (dict)", "例:person = {'name': 'Tom'}")
]
for data_type, example in data_types:
p = tf.add_paragraph()
p.text = f"{data_type} - {example}"
p.level = 1
# 代码示例页
code_slide = prs.slides.add_slide(prs.slide_layouts[5])
code_slide.shapes.title.text = "代码示例"
# 添加代码文本框
code_box = code_slide.shapes.add_textbox(Inches(1), Inches(2), Inches(8), Inches(4))
code_frame = code_box.text_frame
code_text = """# Python变量定义示例
name = "张三"
age = 25
height = 1.75
is_student = True
# 输出信息
print(f"姓名:{name}")
print(f"年龄:{age}")
print(f"身高:{height}米")
print(f"是否学生:{is_student}")"""
code_frame.text = code_text
# 设置代码字体
for paragraph in code_frame.paragraphs:
paragraph.font.name = "Consolas"
paragraph.font.size = Pt(12)
# 练习题页
exercise_slide = prs.slides.add_slide(prs.slide_layouts[1])
exercise_slide.shapes.title.text = "课堂练习"
content = exercise_slide.placeholders[1]
tf = content.text_frame
tf.text = "练习1:创建一个学生信息字典"
p = tf.add_paragraph()
p.text = "包含姓名、年龄、专业、成绩等信息"
p.level = 1
p = tf.add_paragraph()
p.text = "练习2:编写函数计算平均成绩"
p = tf.add_paragraph()
p.text = "输入多个学生的成绩,返回平均值"
p.level = 1
prs.save('Python培训课件.pptx')
def create_product_presentation():
prs = Presentation()
# 产品封面
title_slide = prs.slides.add_slide(prs.slide_layouts[0])
title_slide.shapes.title.text = "智能办公系统"
title_slide.placeholders[1].text = "让办公更智能,让工作更高效\n\n产品发布会\n2024年1月"
# 产品概述
overview_slide = prs.slides.add_slide(prs.slide_layouts[1])
overview_slide.shapes.title.text = "产品概述"
content = overview_slide.placeholders[1]
tf = content.text_frame
tf.text = "产品定位:企业级智能办公解决方案"
features = [
"智能文档管理",
"自动化工作流程",
"数据分析与报表",
"团队协作平台",
"移动办公支持"
]
for feature in features:
p = tf.add_paragraph()
p.text = feature
p.level = 1
# 核心功能页
feature_slide = prs.slides.add_slide(prs.slide_layouts[5])
feature_slide.shapes.title.text = "核心功能"
# 创建功能对比表
table = feature_slide.shapes.add_table(5, 3, Inches(1), Inches(2), Inches(8), Inches(4)).table
# 表头
headers = ['功能模块', '传统方式', '智能方式']
for i, header in enumerate(headers):
cell = table.cell(0, i)
cell.text = header
cell.text_frame.paragraphs[0].font.bold = True
cell.fill.solid()
cell.fill.fore_color.rgb = RGBColor(68, 114, 196)
cell.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)
# 功能对比数据
comparison_data = [
['文档管理', '手动分类整理', 'AI自动分类标签'],
['审批流程', '纸质流转签字', '电子化自动流转'],
['数据统计', '手工制作报表', '实时自动生成'],
['团队沟通', '邮件电话会议', '集成化协作平台']
]
for row_idx, row_data in enumerate(comparison_data, 1):
for col_idx, value in enumerate(row_data):
cell = table.cell(row_idx, col_idx)
cell.text = value
cell.text_frame.paragraphs[0].font.size = Pt(11)
# 智能方式列标绿色
if col_idx == 2:
cell.text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 128, 0)
# 技术优势页
tech_slide = prs.slides.add_slide(prs.slide_layouts[2])
tech_slide.shapes.title.text = "技术优势"
# 添加技术特点
tech_box = tech_slide.shapes.add_textbox(Inches(1), Inches(2), Inches(8), Inches(4))
tech_frame = tech_box.text_frame
tech_points = [
" 云原生架构,支持弹性扩展",
" 企业级安全保障,数据加密传输",
" AI智能助手,提升工作效率",
" 跨平台支持,随时随地办公",
" 开放API接口,易于集成扩展"
]
for i, point in enumerate(tech_points):
if i == 0:
tech_frame.text = point
else:
p = tech_frame.add_paragraph()
p.text = point
tech_frame.paragraphs[i].font.size = Pt(16)
tech_frame.paragraphs[i].space_after = Pt(12)
# 联系我们页
contact_slide = prs.slides.add_slide(prs.slide_layouts[5])
contact_slide.shapes.title.text = "联系我们"
contact_box = contact_slide.shapes.add_textbox(Inches(2), Inches(2.5), Inches(6), Inches(3))
contact_frame = contact_box.text_frame
contact_frame.text = " 销售热线:400-123-4567\n 邮箱:[email protected]\n 官网:www.company.com\n 地址:北京市朝阳区科技园"
for paragraph in contact_frame.paragraphs:
paragraph.alignment = PP_ALIGN.CENTER
paragraph.font.size = Pt(18)
paragraph.space_after = Pt(12)
prs.save('产品介绍.pptx')
def work_with_master():
prs = Presentation()
# 获取幻灯片母版
slide_master = prs.slide_master
# 修改母版标题样式
title_placeholder = slide_master.placeholders[0] # 标题占位符
title_placeholder.text_frame.paragraphs[0].font.name = "微软雅黑"
title_placeholder.text_frame.paragraphs[0].font.size = Pt(24)
title_placeholder.text_frame.paragraphs[0].font.color.rgb = RGBColor(68, 114, 196)
# 创建使用母版的幻灯片
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = "使用自定义母版的标题"
slide.placeholders[1].text = "这个标题使用了自定义的母版样式"
prs.save('自定义母版.pptx')
def add_animations():
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = "动画效果示例"
# 添加文本内容
content = slide.placeholders[1]
tf = content.text_frame
tf.text = "第一个要点"
points = ["第二个要点", "第三个要点", "第四个要点"]
for point in points:
p = tf.add_paragraph()
p.text = point
p.level = 1
# 注意:python-pptx目前不直接支持动画设置
# 动画需要在PowerPoint中手动添加或使用其他工具
prs.save('动画示例.pptx')
def batch_generate_slides():
prs = Presentation()
# 员工数据
employees = [
{'name': '张三', 'department': '技术部', 'position': '高级工程师', 'achievements': ['完成核心模块开发', '优化系统性能', '指导新员工']},
{'name': '李四', 'department': '销售部', 'position': '销售经理', 'achievements': ['超额完成销售目标', '开拓新客户', '团队管理优秀']},
{'name': '王五', 'department': '人事部', 'position': 'HR专员', 'achievements': ['完善招聘流程', '组织员工培训', '提升员工满意度']}
]
# 为每个员工生成一页幻灯片
for emp in employees:
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = f"{emp['name']} - 年度总结"
content = slide.placeholders[1]
tf = content.text_frame
tf.text = f"部门:{emp['department']}"
p = tf.add_paragraph()
p.text = f"职位:{emp['position']}"
p = tf.add_paragraph()
p.text = "主要成就:"
for achievement in emp['achievements']:
p = tf.add_paragraph()
p.text = achievement
p.level = 1
prs.save('员工年度总结.pptx')
def optimize_batch_operations():
prs = Presentation()
# 预定义样式
title_font_size = Pt(24)
content_font_size = Pt(16)
# 批量创建幻灯片
slide_data = [
("第一章", ["要点1", "要点2", "要点3"]),
("第二章", ["要点A", "要点B", "要点C"]),
("第三章", ["要点X", "要点Y", "要点Z"])
]
for title, points in slide_data:
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = title
slide.shapes.title.text_frame.paragraphs[0].font.size = title_font_size
content = slide.placeholders[1]
tf = content.text_frame
tf.text = points[0]
tf.paragraphs[0].font.size = content_font_size
for point in points[1:]:
p = tf.add_paragraph()
p.text = point
p.font.size = content_font_size
prs.save('批量优化示例.pptx')
def create_template_system():
# 创建基础模板
def create_base_template():
prs = Presentation()
# 设置默认字体和样式
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = "{{TITLE}}"
slide.placeholders[1].text = "{{SUBTITLE}}"
return prs
# 使用模板生成演示文稿
def generate_from_template(template_data):
prs = create_base_template()
# 替换占位符
for slide in prs.slides:
for shape in slide.shapes:
if hasattr(shape, 'text_frame'):
for paragraph in shape.text_frame.paragraphs:
for key, value in template_data.items():
if key in paragraph.text:
paragraph.text = paragraph.text.replace(key, value)
return prs
# 示例数据
data = {
"{{TITLE}}": "季度业务回顾",
"{{SUBTITLE}}": "2024年第一季度\n业务部门汇报"
}
prs = generate_from_template(data)
prs.save('模板生成示例.pptx')
def handle_font_compatibility():
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = "字体兼容性处理"
# 设置备用字体
content = slide.placeholders[1]
tf = content.text_frame
tf.text = "中文字体测试"
# 尝试设置首选字体,失败时使用备用字体
try:
tf.paragraphs[0].font.name = "微软雅黑"
except:
tf.paragraphs[0].font.name = "Arial" # 备用字体
prs.save('字体兼容性.pptx')
def handle_image_processing():
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[5])
slide.shapes.title.text = "图片处理示例"
# 安全的图片插入
def safe_add_picture(slide, image_path, left, top, width, height):
try:
slide.shapes.add_picture(image_path, left, top, width, height)
return True
except FileNotFoundError:
# 创建占位符
placeholder = slide.shapes.add_textbox(left, top, width, height)
placeholder.text_frame.text = f"[图片占位符]\n{image_path}"
placeholder.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
return False
# 使用安全的图片插入方法
safe_add_picture(slide, 'logo.png', Inches(1), Inches(2), Inches(3), Inches(2))
prs.save('图片处理示例.pptx')
def memory_optimization():
# 处理大量幻灯片时的内存优化
def create_large_presentation(slide_count):
prs = Presentation()
# 分批处理
batch_size = 50
for i in range(0, slide_count, batch_size):
batch_end = min(i + batch_size, slide_count)
for j in range(i, batch_end):
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = f"幻灯片 {j + 1}"
slide.placeholders[1].text = f"这是第 {j + 1} 张幻灯片的内容"
# 可以在这里保存中间结果
if i > 0 and i % 100 == 0:
print(f"已处理 {i} 张幻灯片")
return prs
# 创建大型演示文稿
large_prs = create_large_presentation(200)
large_prs.save('大型演示文稿.pptx')
python-pptx是Python处理PowerPoint演示文稿的强大工具,特别适合办公自动化和批量生成场景。通过本文介绍的方法,你可以: