欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用python-pptx自動(dòng)化操作和生成PPT

 更新時(shí)間:2025年08月14日 08:45:18   作者:小磊哥er  
這篇文章主要為大家詳細(xì)介紹了如何使用python-pptx庫(kù)實(shí)現(xiàn)PPT自動(dòng)化,并提供實(shí)用的代碼示例和應(yīng)用場(chǎng)景,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在現(xiàn)代商業(yè)和教育環(huán)境中,PowerPoint演示文稿是信息傳遞的重要工具。通過(guò)Python自動(dòng)化PPT創(chuàng)建和編輯過(guò)程,可以大幅提高工作效率,特別是在需要批量生成或更新演示文稿的場(chǎng)景下。本文將介紹如何使用python-pptx庫(kù)實(shí)現(xiàn)PPT自動(dòng)化,并提供實(shí)用的代碼示例和應(yīng)用場(chǎng)景。

使用python-pptx操作PPT文檔

安裝python-pptx

pip install python-pptx

基礎(chǔ)概念

在Python中,可以使用python-pptx庫(kù)實(shí)現(xiàn)PPT文件的自動(dòng)化操作。需要注意的是,python-pptx只支持*.pptx文件格式的PPT文件(Office 2007及以上版本)。

一個(gè)PPT文件通常由多個(gè)幻燈片組成,每個(gè)幻燈片都有相應(yīng)的布局。通過(guò)python-pptx庫(kù)創(chuàng)建PPT文件的過(guò)程其實(shí)就是創(chuàng)建一個(gè)空的PPT文件,然后不斷向其中添加具有某種布局的幻燈片的過(guò)程。

創(chuàng)建新的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():
    """創(chuàng)建一個(gè)簡(jiǎn)單的PPT演示文稿"""
    # 創(chuàng)建演示文稿對(duì)象
    prs = Presentation()
    
    # 獲取第一個(gè)布局(標(biāo)題幻燈片)
    title_slide_layout = prs.slide_layouts[0]
    
    # 添加標(biāo)題幻燈片
    slide = prs.slides.add_slide(title_slide_layout)
    
    # 設(shè)置標(biāo)題和副標(biāo)題
    title = slide.shapes.title
    subtitle = slide.placeholders[1]
    
    title.text = "Python自動(dòng)化辦公"
    subtitle.text = "使用python-pptx創(chuàng)建精美演示文稿"
    
    # 添加內(nèi)容幻燈片
    bullet_slide_layout = prs.slide_layouts[1]  # 標(biāo)題和內(nèi)容布局
    slide = prs.slides.add_slide(bullet_slide_layout)
    
    # 設(shè)置標(biāo)題
    title = slide.shapes.title
    title.text = "python-pptx的主要功能"
    
    # 設(shè)置內(nèi)容(項(xiàng)目符號(hào)列表)
    content = slide.placeholders[1]
    tf = content.text_frame
    
    # 添加項(xiàng)目符號(hào)
    tf.text = "創(chuàng)建和編輯幻燈片"
    
    p = tf.add_paragraph()
    p.text = "添加文本、圖片和形狀"
    p.level = 1  # 縮進(jìn)級(jí)別
    
    p = tf.add_paragraph()
    p.text = "創(chuàng)建表格和圖表"
    p.level = 1
    
    p = tf.add_paragraph()
    p.text = "應(yīng)用主題和樣式"
    p.level = 0  # 恢復(fù)到第一級(jí)
    
    # 保存演示文稿
    prs.save("簡(jiǎn)單演示文稿.pptx")
    print("演示文稿已保存為: 簡(jiǎn)單演示文稿.pptx")

# 執(zhí)行函數(shù)
create_simple_presentation()

查看可用的幻燈片布局

from pptx import Presentation

def explore_slide_layouts():
    """查看可用的幻燈片布局"""
    prs = Presentation()
    
    print("可用的幻燈片布局:")
    for i, layout in enumerate(prs.slide_layouts):
        # 獲取布局名稱(chēng)
        layout_name = "未命名布局"
        for shape in layout.placeholders:
            if shape.is_title:
                layout_name = f"布局 {i} - {shape.text if shape.text else '標(biāo)題布局'}"
                break
        
        print(f"索引 {i}: {layout_name}")
        print("  占位符:")
        for shape in layout.placeholders:
            print(f"    索引 {shape.placeholder_format.idx}: {shape.name}")
    
    print("\n常用布局索引參考:")
    print("0 - 標(biāo)題幻燈片")
    print("1 - 標(biāo)題和內(nèi)容")
    print("2 - 節(jié)標(biāo)題")
    print("3 - 兩欄內(nèi)容")
    print("4 - 比較")
    print("5 - 僅標(biāo)題")
    print("6 - 空白")
    print("7 - 標(biāo)題和對(duì)象")
    print("8 - 對(duì)象和標(biāo)題")

