最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用python-pptx實現(xiàn)自動化制作PPT

 更新時間:2026年01月14日 08:35:24   作者:大神君Bob  
在現(xiàn)代商業(yè)和教育環(huán)境中,PowerPoint演示文稿是信息傳遞的重要工具,本文將介紹如何使用python-pptx庫實現(xiàn)PPT自動化,并提供實用的代碼示例和應用場景,感興趣的小伙伴可以了解下

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

使用python-pptx操作PPT文檔

安裝python-pptx

pip install python-pptx

基礎概念

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

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

創(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)建一個簡單的PPT演示文稿"""
    # 創(chuàng)建演示文稿對象
    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創(chuàng)建精美演示文稿"
    
    # 添加內容幻燈片
    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 = "創(chuàng)建和編輯幻燈片"
    
    p = tf.add_paragraph()
    p.text = "添加文本、圖片和形狀"
    p.level = 1  # 縮進級別
    
    p = tf.add_paragraph()
    p.text = "創(chuàng)建表格和圖表"
    p.level = 1
    
    p = tf.add_paragraph()
    p.text = "應用主題和樣式"
    p.level = 0  # 恢復到第一級
    
    # 保存演示文稿
    prs.save("簡單演示文稿.pptx")
    print("演示文稿已保存為: 簡單演示文稿.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):
        # 獲取布局名稱
        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 - 節(jié)標題")
    print("3 - 兩欄內容")
    print("4 - 比較")
    print("5 - 僅標題")
    print("6 - 空白")
    print("7 - 標題和對象")
    print("8 - 對象和標題")

# 執(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)
    
    # 添加標題文本框
    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 = ""  # 先創(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 = "大號字體"
    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()
    
    # 添加標題和內容布局的幻燈片
    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")

# 執(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)
    
    # 添加標題
    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")

# 執(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()
    
    # 添加標題和內容布局的幻燈片
    slide_layout = prs.slide_layouts[5]  # 僅標題布局
    slide = prs.slides.add_slide(slide_layout)
    
    # 設置標題
    title = slide.shapes.title
    title.text = "銷售數(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
    
    # 設置列寬
    table.columns[0].width = Inches(3)
    table.columns[1].width = Inches(2)
    table.columns[2].width = Inches(2)
    
    # 填充表頭
    headers = ['產(chǎn)品名稱', '銷售數(shù)量', '銷售金額']
    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)  # 白色文字
    
    # 填充數(shù)據(jù)
    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")

# 執(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()
    
    # 添加標題和內容布局的幻燈片
    slide_layout = prs.slide_layouts[5]  # 僅標題布局
    slide = prs.slides.add_slide(slide_layout)
    
    # 設置標題
    title = slide.shapes.title
    title.text = "季度銷售數(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('打印機', (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 = "季度銷售數(shù)量對比"
    
    # 保存演示文稿
    prs.save("圖表演示.pptx")
    print("演示文稿已保存為: 圖表演示.pptx")
    
    # 創(chuàng)建第二張幻燈片,展示餅圖
    slide = prs.slides.add_slide(slide_layout)
    title = slide.shapes.title
    title.text = "第四季度銷售占比"
    
    # 創(chuàng)建餅圖數(shù)據(jù)
    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")

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

模板復用與批量生成

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

from pptx import Presentation
from pptx.util import Inches

def use_template():
    """使用模板創(chuàng)建演示文稿"""
    # 加載模板文件
    # 注意:請確保模板文件存在,或替換為實際的模板路徑
    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 = "使用模板創(chuàng)建的幻燈片"
        
        tf = content.text_frame
        tf.text = "使用模板的優(yōu)勢:"
        
        p = tf.add_paragraph()
        p.text = "保持一致的品牌形象"
        p.level = 1
        
        p = tf.add_paragraph()
        p.text = "節(jié)省設計時間"
        p.level = 1
        
        p = tf.add_paragraph()
        p.text = "確保專業(yè)的外觀"
        p.level = 1
        
        # 保存演示文稿
        prs.save("基于模板的演示文稿.pptx")
        print("演示文稿已保存為: 基于模板的演示文稿.pptx")
    except Exception as e:
        print(f"使用模板創(chuàng)建演示文稿失敗: {e}")
        print("請確保模板文件存在,或替換為實際的模板路徑。")
        
        # 如果模板不存在,創(chuàng)建一個新的演示文稿作為示例
        create_template_example()

def create_template_example():
    """創(chuàng)建一個模板示例"""
    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 = "主要業(yè)務目標:"
    
    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 = "推出新產(chǎn)品線"
    p.level = 1
    
    # 保存為模板
    prs.save("template.pptx")
    print("模板已創(chuàng)建: template.pptx")
    print("您可以修改此模板,然后再次運行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()
        
        # 添加標題幻燈片
        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']
        
        # 添加內容幻燈片 - 關鍵數(shù)據(jù)
        slide_layout = prs.slide_layouts[1]
        slide = prs.slides.add_slide(slide_layout)
        
        title = slide.shapes.title
        title.text = "關鍵數(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
        
        # 設置表頭
        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 = "數(shù)值"
        cell.fill.solid()
        cell.fill.fore_color.rgb = RGBColor(0, 112, 192)  # 藍色背景
        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)
        
        # 添加內容幻燈片 - 結論
        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}")

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

# 執(zhí)行批量生成
# 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):
    """根據(jù)銷售數(shù)據(jù)自動生成銷售報告演示文稿"""
    # 讀取銷售數(shù)據(jù)
    try:
        df = pd.read_excel(sales_data_file)
    except Exception as e:
        print(f"讀取銷售數(shù)據(jù)失敗: {e}")
        print("創(chuàng)建示例數(shù)據(jù)進行演示...")
        # 創(chuàng)建示例數(shù)據(jù)
        data = {
            '日期': pd.date_range(start='2023-10-01', periods=12, freq='W'),
            '產(chǎn)品': ['筆記本電腦', '辦公桌椅', '打印機', '筆記本電腦', '辦公桌椅', '打印機', 
                    '筆記本電腦', '辦公桌椅', '打印機', '筆記本電腦', '辦公桌椅', '打印機'],
            '銷售量': [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)
        # 保存示例數(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()
    
    # 設置幻燈片尺寸為寬屏(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 = "銷售業(yè)績報告"
    subtitle.text = f"生成日期: {current_date}"
    
    # 數(shù)據(jù)處理 - 按產(chǎn)品分組統(tǒng)計
    product_sales = df.groupby('產(chǎn)品').agg({'銷售量': 'sum', '銷售額': 'sum'}).reset_index()
    
    # 添加銷售總覽幻燈片
    slide_layout = prs.slide_layouts[5]  # 僅標題布局
    slide = prs.slides.add_slide(slide_layout)
    
    title = slide.shapes.title
    title.text = "銷售總覽"
    
    # 創(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
    
    # 設置列寬
    table.columns[0].width = Inches(3)
    table.columns[1].width = Inches(3)
    table.columns[2].width = Inches(3)
    
    # 添加表頭
    headers = ['產(chǎn)品', '總銷售量', '總銷售額']
    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)  # 白色文字
    
    # 填充數(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['銷售量'])
        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_ALIGN.RIGHT
    
    # 添加銷售趨勢圖幻燈片
    slide_layout = prs.slide_layouts[5]  # 僅標題布局
    slide = prs.slides.add_slide(slide_layout)
    
    title = slide.shapes.title
    title.text = "銷售趨勢"
    
    # 數(shù)據(jù)處理 - 按日期分組統(tǒng)計
    df['周'] = df['日期'].dt.strftime('%m-%d')
    weekly_sales = df.groupby('周').agg({'銷售額': 'sum'}).reset_index()
    
    # 創(chuàng)建圖表數(shù)據(jù)
    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 = "周銷售額趨勢"
    
    # 添加產(chǎn)品占比幻燈片
    slide_layout = prs.slide_layouts[5]  # 僅標題布局
    slide = prs.slides.add_slide(slide_layout)
    
    title = slide.shapes.title
    title.text = "產(chǎn)品銷售占比"
    
    # 創(chuàng)建餅圖數(shù)據(jù)
    chart_data = CategoryChartData()
    chart_data.categories = product_sales['產(chǎn)品'].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 = "分析與建議"
    
    # 計算一些基本統(tǒng)計數(shù)據(jù)
    total_sales = df['銷售額'].sum()
    best_product = product_sales.loc[product_sales['銷售額'].idxmax()]['產(chǎn)品']
    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"最暢銷產(chǎn)品: {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 = "針對銷售較低的產(chǎn)品,考慮調整營銷策略或價格"
    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

# 執(zhí)行函數(shù)
# 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):
    """生成培訓課程幻燈片"""
    # 創(chuàng)建演示文稿
    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.placeholders[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']}"
    
    # 為每個模塊創(chuàng)建內容幻燈片
    for i, module in enumerate(course_data['modules'], 1):
        # 模塊標題幻燈片
        slide_layout = prs.slide_layouts[2]  # 節(jié)標題布局
        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.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)  # 藍色
    
    # 保存演示文稿
    output_file = f"{course_data['title'].replace(' ', '_')}_培訓課程.pptx"
    prs.save(output_file)
    print(f"培訓幻燈片已生成: {output_file}")
    return output_file

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

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

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

以上就是Python使用python-pptx實現(xiàn)自動化制作PPT的詳細內容,更多關于Python PPT自動化的資料請關注腳本之家其它相關文章!

相關文章

  • Python 關于模塊和加載模塊的實現(xiàn)

    Python 關于模塊和加載模塊的實現(xiàn)

    這篇文章主要介紹了Python 關于模塊和加載模塊的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • python程序快速縮進多行代碼方法總結

    python程序快速縮進多行代碼方法總結

    在本篇文章里小編給大家整理了關于python程序如何快速縮進多行代碼的相關知識點,需要的朋友們學習下。
    2019-06-06
  • Python基于貪心算法解決背包問題示例

    Python基于貪心算法解決背包問題示例

    這篇文章主要介紹了Python基于貪心算法解決背包問題,簡單描述了貪心算法的概念、原理并結合實例形式分析了Python使用貪心算法解決背包問題的具體操作技巧,需要的朋友可以參考下
    2017-11-11
  • Tensorflow高性能數(shù)據(jù)優(yōu)化增強工具Pipeline使用詳解

    Tensorflow高性能數(shù)據(jù)優(yōu)化增強工具Pipeline使用詳解

    這篇文章主要為大家介紹了Tensorflow高性能數(shù)據(jù)優(yōu)化增強工具Pipeline使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Python?Pygame實戰(zhàn)之紅心大戰(zhàn)游戲的實現(xiàn)

    Python?Pygame實戰(zhàn)之紅心大戰(zhàn)游戲的實現(xiàn)

    說起Windows自帶的游戲,相信許多80、90后的朋友都不陌生。本文就將利用Python中的Pygame模塊實現(xiàn)一下windows經(jīng)典游戲之一的紅心大戰(zhàn),需要的可以參考一下
    2022-02-02
  • Python讀取大型數(shù)據(jù)文件的6種方式匯總

    Python讀取大型數(shù)據(jù)文件的6種方式匯總

    在 Python 中,我們可以使用多種方法讀取大型數(shù)據(jù)文件,本文主要為大家介紹6個常用的Python讀取大型數(shù)據(jù)文件的方法,希望對大家有所幫助
    2023-05-05
  • python調用MySql保姆級圖文教程(包會的)

    python調用MySql保姆級圖文教程(包會的)

    MySQL是當今市場上最受歡迎的數(shù)據(jù)庫系統(tǒng)之一,由于大多數(shù)應用程序需要以某種形式與數(shù)據(jù)交互,因此像Python這樣的編程語言提供了用于存儲和訪問這些數(shù)據(jù)的工具,這篇文章主要給大家介紹了關于python調用MySql的相關資料,需要的朋友可以參考下
    2024-12-12
  • Python設置Word紙張大小的方法

    Python設置Word紙張大小的方法

    在日常辦公自動化場景中,我們經(jīng)常需要批量生成特定格式的Word文檔,當需要控制紙張尺寸時,Python的python-docx庫提供了便捷的解決方案,本文將通過實際案例演示如何通過代碼精準控制Word文檔的紙張設置,需要的朋友可以參考下
    2025-08-08
  • 使用python-cv2實現(xiàn)Harr+Adaboost人臉識別的示例

    使用python-cv2實現(xiàn)Harr+Adaboost人臉識別的示例

    這篇文章主要介紹了使用python-cv2實現(xiàn)Harr+Adaboost人臉識別的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 深入探討Python中切片賦值的高級技巧指南

    深入探討Python中切片賦值的高級技巧指南

    本文將深入探討Python切片賦值的高級技巧,重點解析步長操作和多維數(shù)據(jù)處理的實用方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2026-02-02

最新評論

黑山县| 桂平市| 郴州市| 尉氏县| 辽源市| 乳山市| 敦煌市| 兴业县| 湾仔区| 陆河县| 仪陇县| 汪清县| 台东县| 陈巴尔虎旗| 九江市| 靖宇县| 定远县| 繁昌县| 西昌市| 上虞市| 吉木乃县| 睢宁县| 九寨沟县| 阿拉善右旗| 德惠市| 宣化县| 天峨县| 江北区| 衡南县| 寿宁县| 惠来县| 新野县| 江陵县| 连州市| 门头沟区| 上杭县| 阿鲁科尔沁旗| 新营市| 张家界市| 凤翔县| 伊宁县|