【辦公自動化】如何使用Python操作PPT和自動化生成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 RGBColordef create_simple_presentation():"""創建一個簡單的PPT演示文稿"""# 創建演示文稿對象prs = Presentation()# 獲取第一個布局(標題幻燈片)title_slide_layout = prs.slide_layouts[0]# 添加標題幻燈片slide = prs.slides.add_slide(title_slide_layout)# 設置標題和副標題title = slide.shapes.titlesubtitle = 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.titletitle.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 = 1p = tf.add_paragraph()p.text = "應用主題和樣式"p.level = 0  # 恢復到第一級# 保存演示文稿prs.save("簡單演示文稿.pptx")print("演示文稿已保存為: 簡單演示文稿.pptx")# 執行函數
create_simple_presentation()

查看可用的幻燈片布局

from pptx import Presentationdef 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 '標題布局'}"breakprint(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 RGBColordef 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 = Truerun.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 = Truerun = p.add_run()run.text = ",這部分是"run = p.add_run()run.text = "斜體"run.font.italic = Truerun = 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 Inchesdef add_picture_to_slide():"""向幻燈片中添加圖片"""prs = Presentation()# 添加標題和內容布局的幻燈片slide_layout = prs.slide_layouts[1]slide = prs.slides.add_slide(slide_layout)# 設置標題title = slide.shapes.titletitle.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_frametf.text = "圖片說明:這是一個示例圖片"except Exception as e:# 如果圖片不存在,添加錯誤提示content = slide.placeholders[1]tf = content.text_frametf.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 RGBColordef 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_frametf.text = "各種形狀示例"tf.paragraphs[0].alignment = PP_ALIGN.CENTERtf.paragraphs[0].runs[0].font.bold = Truetf.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_frametf.text = "帶文本的形狀"tf.paragraphs[0].alignment = PP_ALIGN.CENTERtf.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 RGBColordef create_table_slide():"""創建包含表格的幻燈片"""prs = Presentation()# 添加標題和內容布局的幻燈片slide_layout = prs.slide_layouts[5]  # 僅標題布局slide = prs.slides.add_slide(slide_layout)# 設置標題title = slide.shapes.titletitle.text = "銷售數據表格"# 定義表格位置和大小left = Inches(1.5)top = Inches(2)width = Inches(7)height = Inches(3)# 創建表格 (4行3列)rows, cols = 4, 3table = 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, 192)  # 藍色背景paragraph = cell.text_frame.paragraphs[0]paragraph.alignment = PP_ALIGN.CENTERparagraph.font.bold = Trueparagraph.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.LEFTelse: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 CategoryChartDatadef create_chart_slide():"""創建包含圖表的幻燈片"""prs = Presentation()# 添加標題和內容布局的幻燈片slide_layout = prs.slide_layouts[5]  # 僅標題布局slide = prs.slides.add_slide(slide_layout)# 設置標題title = slide.shapes.titletitle.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 = Truechart.chart_title.text_frame.text = "季度銷售數量對比"# 保存演示文稿prs.save("圖表演示.pptx")print("演示文稿已保存為: 圖表演示.pptx")# 創建第二張幻燈片,展示餅圖slide = prs.slides.add_slide(slide_layout)title = slide.shapes.titletitle.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 = Truechart.chart_title.text_frame.text = "第四季度銷售額占比"# 保存更新后的演示文稿prs.save("圖表演示.pptx")# 執行函數
# create_chart_slide()

模板復用與批量生成

使用模板創建演示文稿

from pptx import Presentation
from pptx.util import Inchesdef 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.titlecontent = slide.placeholders[1]title.text = "使用模板創建的幻燈片"tf = content.text_frametf.text = "使用模板的優勢:"p = tf.add_paragraph()p.text = "保持一致的品牌形象"p.level = 1p = tf.add_paragraph()p.text = "節省設計時間"p.level = 1p = 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.titlesubtitle = slide.placeholders[1]title.text = "公司季度報告模板"subtitle.text = "2023年第四季度"# 添加內容幻燈片slide_layout = prs.slide_layouts[1]slide = prs.slides.add_slide(slide_layout)# 設置標題和內容title = slide.shapes.titlecontent = slide.placeholders[1]title.text = "季度目標"tf = content.text_frametf.text = "主要業務目標:"p = tf.add_paragraph()p.text = "提高銷售額 15%"p.level = 1p = tf.add_paragraph()p.text = "拓展兩個新市場"p.level = 1p = 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 osdef 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.titlesubtitle = 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.titlecontent = slide.placeholders[1]title.text = "項目概述"tf = content.text_frametf.text = data['overview']# 添加內容幻燈片 - 關鍵數據slide_layout = prs.slide_layouts[1]slide = prs.slides.add_slide(slide_layout)title = slide.shapes.titletitle.text = "關鍵數據"# 創建表格left = Inches(2)top = Inches(2)width = Inches(6)height = Inches(2)# 創建表格 (4行2列)rows, cols = len(data['key_metrics']) + 1, 2table = 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 = metrictable.cell(i + 1, 1).text = str(value)# 添加內容幻燈片 - 結論slide_layout = prs.slide_layouts[1]slide = prs.slides.add_slide(slide_layout)title = slide.shapes.titlecontent = slide.placeholders[1]title.text = "結論與建議"tf = content.text_framefor i, point in enumerate(data['conclusions']):if i == 0:tf.text = pointelse: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 datetimedef 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.titlesubtitle = 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.titletitle.text = "銷售總覽"# 創建表格rows, cols = len(product_sales) + 1, 3left = 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 = headercell.fill.solid()cell.fill.fore_color.rgb = RGBColor(0, 112, 192)  # 藍色背景paragraph = cell.text_frame.paragraphs[0]paragraph.alignment = PP_ALIGN.CENTERparagraph.font.bold = Trueparagraph.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.LEFTtable.cell(i + 1, 1).text_frame.paragraphs[0].alignment = PP_ALIGN.CENTERtable.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.titletitle.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 = Truechart.chart_title.text_frame.text = "周銷售額趨勢"# 添加產品占比幻燈片slide_layout = prs.slide_layouts[5]  # 僅標題布局slide = prs.slides.add_slide(slide_layout)title = slide.shapes.titletitle.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 = Truechart.chart_title.text_frame.text = "銷售額占比"# 添加結論幻燈片slide_layout = prs.slide_layouts[1]  # 標題和內容布局slide = prs.slides.add_slide(slide_layout)title = slide.shapes.titlecontent = 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_frametf.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 = 1p = tf.add_paragraph()p.text = "針對銷售較低的產品,考慮調整營銷策略或價格"p.level = 1p = 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 osdef generate_training_slides(course_data):"""生成培訓課程幻燈片"""# 創建演示文稿prs = Presentation()# 添加標題幻燈片slide_layout = prs.slide_layouts[0]slide = prs.slides.add_slide(slide_layout)# 設置標題和副標題title = slide.shapes.titlesubtitle = 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.titlecontent = slide.placeholders[1]title.text = "課程目標"tf = content.text_frametf.text = "完成本課程后,您將能夠:"for objective in course_data['objectives']:p = tf.add_paragraph()p.text = objectivep.level = 1# 添加課程大綱幻燈片slide_layout = prs.slide_layouts[1]slide = prs.slides.add_slide(slide_layout)title = slide.shapes.titlecontent = slide.placeholders[1]title.text = "課程大綱"tf = content.text_framefor 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.titletitle.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.titlecontent = slide.placeholders[1]title.text = topic['title']tf = content.text_framefor j, point in enumerate(topic['points']):if j == 0:tf.text = pointelse:p = tf.add_paragraph()p.text = point# 添加總結幻燈片slide_layout = prs.slide_layouts[1]slide = prs.slides.add_slide(slide_layout)title = slide.shapes.titlecontent = slide.placeholders[1]title.text = "總結"tf = content.text_framefor i, point in enumerate(course_data['summary']):if i == 0:tf.text = pointelse:p = tf.add_paragraph()p.text = point# 添加問答幻燈片slide_layout = prs.slide_layouts[5]  # 僅標題布局slide = prs.slides.add_slide(slide_layout)title = slide.shapes.titletitle.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_frametf.text = "?"p = tf.paragraphs[0]p.alignment = PP_ALIGN.CENTERrun = p.runs[0]run.font.size = Pt(120)run.font.bold = Truerun.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': ["變量和數據類型","條件語句和循環","函數定義和調用","模塊和包的使用"]}]},{'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都能幫你輕松應對。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93019.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

18 ABP Framework 模塊管理

ABP Framework 模塊管理 概述 該頁面詳細介紹了在 ABP Framework 解決方案中使用 ABP CLI 及相關工具添加、更新和管理模塊的方法。模塊管理是 ABP 模塊化架構的核心,支持可重用業務和基礎設施功能的集成。模塊通常以 NuGet 和/或 NPM 包的形式分發,有時…

外觀模式C++

外觀模式(Facade Pattern)是一種結構型設計模式,它為復雜系統提供一個簡化的接口,隱藏系統內部的復雜性,使客戶端能夠更輕松地使用系統。這種模式通過創建一個外觀類,封裝系統內部的交互邏輯,客…

Go 微服務限流與熔斷最佳實踐:滑動窗口、令牌桶與自適應閾值

🌟 Hello,我是蔣星熠Jaxonic! 🌈 在浩瀚無垠的技術宇宙中,我是一名執著的星際旅人,用代碼繪制探索的軌跡。 🚀 每一個算法都是我點燃的推進器,每一行代碼都是我航行的星圖。 &#x…

Java面試寶典:JVM性能優化

一、運行時優化 Java虛擬機(JVM)的運行時優化是提升Java應用性能的核心環節。JIT(Just-In-Time)編譯器在程序運行過程中,通過分析熱點代碼的執行模式,動態地進行一系列高級優化。這些優化技術對開發者透明,但了解其原理能幫助我們編寫出更易于優化的代碼,從而顯著提升…

Day55--圖論--107. 尋找存在的路徑(卡碼網)

Day55–圖論–107. 尋找存在的路徑(卡碼網) 今天學習并查集。先過一遍并查集理論基礎。再做下面這一道模板題,就可以結束了。體量不多,但是理解并查集,并使用好,不容易。 后續再找相關的題目來做&#xff0…

C++中的鏈式操作原理與應用(三):專注于異步操作延的C++開源庫 continuable

目錄 1.簡介 2.安裝與集成 3.快速入門 4.完整示例 5.優勢與適用場景 1.簡介 continuable 是一個專注于 異步操作延續(continuation) 的現代 C 開源庫,旨在簡化異步編程流程,解決 “回調地獄” 問題,提供直觀、靈活…

STM32--寄存器與標準庫函數--通用定時器--輸出比較(PWM生成)

目錄 前言 通用定時器類型 向上計數、向下計數、中心對齊 輸入捕獲與輸出比較概念 輸出比較典型例子:驅動舵機旋轉 通用定時器的輸出比較庫函數 代碼 通用定時器的輸出比較寄存器操作 代碼 這里提供數據手冊的寄存器 后言 前言 使用平臺:STM32F407ZET6 使…

91、23種設計模式

設計模式是軟件設計中反復出現的解決方案的模板,用于解決特定問題并提高代碼的可維護性、可擴展性和可復用性。23種經典設計模式可分為創建型、結構型和行為型三大類,以下是具體分類及模式概述: 一、創建型模式(5種) 關…

力扣(串聯所有單詞的子串)

串聯所有單詞的子串問題:多滑動窗口與哈希表的實戰應用。 一、題目分析(一)問題定義 給定字符串 s 和字符串數組 words(words 中所有單詞長度相同 ),找出 s 中所有“串聯子串”的起始索引。串聯子串指包含 …

RH134 管理基本存儲知識點

1. 對 Linux 磁盤進行分區時有哪兩種方案?分別加以詳細說明。答:MBR分區:主引導記錄(MBR)分區方案是運行BIOS固件的系統上的標準方案。此方案支持最 多四個主分區。在Linux系統上,您可以使用擴展分區和邏輯分區來創建最多…

【JS 異步】告別回調地獄:Async/Await 和 Promise 的優雅實踐與錯誤處理

【JS 異步】告別回調地獄:Async/Await 和 Promise 的優雅實踐與錯誤處理 所屬專欄: 《前端小技巧集合:讓你的代碼更優雅高效 上一篇: 【JS 數組】數組操作的“瑞士軍刀”:精通 Array.reduce() 的騷操作 作者&#xff…

23.Linux : ftp服務及配置詳解

Linux : ftp服務及配置詳解 FTP 基本概念 定義:文件傳輸協議(File Transfer Protocol),采用 C/S 模式工作。端口: 控制端口:21數據端口:20FTP 工作原理模式工作流程連接發起方主動模…

悲觀鎖樂觀鎖與事務注解在項目實戰中的應用場景及詳細解析

在今天做的項目練習部分中真的學到了很多東西,也補充了許多之前遺漏或是忘記的知識點,但時間精力有限,我就先記錄一下今天用到的一個新東西,悲觀鎖和樂觀鎖。首先給出實際應用背景:在加入鎖和事務注解之前,…

Java構造器與工廠模式(靜態工程方法)詳解

1. 構造器1.1 構造器的核心意義1.1.1 對象初始化構造器在創建對象 (new) 時自動調用, 用于初始化對象的狀態 (如設置字段初始值, 分配資源等)無構造器時: 字段為默認值(0/null/false)有構造器:確保對象創建后即處于有效狀態1.1.2 強制初始化…

解決jdk初始化運行,防火墻通信選錯專業網絡問題

問題描述新項目添加不同版本的jdk,運行時提示防火墻通信策略,選成專用網絡。其他人訪問后端接口時,提示連接失敗。 解決方案:1、在搜索欄中輸入 防火墻關鍵字,選擇到防火墻和網絡保護2、選擇允許應用通過防火墻3、先點…

【Linux】常用命令(三)

【Linux】常用命令(三)1. export1.1 原理1.2 常用語法1.3 示例1.4 書中對命令的解釋1.5 生效范圍2. 測試服務地址與其端口能否訪問2.1 nc(Netcat)命令2.2 telnet2.3 nmap2.4 curl命令 (適用于HTTP/HTTPS 服務)1. export export 是 Linux Shell&#xff…

Pytest項目_day15(yaml)

YAMLYAML是一個對所有編程語言都很友好的數據序列化標準,它是一種直觀的能夠被電腦識別的數據序列化格式,是一種可讀性高且容易被人類閱讀的腳本語言YAML語言的本質是一種通用的數據串行化格式適用場景 可以直接序列化為數組、字典解析成本低專門寫配置文…

審批流程系統設計與實現:狀態驅動、靈活擴展的企業級解決方案

審批流程系統設計與實現:狀態驅動、靈活擴展的企業級解決方案 本文基于實際企業級審批系統源碼,深入解析如何設計高擴展性、強一致性的審批流程引擎,涵蓋狀態機設計、多租戶隔離、文件服務集成等核心實現。 1. 系統設計概覽 審批系統的核心架…

汽車免拆診斷案例 | 2010款奧迪A4L車行駛中發動機偶爾自動熄火

故障現象 一輛2010款奧迪A4L車,搭載CDZ發動機 ,累計行駛里程約為18.2萬km。該車行駛中發動機偶爾自動熄火,有時熄火后能夠立即重新起動著機,有時需要等待一會兒才能重新起動著機,故障頻率較低。因該故障在其他維修廠陸…

Liam ERD:自動生成美觀的交互式實體關系圖

Liam ERD 是一個可以快速生成美觀且具有交互性的數據庫實體關系圖(ERD)的工具,可以幫助用戶實現復雜數據庫結構的可視化。 Liam ERD 是一個免費開源的項目,代碼托管在 GitHub: https://github.com/liam-hq/liam 功能…