# 執(zhí)行函數(shù)
# 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():
    """創(chuàng)建包含格式化文本的幻燈片"""
    prs = Presentation()
    
    # 添加空白幻燈片
    blank_slide_layout = prs.slide_layouts[6]
    slide = prs.slides.add_slide(blank_slide_layout)
    
    # 添加標(biāo)題文本框
    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
    
    # 設(shè)置文本
    p = tf.paragraphs[0]
    p.text = "格式化文本示例"
    p.alignment = PP_ALIGN.CENTER
    
    # 設(shè)置字體格式
    run = p.runs[0]
    run.font.bold = True
    run.font.size = Pt(44)
    run.font.color.rgb = RGBColor(0, 112, 192)  # 藍(lán)色
    
    # 添加正文文本框
    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
    
    # 添加段落并設(shè)置格式
    p = tf.paragraphs[0]
    p.text = "這是第一段文本,演示基本格式。"
    
    # 添加第二段
    p = tf.add_paragraph()
    p.text = "這是第二段,演示不同的字體樣式。"
    
    # 添加帶有多種格式的段落
    p = tf.add_paragraph()
    p.text = ""  # 先創(chuàng)建空段落
    
    # 添加不同格式的文本
    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 = "大號(hào)字體"
    run.font.size = Pt(24)
    
    # 保存演示文稿
    prs.save("格式化文本演示.pptx")
    print("演示文稿已保存為: 格式化文本演示.pptx")

# 執(zhí)行函數(shù)
# create_formatted_text_slide()

插入圖片

from pptx import Presentation
from pptx.util import Inches

def add_picture_to_slide():
    """向幻燈片中添加圖片"""
    prs = Presentation()
    
    # 添加標(biāo)題和內(nèi)容布局的幻燈片
    slide_layout = prs.slide_layouts[1]
    slide = prs.slides.add_slide(slide_layout)
    
    # 設(shè)置標(biāo)題
    title = slide.shapes.title
    title.text = "插入圖片示例"
    
    # 添加圖片
    # 注意:請(qǐng)確保圖片文件存在,或替換為實(shí)際的圖片路徑
    try:
        left = Inches(1)
        top = Inches(2)
        pic_path = "example_image.jpg"  # 替換為實(shí)際圖片路徑
        
        # 添加圖片并設(shè)置大小
        pic = slide.shapes.add_picture(pic_path, left, top, width=Inches(4))
        
        # 在圖片下方添加說(shuō)明文字
        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 = "圖片說(shuō)明:這是一個(gè)示例圖片"
    except Exception as e:
        # 如果圖片不存在,添加錯(cuò)誤提示
        content = slide.placeholders[1]
        tf = content.text_frame
        tf.text = f"圖片添加失敗: {e}\n\n請(qǐng)確保圖片文件存在,或替換為實(shí)際的圖片路徑。"
    
    # 保存演示文稿
    prs.save("圖片演示.pptx")
    print("演示文稿已保存為: 圖片演示.pptx")

# 執(zhí)行函數(shù)
# 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)
    
    # 添加標(biāo)題
    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)  # 藍(lán)色
    
    # 添加帶文本的形狀
    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")

# 執(zhí)行函數(shù)
# add_shapes_to_slide()

