本文主要是介绍Python使用python-pptx自动化操作和生成PPT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编...
在现代商业和教育环境中,PowerPoint演示文稿是信息传递的重要工具。通过Python自动化PPT创建和编辑过程,可以大幅提高工作效率,特别是在需要批量生成或更新演示文稿的场景下。本文将介绍如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景。
使用python-pptx操作PPT文档
安装python-pptx
pip install python-pptx
基础概念
在Python中,可以使用python-pptx库实现PPT文件的自动化操作。需要注意的是,python-pptx只支持*.pptx文件格式的PPT文件(Office 2007及以上版本)。
一个PPT文件通常由多个幻灯片组成,每个幻灯片都有相应的布局。通过python-pptx库创建PPT文件的过程其实就是创建一个空的PPT文件,然后不断向其中添加具有某种布局的幻灯片的过程。
创建新的PPT文档
from pptx import Presentation from pptx.util import Inches, Pt from pptx.enum.text import PP_ALIGN from pptx.dml.color import RGBColor def create_simple_presentation(): """创建一个简单的PPT演示文稿""" # 创建演示文稿对象 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 = "Python自动化办公" subtitle.text = "使用python-pptx创建精美演示文稿" # 添加内容幻灯片 bullet_slide_layout = prs.slide_layouts[1] # 标题和内容布局 slide = prs.slides.add_slide(bullet_slide_layout) # 设置标题 title = slide.shapes.title title.text = "python-pptx的主要功能" # 设置内容(项目符号列表) 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 = "创建表格和图表" p.level = 1 p = tf.add_paragraph() p.text = "应用主题和样式" p.level = 0 # 恢复到第一级 # 保存演示文稿 prs.save("简单演示文稿.pptx") print("演示文稿已保存为: 简单演示文稿.pptx") # 执行函数 create_simple_presentation()
查看可用的幻灯片布局
from pptx import Presentation def explore_slide_layouts(): """查看可用的幻灯片布局""" prs = Presentation() print("可用的幻灯片布局:") for i, layout in enumerate(prs.slide_layouts): # 获取布局名称 layout_name = "未命名布局" for shape in layout.placeholders: if shape.is_title: layout_name = f"布局 {i} - {shape.text if shape.text else '标题布局'}" break print(f"索引 {i}: {layout_name}") print(" 占位符:") for shape in layout.placeholders: print(f" 索引 {shape.placeholder_format.idx}: {shape.name}") print("\n常用布局索引参考:") print("0 - 标题幻灯片") print("1 - 标题和内容") print("2 - 节标题") print("3 - 两栏内容") print("4 - 比较") print("5 - 仅标题") print("6 - 空白") print("7 - 标题和对象") print("8 - 对象和标题") # 执行函数 # explore_slide_layouts()
添加文本框和格式化文本
from pptx import Presentation from pptx.util import Inches, Pt from pptx.enum.text import PP_ALIGN from pptx.dml.color import RGBColor def create_formatted_text_slide(): """创建包含格式化文本的幻灯片""" prs = Presentation() # 添加空白幻灯片 blank_slide_layout = prs.slide_layouts[6] slide = prs.slides.add_slide(blank_slide_layout) # 添加标题文本框 left = Inches(1) top = Inches(0.5) width = Inches(8) height = Inches(1) txBox = slide.shapes.add_textbox(left, top, width, height) tf = txBox.text_frame # 设置文本 p = tf.paragraphs[0] p.text = "格式化文本示例" p.alignment = PP_ALIGN.CENTER # 设置字体格式 run = p.runs[0] run.font.bold = True run.font.size = Pt(44) run.font.color.rgb = RGBColor(0, 112, 192) # 蓝色 # 添加正文文本框 left = Inches(1) top = Inches(2) width = Inches(8) height = Inches(4) txBox = slide.shapes.add_textbox(left, top, width, height) tf = txBox.text_frame # 添加段落并设置格式 p = tf.paragraphs[0] p.text = "这是第一段文本,演示基本格式。" # 添加第二段 p = tf.add_paragraph() p.text = "这是第二段,演示不同的字体样式。" # 添加带有多种格式的段落 p = tf.add_paragraph() p.text = "" # 先创建空段落 # 添加不同格式的文本 run = p.add_run() run.text = "这部分文本是" run = p.add_run() run.text = "粗体" run.font.bold = True run = p.add_run() run.text = ",这部分是" run = p.add_run() run.text = "斜体" run.font.italic = True run = p.add_run() run.text = ",这部分是" run = p.add_run() run.text = "红色" run.font.color.rgb = RGBColor(255, 0, 0) run = p.add_run() run.text = ",这部分是" run = p.add_run() run.text = "大号字体" run.font.size = Pt(24) # 保存演示文稿 prs.save("格式化文本演示.pptx") print("演示文稿已保存为: 格式化文本演示.pptx") # 执行函数 # create_formatted_text_slide()
插入图片
from pptx import Presentation from pptx.util import Inches def add_picture_to_slide(): """向幻灯片中添加图片""" prs = Presentation() # 添加标题和内容布局的幻灯片 slide_layout = prs.slide_layouts[1] slide = prs.slides.add_slide(slide_layout) # 设置标题 title = slide.shapes.title title.text = "插入图片示例" # 添加图片 # 注意:请确保图片文件存在,或替换为实际的图片路径 try: left = Inches(1) top = Inches(2) pic_path = "example_image.jpg" # 替换为实际图片路径 # 添加图片并设置大小 pic = slide.shapes.add_picture(pic_path, left, top, width=Inches(4)) # 在图片下方添加说明文字 left = Inches(1) top = Inches(5) width = Inches(4) height = Inches(1) txBox = slide.shapes.add_textbox(left, top, width, height) tf = txBox.text_frame tf.text = "图片说明:这是一个示例图片" except Exception as e: # 如果图片不存在,添加错误提示 content = slide.placeholders[1] tf = content.text_frame tf.text = f"图片添加失败: {e}\n\n请确保图片文件存在,或替换为实际的图片路径。" # 保存演示文稿 prs.save("图片演示.pptx") print("演示文稿已保存为: 图片演示.pptx") # 执行函数 # add_picture_to_slide()
添加形状
from pptx import Presentation from pptx.util import Inches from pptx.enum.shapes import MSO_SHAPE from pptx.dml.color import RGBColor def add_shapes_to_slide(): """向幻灯片中添加各种形状""" prs = Presentation() # 添加空白幻灯片 blank_slide_layout = prs.slide_layouts[6] slide = prs.slides.add_slide(blank_slide_layout) # 添加标题 left = Inches(1) top = Inches(0.5) width = Inches(8) height = Inches(1) txBox = slide.shapes.add_textbox(left, top, width, height) tf = txBox.text_frame tf.text = "各种形状示例" tf.paragraphs[0].alignment = PP_ALIGN.CENTER tf.paragraphs[0].runs[0].font.bold = True tf.paragraphs[0].runs[0].font.size = Pt(32) # 添加矩形 left = Inches(1) top = Inches(2) width = Inches(2) height = Inches(1) shape = slide.shapes.add_shape( MSO_SHAPE.RECTANGLE, left, top, width, height ) shape.fill.solid() shape.fill.fore_color.rgb = RGBColor(255, 0, 0) # 红色 shape.line.color.rgb = RGBColor(0, 0, 0) # 黑色边框 # 添加椭圆 left = Inches(4) top = Inches(2) width = Inches(2) height = Inches(1) shape = slide.shapes.add_shape( MSO_SHAPE.OVAL, left, top, width, height ) shape.fill.solid() shape.fill.fore_color.rgb = RGBColor(0, 176, 80) # 绿色 shape.line.color.rgb = RGBColor(0, 0, 0) # 黑色边框 # 添加五角星 left = Inches(7) top = Inches(2) width = Inches(1.5) height = Inches(1.5) shape = slide.shapes.add_shape( MSO_SHAPE.STAR_5_POINT, left, top, width, height ) shape.fill.solid() shape.fill.fore_color.rgb = RGBColor(255, 192, 0) # 黄色 shape.line.color.rgb = RGBColor(0, 0, 0) # 黑色边框 # 添加箭头 left = Inches(1) top = Inches(4) width = Inches(2) height = Inches(1) shape = slide.shapes.add_shape( MSO_SHAPE.ARROW_RIGHT, left, top, width, height ) shape.fill.solid() shape.fill.fore_color.rgb = RGBColor(0, 112, 192) # 蓝色 # 添加带文本的形状 left = Inches(4) top = Inches(4) width = Inches(4) height = Inches(1) shape = slide.shapes.add_shape( MSO_SHAPE.ROUNDED_RECTANGLE, left, top, width, height ) shape.fill.solid() shape.fill.fore_color.rgb = RGBColor(112, 48, 160) # 紫色 # 向形状中添加文本 tf = shape.text_frame tf.text = "带文本的形状" tf.paragraphs[0].alignment = PP_ALIGN.CENTER tf.paragraphs[0].runs[0].font.color.rgb = RGBColor(255, 255, 255) # 白色文字 # 保存演示文稿 prs.save("形状演示.pptx") print("演示文稿已保存为: 形状演示.pptx") # 执行函数 # add_shapes_to_slide()
创建表格
from pptx import Presentation from pptx.util import Inches, Pt from pptx.enum.text import PP_ALIGN from pptx.dml.color import RGBColor def create_table_slide(): """创建包含表格的幻灯片""" prs = Presentation() # 添加标题和内容布局的幻灯片 slide_layout = prs.slide_layouts[5] # 仅标题布局 slide = prs.slides.add_slide(slide_layout) # 设置标题 title = slide.shapes.title title.text = "销售数据表格" # 定义表格位置和大小 left = Inches(1.5) top = Inches(2) width = Inches(7) height = Inches(3) # 创建表格 (4行3列) rows, cols = 4, 3 table = slide.shapes.add_table(rows, cols, left, top, width, height).table # 设置列宽 table.columns[0].width = Inches(3) table.columns[1].width = Inches(2) table.columns[2].width = Inches(2) # 填充表头 headers = ['产品名称', '销售数量', '销售金额'] for i, header in enumerate(headers): cell = table.cell(0, i) cell.text = header # 设置表头格式 cell.fill.solid() cell.fill.fore_color.rgb = RGBColor(0, 112, 192php) # 蓝色背景 paragraph = cell.text_frame.paragraphs[0] paragraph.alignment = PP_ALIGN.CENTER paragraph.font.bold = True paragraph.font.color.rgb = RGBColor(255, 255, 255) # 白色文字 # 填充数据 data = [ ['笔记本电脑', '120台', '720,000'], ['办公桌椅', '200套', '180,000'], ['打印机', '45台', '58,500'] ] for row_idx, row_data in enumerate(data): for col_idx, cell_text in enumerate(row_data): cell = table.cell(row_idx + 1, col_idx) cell.text = cell_text # 设置单元格格式 paragraph = cell.text_frame.paragraphs[0] if col_idx == 0: paragraph.alignment = PP_ALIGN.LEFT else: paragraph.alignment = PP_ALIGN.CENTER # 保存演示文稿 prs.save("表格演示.pptx") print("演示文稿已保存为: 表格演示.pptx") # 执行函数 # create_table_slide()
插入图表
from pptx import Presentation from pptx.util import Inches from pptx.enum.chart import XL_CHART_TYPE from pptx.chart.data import CategoryChartData def create_chart_slide(): """创建包含图表的幻灯片""" prs = Presentation() # 添加标题和内容布局的幻灯片 slide_layout = prs.slide_layouts[5] # 仅标题布局 slide = prs.slides.add_slide(slide_layout) # 设置标题 title = slide.shapes.title title.text = "季度销售数据图表" # 创建图表数据 chart_data = CategoryChartData() chart_data.categories = ['第一季度', '第二季度', '第三季度', '第四季度'] chart_data.add_series('笔记本电脑', (120, 95, 150, 180)) chart_data.add_series('办公桌椅', (70, 120, 85, 90)) chart_data.add_series('打印机', (30, 25, 45, 55)) # 添加柱状图 x, y, cx, cy = Inches(1), Inches(2), Inches(8), 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 = "季度销售数量对比" # 保存演示文稿 prs.save("图表演示.pptx") print("演示文稿已保存为: 图表演示.pptx") # 创建第二张幻灯片,展示饼图 slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title title.text = "第四季度销售占比" # 创建饼图数据 chart_data = CategoryChartData() chart_data.categories = ['笔记本电脑', '办公桌椅', '打印机'] chart_data.add_series('销售额', (720000, 180000, 58500)) # 添加饼图 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 = "第四季度销售额占比" # 保存更新后的演示文稿 prs.save("图表演示.pptx") # 执行函数 # create_chart_slide()
模板复用与批量生成
使用模板创建演示文稿
from pptx import Presentation from pptx.util import Inches def use_template(): """使用模板创建演示文稿""" # 加载模板文件 # 注意:请确保模板文件存在,或替换为实际的模板路径 try: template_path = "template.pptx" # 替换为实际模板路径 prs = Presentation(template_path) # 添加新幻灯片(使用模板中的布局) slide_layout = prs.slide_layouts[1] # 假设使用第二种布局 slide = prs.slides.add_slide(slide_layout) # 设置标题和内容 title = slide.shapes.title content = slide.placeholders[1] title.text = "使用模板创建的幻灯片" tf = content.text_frame tf.text = "使用模板的优势:" p = tf.add_paragraph() p.text = "保持一致的品牌形象" p.level = 1 p = tf.add_paragraph() p.text = "节省设计时间" p.level = 1 p = tf.add_paragraph() p.text = "确保专业的外观" p.level = 1 # 保存演示文稿 prs.save("基于模板的演示文稿.pptx") print("演示文稿已保存为: 基于模板的演示文稿.pptx") except Exception as e: print(f"使用模板创建演示文稿失败: {e}") print("请确保模板文件存在,或替换为实际的模板路径。") # 如果模板不存在,创建一个新的演示文稿作为示例 create_template_example() def create_template_example(): """创建一个模板示例""" prs = Presentation() # 设置幻灯片尺寸为宽屏(16:9) prs.slide_width = Inches(13.33) prs.slide_height = Inches(7.5) # 添加标题幻灯片 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 = "2023年第四季度" # 添加内容幻灯片 slide_layout = prs.slide_layouts[1] slide = prs.slides.add_slide(slide_layout) # 设置标题和内容 title = slide.shapes.title content = slide.placeholders[1] title.text = "季度目标" tf = content.text_frame tf.text = "主要业务目标:" p = tf.add_paragraph() p.text = "提高销售额 15%" p.level = 1 p = tf.add_paragraph() p.text = "拓展两个新市场" p.level = 1 p = tf.add_paragraph() p.text = "推出新产品线" p.level = 1 # 保存为模板 prs.save("template.pptx") print("模板已创建: template.pptx") print("您可以修改此模板,然后再次运行use_template()函数。") # 执行函数 # use_template()
批量生成演示文稿
from pptx import Presentation from pptx.util import Inches, Pt from pptx.enum.text import PP_ALIGN from pptx.dml.color import RGBColor import os def BATch_generate_presentations(data_list): """批量生成演示文稿""" # 创建输出目录 output_dir = "generated_presentations" if not os.path.exists(output_dir): os.makedirs(output_dir) # 加载模板(如果存在) template_path = "template.pptx" template_exists = os.path.exists(template_path) for idx, data in enumerate(data_list): # 创建演示文稿(使用模板或创建新的) if template_exists: prs = Presentation(template_path) else: prs = Presentation() # 添加标题幻灯片 slide_layout = prs.slide_layouts[0] slide = prs.slides.add_slide(slide_layout) # 设置标题和副标题 title = slide.shapes.title subtitle = slide.placeholders[1] title.text = data['title'] subtitle.text = data['subtitle'] # 添加内容幻灯片 - 项目概述 slide_layout = prs.slide_layouts[1] slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title content = slide.placeholders[1] title.text = "项目概述" tf = content.text_frame tf.text = data['overview'] # 添加内容幻灯片 - 关键数据 slide_layout = prs.slide_layouts[1] slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title title.text = "关键数据" # 创建表格 left = Inches(2) top = Inches(2) width = Inches(6) height = Inches(2) # 创建表格 (4行2列) rows, cols = len(data['key_metrics']) + 1, 2 table = slide.shapes.add_table(rows, cols, left, top, width, height).table # 设置表头 cell = table.cell(0, 0) cell.text = "指标" cell.fill.solid() cell.fill.fore_color.rgb = RGBColor(0, 112, 192) # 蓝色背景 cell.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255) # 白色文字 cell = table.cell(0, 1) cell.text = "数值" cell.fill.solid() cell.fill.fore_color.rgb = RGBColor(0, 112, 192) # 蓝色背景 cell.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255) # 白色文字 # 填充数据 for i, (metric, value) in enumerate(data['key_metrics'].items()): table.cell(i + 1, 0).text = metric table.cell(i + 1, 1).text = str(value) # 添加内容幻灯片 - 结论 slide_layout = prs.slide_layouts[1] slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title content = slide.placeholders[1] title.text = "结论与建议" tf = content.text_frame for i, point in enumerate(data['conclusions']): if i == 0: tf.text = point else: p = tf.add_paragraph() p.text = point # 保存演示文稿 output_file = os.path.join(output_dir, f"{data['filename']}.pptx") prs.save(output_file) print(f"已生成演示文稿: {output_file}") # 示例数据 project_data = [ { 'title': "A项目季度报告", 'subtitle': "2023年第四季度", 'overview': "A项目是我们的核心业务项目,专注于提供企业级数据分析解决方案。", 'key_metrics': { '客户数量': 45, '收入增长': "23%", '客户满意度': "92%", '市场份额': "18%" }, 'conclusions': [ "A项目在本季度表现优异,超过预期目标。", "建议增加研发投入,进一步提升产品竞争力。", "计划在下一季度拓展国际市场。" ], 'filename': "A项目报告" }, { 'title': "B项目季度报告", 'subtitle': "2023年第四季度", 'overview': "B项目是我们的创新孵化项目,专注于人工智能技术在办公自动化领域的应用。", 'key_metrics': { '用户数量': 1200, '收入增长': "45%", '活跃度': "78%", '转化率': "8.5%" }, 'conclusions': [ "B项目增长迅速,用户反馈积极。", "需要解决部分性能问题,提高系统稳定性。", "建议增加营销预算,扩大用户基础。" ], 'filename': "B项目报告" } ] # 执行批量生成 # batch_generate_presentations(project_data)
实际应用场景
场景一:自动生成销售报告
from pptx import Presentation from pptx.util import Inches, Pt from pptx.enum.text import PP_ALIGN from pptx.dml.color import RGBColor from pptx.enum.chart import XL_CHART_TYPE from pptx.chart.data import CategoryChartData import pandas as pd import os from datetime import datetime def generate_sales_report(sales_data_file): """根据销售数据自动生成销售报告演示文稿""" # 读取销售数据 try: df = pd.read_excel(sales_data_file) except Exception as e: print(f"读取销售数据失败: {e}") print("创建示例数据进行演示...") # 创建示例数据 data = { '日期': pd.date_range(start='2023-10-01', periods=12, freq='W'), '产品': ['笔记本电脑', '办公桌椅', '打印机', '笔记本电脑', '办公桌椅', '打印机', '笔记本电脑', '办公桌椅', '打印机', '笔记本电脑', '办公桌椅', '打印机'], '销售量': [25, 40, 10, 30, 35, 8, 28, 42, 12, 35, 38, 15], '销售额': [150000, 36000, 13000, 180000, 31500, 10400, 168000, 37800, 15600, 210000, 34200, 19500] } df = pd.DataFrame(data) # 保存示例数据 df.to_excel("sales_data_example.xlsx", index=False) sales_data_file = "sales_data_example.xlsx" print(f"已创建示例数据文件: {sales_data_file}") # 创建演示文稿 prs = Presentation() # 设置幻灯片尺寸为宽屏(16:9) prs.slide_width = Inches(13.33) prs.slide_height = Inches(7.5) # 添加标题幻灯片 slide_layout = prs.slide_layouts[0] slide = prs.slides.add_slide(slide_layout) # 获取当前日期 current_date = datetime.now().strftime("%Y年%m月%d日") # 设置标题和副标题 title = slide.shapes.title subtitle = slide.placeholders[1] title.text = "销售业绩报告" subtitle.text = f"生成日期: {current_date}" # 数据处理 - 按产品分组统计 product_sales = df.groupby('产品').agg({'销售量': 'sum', '销售额': 'sum'}).reset_index() # 添加销售总览幻灯片 slide_layout = prs.slide_layouts[5] # 仅标题布局 slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title title.text = "销售总览" # 创建表格 rows, cols = len(product_sales) + 1, 3 left = Inches(2) top = Inches(2) width = Inches(9) height = Inches(0.8 * rows) table = slide.shapes.add_table(rows, cols, left, top, width, height).table # 设置列宽 table.columns[0].width = Inches(3) table.columns[1].width = Inches(3) table.columns[2].width = Inches(3) # 添加表头 headers = ['产品', '总销售量', '总销售额'] for i, header in enumerate(headers): cell = table.cell(0, i) cell.text = header cell.fill.solid() cell.fill.fore_color.rgb = RGBColor(0, 112, 192) # 蓝色背景 paragraph = cell.text_frame.paragraphs[0] paragraph.alignment = PP_ALIGN.CENTER paragraph.font.bold = True paragraph.font.color.rgb = RGBColor(255, 255, 255) # 白色文字 # 填充数据 for i, row in product_sales.iterrows(): table.cell(i + 1, 0).text = row['产品'] table.cell(i + 1, 1).text = str(row['销售量']) table.cell(i + 1, 2).text = f"{row['销售额']:,.2f}" # 设置对齐方式 table.cell(i + 1, 0).text_frame.paragraphs[0].alignment = PP_ALIGN.LEFT table.cell(i + 1, 1).text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER table.cell(i + 1, 2).text_frame.paragraphs[0].alignment = PP_ALI编程GN.RIGHT # 添加销售趋势图幻灯片 slide_layout = prs.slide_layouts[5] # 仅标题布局 slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title title.text = "销售趋势" # 数据处理 - 按日期分组统计 df['周'] = df['日期'].dt.strftime('%m-%d') weekly_sales = df.groupby('周').agg({'销售额': 'sum'}).reset_index() # 创建图表数据 chart_data = CategoryChartData() chart_data.categories = weekly_sales['周'].tolist() chart_data.add_series('销售额', weekly_sales['销售额'].tolist()) # 添加折线图 x, y, cx, cy = Inches(2), Inches(2), Inches(9), Inches(4.5) chart = slide.shapes.add_chart( XL_CHART_TYPE.LINE, x, y, cx, cy, chart_data ).chart # 设置图表标题 chart.has_title = True chart.chart_title.text_frame.text = "周销售额趋势" # 添加产品占比幻灯片 slide_layout = prs.slide_layouts[5] # 仅标题布局 slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title title.text = "产品销售占比" # 创建饼图数据 chart_data = CategoryChartData() chart_data.categories = product_sales['产品'].tolist() chart_data.add_series('销售额', product_sales['销售额'].tolist()) # 添加饼图 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 = "销售额占比" # 添加结论幻灯片 slide_layout = prs.slide_layouts[1] # 标题和内容布局 slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title content = slide.placeholders[1] title.text = "分析与建议" # 计算一些基本统计数据 total_sales = df['销售额'].sum() best_product = product_sales.loc[product_sales['销售额'].idxmax()]['产品'] best_product_sales = product_sales['销售额'].max() best_product_percentage = (best_product_sales / total_sales) * 100 # 添加分析内容 tf = content.text_frame tf.text = f"总销售额: {total_sales:,.2f}" p = tf.add_paragraph() p.text = f"最畅销产品: {best_product},占总销售额的 {best_product_percentage:.1f}%" p = tf.add_paragraph() p.text = "建议:" p = tf.add_paragraph() p.text = f"增加{best_product}的库存,满足市场需求" p.level = 1 p = tf.add_paragraph() p.text = "针对销售较低的产品,考虑调整营销策略或价格" p.level = 1 p = tf.add_paragraph() p.text = "关注销售趋势,及时调整销售目标" p.level = 1 # 保存演示文稿 report_filename = "销售报告.pptx" prs.save(report_filename) print(f"销售报告已生成: {report_filename}") return report_filename # 执行函数 # generate_sales_report("sales_data.xlsx")
场景二:培训课程幻灯片生成器
from pptx import Presentation from pptx.util import Inches, Pt from pptx.enum.text import PP_ALIGN from pptx.dml.color import RGBColor import os def generate_training_slides(course_data): """生成培训课程幻灯片""" # 创建演示文稿 prs = Presentation() # 添加标题幻灯片 slide_layout = prs.slide_layouts[0] slide = prs.slides.add_slide(slide_layout) # 设置标题和副标题 title = slide.shapes.title subtitle = slide.placeholders[1] title.text = course_data['title'] subtitle.text = f"讲师: {course_data['instructor']}\n{course_data['date']}" # 添加课程目标幻灯片 slide_layout = prs.slide_layouts[1] slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title content = slide.placeholjavascriptders[1] title.text = "课程目标" tf = content.text_frame tf.text = "完成本课程后,您将能够:" for objective in course_data['objectives']: p = tf.add_paragraph() p.text = objective p.level = 1 # 添加课程大纲幻灯片 slide_layout = prs.slide_layouts[1] slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title content = slide.placeholders[1] title.text = "课程大纲" tf = content.text_frame for i, module in enumerate(course_data['modules'], 1): if i == 1: tf.text = f"{i}. {module['title']}" else: p = tf.add_paragraph() p.text = f"{i}. {module['title']}" # 为每个模块创建内容幻灯片 for i, module in enumerate(course_data['modules'], 1): # 模块标题幻灯片 slide_layout = prs.slide_layouts[2] # 节标题布局 slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title title.text = f"模块 {i}: {module['title']}" # 模块内容幻灯片 for topic in module['topics']: slide_layout = prs.slide_layouts[1] # 标题和内容布局 slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title content = slide.placeholders[1] title.text = topic['title'] tf = content.text_frame for j, point in enumerate(topic['points']): if j == 0: tf.text = point else: p = tf.add_paragraph() p.text = point # 添加总结幻灯片 slide_layout = prs.slide_layouts[1] slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title content = slide.placeholders[1] title.text = "总结" tf = content.text_frame for i, point in enumerate(course_data['summary']): if i == 0: tf.text = point else: p = tf.add_paragraph() p.text = point # 添加问答幻灯片 slide_layout = prs.slide_layouts[5] # 仅标题布局 slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title title.text = "问题与讨论" # 在幻灯片中央添加大问号 left = Inches(5.5) top = Inches(3) width = Inches(2) height = Inches(2) txBox = slide.shapes.add_textbox(left, top, width, height) tf = txBox.text_frame tf.text = "?" p = tf.paragraphs[0] p.alignmentphp = PP_ALIGN.CENTER run = p.runs[0] run.font.size = Pt(120) run.font.bold = True run.font.color.rgb = RGBColor(0, 112, 192) # 蓝色 # 保存演示文稿 output_file = f"{course_data['title'].replace(' ', '_')}_培训课程.pptx" prs.save(output_file) print(f"培训幻灯片已生成: {output_file}") return output_file # 示例课程数据 python_course = { 'title': "Python办公自动化实战", 'instructor': "张教授", 'date': "2023年12月15日", 'objectives': [ "理解Python在办公自动化中的应用场景", "掌握Excel、Word和PPT文档的自动化处理", "学会使用Python处理文件和目录", "能够开发简单的办公自动化脚本" ], 'modules': [ { 'title': "Python基础入门", 'topics': [ { 'title': "Python环境搭建", 'points': [ "安装Python解释器", "配置开发环境", "使用pip安装第三方库", "编写第一个Python程序" ] }, { 'title': "Python基本语法", 'points': [ "变量和数据类型", "条件语句和循环", "函数定义和China编程调用", "模块和包的使用" ] } ] }, { 'title': "Excel文档自动化", 'topics': [ { 'title': "使用openpyxl操作Excel", 'points': [ "读取Excel文件", "修改单元格内容", "添加公式和格式", "创建图表和数据透视表" ] }, { 'title': "使用pandas处理Excel数据", 'points': [ "数据导入和导出", "数据清洗和转换", "数据分析和统计", "数据可视化" ] } ] }, { 'title': "Word和PPT文档自动化", 'topics': [ { 'title': "使用python-docx操作Word", 'points': [ "创建和修改Word文档", "添加文本、图片和表格", "设置格式和样式", "自动生成报告" ] }, { 'title': "使用python-pptx操作PPT", 'points': [ "创建和修改PPT演示文稿", "添加幻灯片和内容", "插入图表和图形", "批量生成演示文稿" ] } ] } ], 'summary': [ "Python是办公自动化的强大工具", "掌握核心库可以处理各种办公文档", "自动化脚本可以大幅提高工作效率", "持续学习和实践是提高技能的关键" ] } # 执行函数 # generate_training_slides(python_course)
通过以上代码示例和应用场景,你可以轻松掌握Python PPT演示文稿自动化的各种技巧,大幅提高工作效率。无论是创建简单的演示文稿,还是批量生成复杂的报告、培训材料,Python都能帮你轻松应对。
以上就是Python使用python-pptx自动化操作和生成PPT的详细内容,更多关于Python自动化操作PPT的资料请关注编程China编程(www.chinasem.cn)其它相关文章!
这篇关于Python使用python-pptx自动化操作和生成PPT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!