創(chuàng)建表格

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():
    """創(chuàng)建包含表格的幻燈片"""
    prs = Presentation()
    
    # 添加標(biāo)題和內(nèi)容布局的幻燈片
    slide_layout = prs.slide_layouts[5]  # 僅標(biāo)題布局
    slide = prs.slides.add_slide(slide_layout)
    
    # 設(shè)置標(biāo)題
    title = slide.shapes.title
    title.text = "銷(xiāo)售數(shù)據(jù)表格"
    
    # 定義表格位置和大小
    left = Inches(1.5)
    top = Inches(2)
    width = Inches(7)
    height = Inches(3)
    
    # 創(chuàng)建表格 (4行3列)
    rows, cols = 4, 3
    table = slide.shapes.add_table(rows, cols, left, top, width, height).table
    
    # 設(shè)置列寬
    table.columns[0].width = Inches(3)
    table.columns[1].width = Inches(2)
    table.columns[2].width = Inches(2)
    
    # 填充表頭
    headers = ['產(chǎn)品名稱(chēng)', '銷(xiāo)售數(shù)量', '銷(xiāo)售金額']
    for i, header in enumerate(headers):
        cell = table.cell(0, i)
        cell.text = header
        
        # 設(shè)置表頭格式
        cell.fill.solid()
        cell.fill.fore_color.rgb = RGBColor(0, 112, 192)  # 藍(lán)色背景
        
        paragraph = cell.text_frame.paragraphs[0]
        paragraph.alignment = PP_ALIGN.CENTER
        paragraph.font.bold = True
        paragraph.font.color.rgb = RGBColor(255, 255, 255)  # 白色文字
    
    # 填充數(shù)據(jù)
    data = [
        ['筆記本電腦', '120臺(tái)', '¥720,000'],
        ['辦公桌椅', '200套', '¥180,000'],
        ['打印機(jī)', '45臺(tái)', '¥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
            
            # 設(shè)置單元格格式
            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")

# 執(zhí)行函數(shù)
# 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():
    """創(chuàng)建包含圖表的幻燈片"""
    prs = Presentation()
    
    # 添加標(biāo)題和內(nèi)容布局的幻燈片
    slide_layout = prs.slide_layouts[5]  # 僅標(biāo)題布局
    slide = prs.slides.add_slide(slide_layout)
    
    # 設(shè)置標(biāo)題
    title = slide.shapes.title
    title.text = "季度銷(xiāo)售數(shù)據(jù)圖表"
    
    # 創(chuàng)建圖表數(shù)據(jù)
    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('打印機(jī)', (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
    
    # 設(shè)置圖表標(biāo)題
    chart.has_title = True
    chart.chart_title.text_frame.text = "季度銷(xiāo)售數(shù)量對(duì)比"
    
    # 保存演示文稿
    prs.save("圖表演示.pptx")
    print("演示文稿已保存為: 圖表演示.pptx")
    
    # 創(chuàng)建第二張幻燈片,展示餅圖
    slide = prs.slides.add_slide(slide_layout)
    title = slide.shapes.title
    title.text = "第四季度銷(xiāo)售占比"
    
    # 創(chuàng)建餅圖數(shù)據(jù)
    chart_data = CategoryChartData()
    chart_data.categories = ['筆記本電腦', '辦公桌椅', '打印機(jī)']
    chart_data.add_series('銷(xiāo)售額', (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
    
    # 設(shè)置圖表標(biāo)題
    chart.has_title = True
    chart.chart_title.text_frame.text = "第四季度銷(xiāo)售額占比"
    
    # 保存更新后的演示文稿
    prs.save("圖表演示.pptx")

# 執(zhí)行函數(shù)
# create_chart_slide()

模板復(fù)用與批量生成

使用模板創(chuàng)建演示文稿

from pptx import Presentation
from pptx.util import Inches

def use_template():
    """使用模板創(chuàng)建演示文稿"""
    # 加載模板文件
    # 注意:請(qǐng)確保模板文件存在,或替換為實(shí)際的模板路徑
    try:
        template_path = "template.pptx"  # 替換為實(shí)際模板路徑
        prs = Presentation(template_path)
        
        # 添加新幻燈片(使用模板中的布局)
        slide_layout = prs.slide_layouts[1]  # 假設(shè)使用第二種布局
        slide = prs.slides.add_slide(slide_layout)
        
        # 設(shè)置標(biāo)題和內(nèi)容
        title = slide.shapes.title
        content = slide.placeholders[1]
        
        title.text = "使用模板創(chuàng)建的幻燈片"
        
        tf = content.text_frame
        tf.text = "使用模板的優(yōu)勢(shì):"
        
        p = tf.add_paragraph()
        p.text = "保持一致的品牌形象"
        p.level = 1
        
        p = tf.add_paragraph()
        p.text = "節(jié)省設(shè)計(jì)時(shí)間"
        p.level = 1
        
        p = tf.add_paragraph()
        p.text = "確保專(zhuān)業(yè)的外觀"
        p.level = 1
        
        # 保存演示文稿
        prs.save("基于模板的演示文稿.pptx")
        print("演示文稿已保存為: 基于模板的演示文稿.pptx")
    except Exception as e:
        print(f"使用模板創(chuàng)建演示文稿失敗: {e}")
        print("請(qǐng)確保模板文件存在,或替換為實(shí)際的模板路徑。")
        
        # 如果模板不存在,創(chuàng)建一個(gè)新的演示文稿作為示例
        create_template_example()

def create_template_example():
    """創(chuàng)建一個(gè)模板示例"""
    prs = Presentation()
    
    # 設(shè)置幻燈片尺寸為寬屏(16:9)
    prs.slide_width = Inches(13.33)
    prs.slide_height = Inches(7.5)
    
    # 添加標(biāo)題幻燈片
    slide_layout = prs.slide_layouts[0]
    slide = prs.slides.add_slide(slide_layout)
    
    # 設(shè)置標(biāo)題和副標(biāo)題
    title = slide.shapes.title
    subtitle = slide.placeholders[1]
    
    title.text = "公司季度報(bào)告模板"
    subtitle.text = "2023年第四季度"
    
    # 添加內(nèi)容幻燈片
    slide_layout = prs.slide_layouts[1]
    slide = prs.slides.add_slide(slide_layout)
    
    # 設(shè)置標(biāo)題和內(nèi)容
    title = slide.shapes.title
    content = slide.placeholders[1]
    
    title.text = "季度目標(biāo)"
    
    tf = content.text_frame
    tf.text = "主要業(yè)務(wù)目標(biāo):"
    
    p = tf.add_paragraph()
    p.text = "提高銷(xiāo)售額 15%"
    p.level = 1
    
    p = tf.add_paragraph()
    p.text = "拓展兩個(gè)新市場(chǎng)"
    p.level = 1
    
    p = tf.add_paragraph()
    p.text = "推出新產(chǎn)品線(xiàn)"
    p.level = 1
    
    # 保存為模板
    prs.save("template.pptx")
    print("模板已創(chuàng)建: template.pptx")
    print("您可以修改此模板,然后再次運(yùn)行use_template()函數(shù)。")

# 執(zhí)行函數(shù)
# 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):
    """批量生成演示文稿"""
    # 創(chuàng)建輸出目錄
    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):
        # 創(chuàng)建演示文稿(使用模板或創(chuàng)建新的)
        if template_exists:
            prs = Presentation(template_path)
        else:
            prs = Presentation()
        
        # 添加標(biāo)題幻燈片
        slide_layout = prs.slide_layouts[0]
        slide = prs.slides.add_slide(slide_layout)
        
        # 設(shè)置標(biāo)題和副標(biāo)題
        title = slide.shapes.title
        subtitle = slide.placeholders[1]
        
        title.text = data['title']
        subtitle.text = data['subtitle']
        
        # 添加內(nèi)容幻燈片 - 項(xiàng)目概述
        slide_layout = prs.slide_layouts[1]
        slide = prs.slides.add_slide(slide_layout)
        
        title = slide.shapes.title
        content = slide.placeholders[1]
        
        title.text = "項(xiàng)目概述"
        
        tf = content.text_frame
        tf.text = data['overview']
        
        # 添加內(nèi)容幻燈片 - 關(guān)鍵數(shù)據(jù)
        slide_layout = prs.slide_layouts[1]
        slide = prs.slides.add_slide(slide_layout)
        
        title = slide.shapes.title
        title.text = "關(guān)鍵數(shù)據(jù)"
        
        # 創(chuàng)建表格
        left = Inches(2)
        top = Inches(2)
        width = Inches(6)
        height = Inches(2)
        
        # 創(chuàng)建表格 (4行2列)
        rows, cols = len(data['key_metrics']) + 1, 2
        table = slide.shapes.add_table(rows, cols, left, top, width, height).table
        
        # 設(shè)置表頭
        cell = table.cell(0, 0)
        cell.text = "指標(biāo)"
        cell.fill.solid()
        cell.fill.fore_color.rgb = RGBColor(0, 112, 192)  # 藍(lán)色背景
        cell.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)  # 白色文字
        
        cell = table.cell(0, 1)
        cell.text = "數(shù)值"
        cell.fill.solid()
        cell.fill.fore_color.rgb = RGBColor(0, 112, 192)  # 藍(lán)色背景
        cell.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)  # 白色文字
        
        # 填充數(shù)據(jù)
        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)
        
        # 添加內(nèi)容幻燈片 - 結(jié)論
        slide_layout = prs.slide_layouts[1]
        slide = prs.slides.add_slide(slide_layout)
        
        title = slide.shapes.title
        content = slide.placeholders[1]
        
        title.text = "結(jié)論與建議"
        
        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}")

# 示例數(shù)據(jù)
project_data = [
    {
        'title': "A項(xiàng)目季度報(bào)告",
        'subtitle': "2023年第四季度",
        'overview': "A項(xiàng)目是我們的核心業(yè)務(wù)項(xiàng)目,專(zhuān)注于提供企業(yè)級(jí)數(shù)據(jù)分析解決方案。",
        'key_metrics': {
            '客戶(hù)數(shù)量': 45,
            '收入增長(zhǎng)': "23%",
            '客戶(hù)滿(mǎn)意度': "92%",
            '市場(chǎng)份額': "18%"
        },
        'conclusions': [
            "A項(xiàng)目在本季度表現(xiàn)優(yōu)異,超過(guò)預(yù)期目標(biāo)。",
            "建議增加研發(fā)投入,進(jìn)一步提升產(chǎn)品競(jìng)爭(zhēng)力。",
            "計(jì)劃在下一季度拓展國(guó)際市場(chǎng)。"
        ],
        'filename': "A項(xiàng)目報(bào)告"
    },
    {
        'title': "B項(xiàng)目季度報(bào)告",
        'subtitle': "2023年第四季度",
        'overview': "B項(xiàng)目是我們的創(chuàng)新孵化項(xiàng)目,專(zhuān)注于人工智能技術(shù)在辦公自動(dòng)化領(lǐng)域的應(yīng)用。",
        'key_metrics': {
            '用戶(hù)數(shù)量': 1200,
            '收入增長(zhǎng)': "45%",
            '活躍度': "78%",
            '轉(zhuǎn)化率': "8.5%"
        },
        'conclusions': [
            "B項(xiàng)目增長(zhǎng)迅速,用戶(hù)反饋積極。",
            "需要解決部分性能問(wèn)題,提高系統(tǒng)穩(wěn)定性。",
            "建議增加營(yíng)銷(xiāo)預(yù)算,擴(kuò)大用戶(hù)基礎(chǔ)。"
        ],
        'filename': "B項(xiàng)目報(bào)告"
    }
]

# 執(zhí)行批量生成
# batch_generate_presentations(project_data)

實(shí)際應(yīng)用場(chǎng)景

場(chǎng)景一:自動(dòng)生成銷(xiāo)售報(bào)告

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):
    """根據(jù)銷(xiāo)售數(shù)據(jù)自動(dòng)生成銷(xiāo)售報(bào)告演示文稿"""
    # 讀取銷(xiāo)售數(shù)據(jù)
    try:
        df = pd.read_excel(sales_data_file)
    except Exception as e:
        print(f"讀取銷(xiāo)售數(shù)據(jù)失敗: {e}")
        print("創(chuàng)建示例數(shù)據(jù)進(jìn)行演示...")
        # 創(chuàng)建示例數(shù)據(jù)
        data = {
            '日期': pd.date_range(start='2023-10-01', periods=12, freq='W'),
            '產(chǎn)品': ['筆記本電腦', '辦公桌椅', '打印機(jī)', '筆記本電腦', '辦公桌椅', '打印機(jī)', 
                    '筆記本電腦', '辦公桌椅', '打印機(jī)', '筆記本電腦', '辦公桌椅', '打印機(jī)'],
            '銷(xiāo)售量': [25, 40, 10, 30, 35, 8, 28, 42, 12, 35, 38, 15],
            '銷(xiāo)售額': [150000, 36000, 13000, 180000, 31500, 10400, 168000, 37800, 15600, 210000, 34200, 19500]
        }
        df = pd.DataFrame(data)
        # 保存示例數(shù)據(jù)
        df.to_excel("sales_data_example.xlsx", index=False)
        sales_data_file = "sales_data_example.xlsx"
        print(f"已創(chuàng)建示例數(shù)據(jù)文件: {sales_data_file}")
    
    # 創(chuàng)建演示文稿
    prs = Presentation()
    
    # 設(shè)置幻燈片尺寸為寬屏(16:9)
    prs.slide_width = Inches(13.33)
    prs.slide_height = Inches(7.5)
    
    # 添加標(biāo)題幻燈片
    slide_layout = prs.slide_layouts[0]
    slide = prs.slides.add_slide(slide_layout)
    
    # 獲取當(dāng)前日期
    current_date = datetime.now().strftime("%Y年%m月%d日")
    
    # 設(shè)置標(biāo)題和副標(biāo)題
    title = slide.shapes.title
    subtitle = slide.placeholders[1]
    
    title.text = "銷(xiāo)售業(yè)績(jī)報(bào)告"
    subtitle.text = f"生成日期: {current_date}"
    
    # 數(shù)據(jù)處理 - 按產(chǎn)品分組統(tǒng)計(jì)
    product_sales = df.groupby('產(chǎn)品').agg({'銷(xiāo)售量': 'sum', '銷(xiāo)售額': 'sum'}).reset_index()
    
    # 添加銷(xiāo)售總覽幻燈片
    slide_layout = prs.slide_layouts[5]  # 僅標(biāo)題布局
    slide = prs.slides.add_slide(slide_layout)
    
    title = slide.shapes.title
    title.text = "銷(xiāo)售總覽"
    
    # 創(chuàng)建表格
    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
    
    # 設(shè)置列寬
    table.columns[0].width = Inches(3)
    table.columns[1].width = Inches(3)
    table.columns[2].width = Inches(3)
    
    # 添加表頭
    headers = ['產(chǎn)品', '總銷(xiāo)售量', '總銷(xiāo)售額']
    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)  # 藍(lán)色背景
        
        paragraph = cell.text_frame.paragraphs[0]
        paragraph.alignment = PP_ALIGN.CENTER
        paragraph.font.bold = True
        paragraph.font.color.rgb = RGBColor(255, 255, 255)  # 白色文字
    
    # 填充數(shù)據(jù)
    for i, row in product_sales.iterrows():
        table.cell(i + 1, 0).text = row['產(chǎn)品']
        table.cell(i + 1, 1).text = str(row['銷(xiāo)售量'])
        table.cell(i + 1, 2).text = f"¥{row['銷(xiāo)售額']:,.2f}"
        
        # 設(shè)置對(duì)齊方式
        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_ALIGN.RIGHT
    
    # 添加銷(xiāo)售趨勢(shì)圖幻燈片
    slide_layout = prs.slide_layouts[5]  # 僅標(biāo)題布局
    slide = prs.slides.add_slide(slide_layout)
    
    title = slide.shapes.title
    title.text = "銷(xiāo)售趨勢(shì)"
    
    # 數(shù)據(jù)處理 - 按日期分組統(tǒng)計(jì)
    df['周'] = df['日期'].dt.strftime('%m-%d')
    weekly_sales = df.groupby('周').agg({'銷(xiāo)售額': 'sum'}).reset_index()
    
    # 創(chuàng)建圖表數(shù)據(jù)
    chart_data = CategoryChartData()
    chart_data.categories = weekly_sales['周'].tolist()
    chart_data.add_series('銷(xiāo)售額', weekly_sales['銷(xiāo)售額'].tolist())
    
    # 添加折線(xiàn)圖
    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
    
    # 設(shè)置圖表標(biāo)題
    chart.has_title = True
    chart.chart_title.text_frame.text = "周銷(xiāo)售額趨勢(shì)"
    
    # 添加產(chǎn)品占比幻燈片
    slide_layout = prs.slide_layouts[5]  # 僅標(biāo)題布局
    slide = prs.slides.add_slide(slide_layout)
    
    title = slide.shapes.title
    title.text = "產(chǎn)品銷(xiāo)售占比"
    
    # 創(chuàng)建餅圖數(shù)據(jù)
    chart_data = CategoryChartData()
    chart_data.categories = product_sales['產(chǎn)品'].tolist()
    chart_data.add_series('銷(xiāo)售額', product_sales['銷(xiāo)售額'].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
    
    # 設(shè)置圖表標(biāo)題
    chart.has_title = True
    chart.chart_title.text_frame.text = "銷(xiāo)售額占比"
    
    # 添加結(jié)論幻燈片
    slide_layout = prs.slide_layouts[1]  # 標(biāo)題和內(nèi)容布局
    slide = prs.slides.add_slide(slide_layout)
    
    title = slide.shapes.title
    content = slide.placeholders[1]
    
    title.text = "分析與建議"
    
    # 計(jì)算一些基本統(tǒng)計(jì)數(shù)據(jù)
    total_sales = df['銷(xiāo)售額'].sum()
    best_product = product_sales.loc[product_sales['銷(xiāo)售額'].idxmax()]['產(chǎn)品']
    best_product_sales = product_sales['銷(xiāo)售額'].max()
    best_product_percentage = (best_product_sales / total_sales) * 100
    
    # 添加分析內(nèi)容
    tf = content.text_frame
    tf.text = f"總銷(xiāo)售額: ¥{total_sales:,.2f}"
    
    p = tf.add_paragraph()
    p.text = f"最暢銷(xiāo)產(chǎn)品: {best_product},占總銷(xiāo)售額的 {best_product_percentage:.1f}%"
    
    p = tf.add_paragraph()
    p.text = "建議:"
    
    p = tf.add_paragraph()
    p.text = f"增加{best_product}的庫(kù)存,滿(mǎn)足市場(chǎng)需求"
    p.level = 1
    
    p = tf.add_paragraph()
    p.text = "針對(duì)銷(xiāo)售較低的產(chǎn)品,考慮調(diào)整營(yíng)銷(xiāo)策略或價(jià)格"
    p.level = 1
    
    p = tf.add_paragraph()
    p.text = "關(guān)注銷(xiāo)售趨勢(shì),及時(shí)調(diào)整銷(xiāo)售目標(biāo)"
    p.level = 1
    
    # 保存演示文稿
    report_filename = "銷(xiāo)售報(bào)告.pptx"
    prs.save(report_filename)
    print(f"銷(xiāo)售報(bào)告已生成: {report_filename}")
    return report_filename

# 執(zhí)行函數(shù)
# generate_sales_report("sales_data.xlsx")

場(chǎng)景二:培訓(xùn)課程幻燈片生成器

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):
    """生成培訓(xùn)課程幻燈片"""
    # 創(chuàng)建演示文稿
    prs = Presentation()
    
    # 添加標(biāo)題幻燈片
    slide_layout = prs.slide_layouts[0]
    slide = prs.slides.add_slide(slide_layout)
    
    # 設(shè)置標(biāo)題和副標(biāo)題
    title = slide.shapes.title
    subtitle = slide.placeholders[1]
    
    title.text = course_data['title']
    subtitle.text = f"講師: {course_data['instructor']}\n{course_data['date']}"
    
    # 添加課程目標(biāo)幻燈片
    slide_layout = prs.slide_layouts[1]
    slide = prs.slides.add_slide(slide_layout)
    
    title = slide.shapes.title
    content = slide.placeholders[1]
    
    title.text = "課程目標(biāo)"
    
    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']}"
    
    # 為每個(gè)模塊創(chuàng)建內(nèi)容幻燈片
    for i, module in enumerate(course_data['modules'], 1):
        # 模塊標(biāo)題幻燈片
        slide_layout = prs.slide_layouts[2]  # 節(jié)標(biāo)題布局
        slide = prs.slides.add_slide(slide_layout)
        
        title = slide.shapes.title
        title.text = f"模塊 {i}: {module['title']}"
        
        # 模塊內(nèi)容幻燈片
        for topic in module['topics']:
            slide_layout = prs.slide_layouts[1]  # 標(biāo)題和內(nèi)容布局
            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
    
    # 添加總結(jié)幻燈片
    slide_layout = prs.slide_layouts[1]
    slide = prs.slides.add_slide(slide_layout)
    
    title = slide.shapes.title
    content = slide.placeholders[1]
    
    title.text = "總結(jié)"
    
    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
    
    # 添加問(wèn)答幻燈片
    slide_layout = prs.slide_layouts[5]  # 僅標(biāo)題布局
    slide = prs.slides.add_slide(slide_layout)
    
    title = slide.shapes.title
    title.text = "問(wèn)題與討論"
    
    # 在幻燈片中央添加大問(wèn)號(hào)
    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.alignment = PP_ALIGN.CENTER
    run = p.runs[0]
    run.font.size = Pt(120)
    run.font.bold = True
    run.font.color.rgb = RGBColor(0, 112, 192)  # 藍(lán)色
    
    # 保存演示文稿
    output_file = f"{course_data['title'].replace(' ', '_')}_培訓(xùn)課程.pptx"
    prs.save(output_file)
    print(f"培訓(xùn)幻燈片已生成: {output_file}")
    return output_file

# 示例課程數(shù)據(jù)
python_course = {
    'title': "Python辦公自動(dòng)化實(shí)戰(zhàn)",
    'instructor': "張教授",
    'date': "2023年12月15日",
    'objectives': [
        "理解Python在辦公自動(dòng)化中的應(yīng)用場(chǎng)景",
        "掌握Excel、Word和PPT文檔的自動(dòng)化處理",
        "學(xué)會(huì)使用Python處理文件和目錄",
        "能夠開(kāi)發(fā)簡(jiǎn)單的辦公自動(dòng)化腳本"
    ],
    'modules': [
        {
            'title': "Python基礎(chǔ)入門(mén)",
            'topics': [
                {
                    'title': "Python環(huán)境搭建",
                    'points': [
                        "安裝Python解釋器",
                        "配置開(kāi)發(fā)環(huán)境",
                        "使用pip安裝第三方庫(kù)",
                        "編寫(xiě)第一個(gè)Python程序"
                    ]
                },
                {
                    'title': "Python基本語(yǔ)法",
                    'points': [
                        "變量和數(shù)據(jù)類(lèi)型",
                        "條件語(yǔ)句和循環(huán)",
                        "函數(shù)定義和調(diào)用",
                        "模塊和包的使用"
                    ]
                }
            ]
        },
        {
            'title': "Excel文檔自動(dòng)化",
            'topics': [
                {
                    'title': "使用openpyxl操作Excel",
                    'points': [
                        "讀取Excel文件",
                        "修改單元格內(nèi)容",
                        "添加公式和格式",
                        "創(chuàng)建圖表和數(shù)據(jù)透視表"
                    ]
                },
                {
                    'title': "使用pandas處理Excel數(shù)據(jù)",
                    'points': [
                        "數(shù)據(jù)導(dǎo)入和導(dǎo)出",
                        "數(shù)據(jù)清洗和轉(zhuǎn)換",
                        "數(shù)據(jù)分析和統(tǒng)計(jì)",
                        "數(shù)據(jù)可視化"
                    ]
                }
            ]
        },
        {
            'title': "Word和PPT文檔自動(dòng)化",
            'topics': [
                {
                    'title': "使用python-docx操作Word",
                    'points': [
                        "創(chuàng)建和修改Word文檔",
                        "添加文本、圖片和表格",
                        "設(shè)置格式和樣式",
                        "自動(dòng)生成報(bào)告"
                    ]
                },
                {
                    'title': "使用python-pptx操作PPT",
                    'points': [
                        "創(chuàng)建和修改PPT演示文稿",
                        "添加幻燈片和內(nèi)容",
                        "插入圖表和圖形",
                        "批量生成演示文稿"
                    ]
                }
            ]
        }
    ],
    'summary': [
        "Python是辦公自動(dòng)化的強(qiáng)大工具",
        "掌握核心庫(kù)可以處理各種辦公文檔",
        "自動(dòng)化腳本可以大幅提高工作效率",
        "持續(xù)學(xué)習(xí)和實(shí)踐是提高技能的關(guān)鍵"
    ]
}

# 執(zhí)行函數(shù)
# generate_training_slides(python_course)

通過(guò)以上代碼示例和應(yīng)用場(chǎng)景,你可以輕松掌握Python PPT演示文稿自動(dòng)化的各種技巧,大幅提高工作效率。無(wú)論是創(chuàng)建簡(jiǎn)單的演示文稿,還是批量生成復(fù)雜的報(bào)告、培訓(xùn)材料,Python都能幫你輕松應(yīng)對(duì)。

以上就是Python使用python-pptx自動(dòng)化操作和生成PPT的詳細(xì)內(nèi)容,更多關(guān)于Python自動(dòng)化操作PPT的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解如何使用Python實(shí)現(xiàn)刪除重復(fù)文件

    詳解如何使用Python實(shí)現(xiàn)刪除重復(fù)文件

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)刪除重復(fù)文件功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-10-10
  • 解決python圖像處理圖像賦值后變?yōu)榘咨膯?wèn)題

    解決python圖像處理圖像賦值后變?yōu)榘咨膯?wèn)題

    這篇文章主要介紹了解決python圖像處理圖像賦值后變?yōu)榘咨膯?wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • tensorflow轉(zhuǎn)onnx的實(shí)現(xiàn)方法

    tensorflow轉(zhuǎn)onnx的實(shí)現(xiàn)方法

    本文主要介紹了tensorflow轉(zhuǎn)onnx的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • pandas 選擇某幾列的方法

    pandas 選擇某幾列的方法

    今天小編就為大家分享一篇pandas 選擇某幾列的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python編譯環(huán)境配置的實(shí)現(xiàn)步驟

    python編譯環(huán)境配置的實(shí)現(xiàn)步驟

    本文主要介紹了python編譯環(huán)境配置的實(shí)現(xiàn)步驟,文中通過(guò)圖文示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • python常用的兩種第三方庫(kù)下載方法小結(jié)

    python常用的兩種第三方庫(kù)下載方法小結(jié)

    這篇文章主要介紹了python常用的兩種第三方庫(kù)下載方法的相關(guān)資料,安裝、卸載、版本查看及鏡像源使用等常用操作,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-05-05
  • pandas如何讀取mysql數(shù)據(jù)

    pandas如何讀取mysql數(shù)據(jù)

    這篇文章主要介紹了pandas如何讀取mysql數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python實(shí)現(xiàn)簡(jiǎn)單查找最長(zhǎng)子串功能示例

    Python實(shí)現(xiàn)簡(jiǎn)單查找最長(zhǎng)子串功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)簡(jiǎn)單查找最長(zhǎng)子串功能,涉及字符串遍歷、統(tǒng)計(jì)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-02-02
  • Python tornado隊(duì)列示例-一個(gè)并發(fā)web爬蟲(chóng)代碼分享

    Python tornado隊(duì)列示例-一個(gè)并發(fā)web爬蟲(chóng)代碼分享

    這篇文章主要介紹了Python tornado隊(duì)列示例-一個(gè)并發(fā)web爬蟲(chóng)代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python Flask基礎(chǔ)到登錄功能的實(shí)現(xiàn)代碼

    Python Flask基礎(chǔ)到登錄功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python Flask基礎(chǔ)到登錄功能的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05

最新評(píng)論