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

使用Python-pptx?告別繁瑣的幻燈片制作

 更新時(shí)間:2022年05月19日 15:29:23   作者:Newyee  
這篇文章主要介紹了使用Python-pptx?告別繁瑣的幻燈片制作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Python自動化:python-pptx 批量生成幻燈片

需求分析

最近遇到了制作 PPT 報(bào)告的任務(wù),前期收集整理后的表格數(shù)據(jù)長這樣:

Excel 數(shù)據(jù)

隨后要基于上述數(shù)據(jù)制作 PPT 報(bào)告,幾十頁的幻燈片都是下圖的格式:

幻燈片示例1

Well, my coding fingers got quite itchy.??

這種繁瑣的手動制作幻燈片還是交給 Python 來自動完成吧!Python 中已有第三方庫很好地支持 PowerPoint ??

python-pptx 介紹

python-pptx是用于創(chuàng)建和更新 PowerPoint(.pptx)文件的 Python 庫。

其用途大致如下:

  • 典型的是從數(shù)據(jù)庫內(nèi)容生成自定義的可用于演示的工程狀態(tài)報(bào)告,可通過單擊 Web 應(yīng)用程序中的鏈接下載該演示文稿。
  • 用于對演示文稿庫進(jìn)行批量更新。
  • 自動化制作對于人工操作繁瑣的幻燈片。

由于開發(fā)團(tuán)隊(duì)的辛勤維護(hù),目前已具有以下功能:

  • 打開、讀取、創(chuàng)建、保存演示文稿(.pptx文件)
  • 添加幻燈片
  • 填充文本占位符,例如創(chuàng)建項(xiàng)目符號幻燈片
  • 添加圖像并調(diào)整位置和尺寸
  • 添加文本框并調(diào)整文本的字體、大小和粗體
  • 添加表格
  • 添加形狀,如多邊形、流程圖形狀等
  • 添加圖表,如柱形圖、條形圖、折線圖和餅圖等
  • 訪問和修改元素屬性,例如標(biāo)題、主題等
  • ……(更多功能開發(fā)ing)

python-pptx 安裝

python-pptx 托管在 PyPI 上,可以很方便地用 pip 安裝:

pip install python-pptx
  • 支持 Python 2.6, 2.7, 3.3, 3.4, 3.6(測試 3.7 能正常安裝和簡單使用,是否會有使用異常尚未知)本文代碼運(yùn)行環(huán)境為 Python 3.6。
  • 依賴庫會自動安裝:lxml、Pillow、XlsxWriter

Hello World! 示例

成功安裝后,運(yùn)行以下示例代碼,體驗(yàn)一下效果: 

# 導(dǎo)包
from pptx import Presentation
# 創(chuàng)建空白演示文稿
prs = Presentation()
# 添加標(biāo)題布局的幻燈片
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
# 設(shè)置標(biāo)題和副標(biāo)題
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Hello, World!"
subtitle.text = "python-pptx was here!"
# 保存
prs.save('test.pptx')

Hello World

更多用例請移步Getting Started

后面有空我也會整理一下學(xué)習(xí) python-pptx 的代碼筆記

需求實(shí)現(xiàn)

有了 python-pptx 的加持,要實(shí)現(xiàn)文章一開始的需求就容易多了,簡單分為以下幾步:

  • 讀取 Excel 數(shù)據(jù)(并預(yù)處理)—— 本例使用 pandas庫讀取 news.xlsx文件
  • 創(chuàng)建空白演示文稿(并添加封面幻燈片)
  • 依據(jù)數(shù)據(jù)循環(huán)添加幻燈片并設(shè)置文本格式(這一步是重點(diǎn)也是難點(diǎn),詳細(xì)說明參考代碼注釋)
  • 保存演示文稿
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pptx import Presentation
from pptx.util import Pt
import pandas as pd
class WritePowerPoint:
    def __init__(self, ppt_name, input_excel, title_cover, subtitle):
        self.ppt_name = ppt_name
        self.input_excel = input_excel
        self.title_cover = self.title_per_page = title_cover
        self.subtitle_cover = subtitle
        # 創(chuàng)建空白演示文稿
        self.prs = Presentation()
    def add_cover(self):
        # 添加封面布局幻燈片
        slide_layout_cover = self.prs.slide_layouts[0]
        slide = self.prs.slides.add_slide(slide_layout_cover)
        # 設(shè)置標(biāo)題和副標(biāo)題
        title = slide.shapes.title
        subtitle = slide.placeholders[1]
        title.text = self.title_cover
        subtitle.text = self.subtitle_cover
    def add_slide(self, line2_texts):
        # 添加布局5幻燈片
        slide_layout = self.prs.slide_layouts[5]
        slide = self.prs.slides.add_slide(slide_layout)
        shapes = slide.shapes
        # 設(shè)置標(biāo)題:內(nèi)容、位置、字體、大小等格式
        title_shape = shapes.title
        title_shape.text = self.title_per_page
        title_shape.left, title_shape.top = Pt(32), Pt(22)
        title_shape.width, title_shape.height = Pt(660), Pt(50)
        tf0 = title_shape.text_frame
        p0 = tf0.paragraphs[0]
        p0.font.name = '微軟雅黑'
        p0.font.size = Pt(24)
        # 添加文本框
        left, top, width, height = Pt(32), Pt(82), Pt(665), Pt(396)
        text_box = slide.shapes.add_textbox(left, top, width, height)
        tf = text_box.text_frame
        def add_paragraph_texts(texts):
            print(texts[0])
            for i, text in enumerate(texts[:-1]):       # 最后的網(wǎng)址作為超鏈接
                p = tf.add_paragraph()
                p.text = text
                if i == len(texts) - 2:
                    run = p.add_run()
                    run.text = '查看更多'
                    run.hyperlink.address = texts[-1]   # 寫入超鏈接
                    tf.add_paragraph()
        # 在文本框中添加內(nèi)容
        for lst in line2_texts:
            add_paragraph_texts(lst)
    def run(self):
        # 讀取 Excel 數(shù)據(jù)并進(jìn)行預(yù)處理
        df = pd.read_excel(self.input_excel)
        df['發(fā)布機(jī)構(gòu)'] = '發(fā)布機(jī)構(gòu):' + df['發(fā)布機(jī)構(gòu)']
        df['發(fā)布時(shí)間'] = '發(fā)布時(shí)間:' + df['發(fā)布時(shí)間']
        df['關(guān)鍵詞'] = '關(guān)鍵詞:' + df['關(guān)鍵詞']
        # 添加封面幻燈片
        self.add_cover()
        # 添加重復(fù)格式的幻燈片,每頁寫 2 條數(shù)據(jù)
        for i in df.index[::2]:
            self.add_slide([df.loc[i, :].tolist(), df.loc[i+1, :].tolist()])
        # 保存
        self.prs.save(self.ppt_name)
if __name__ == '__main__':
    wpt = WritePowerPoint('news.pptx', 'news.xlsx', 'News Briefs', '2020/4/5')
    wpt.run()

代碼運(yùn)行后便可得到若干頁的 news.pptx:

運(yùn)行結(jié)果1

運(yùn)行結(jié)果2

代碼中還可以加入更多的文本格式設(shè)置代碼,美化幻燈片:

幻燈片示例2

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • pytest實(shí)現(xiàn)多進(jìn)程與多線程運(yùn)行超好用的插件

    pytest實(shí)現(xiàn)多進(jìn)程與多線程運(yùn)行超好用的插件

    本文主要介紹了pytest實(shí)現(xiàn)多進(jìn)程與多線程運(yùn)行超好用的插件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Python PCA降維的兩種實(shí)現(xiàn)方法

    Python PCA降維的兩種實(shí)現(xiàn)方法

    大家好,本篇文章主要講的是Python PCA降維的兩種實(shí)現(xiàn)方法,感興趣的的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • python多線程semaphore實(shí)現(xiàn)線程數(shù)控制的示例

    python多線程semaphore實(shí)現(xiàn)線程數(shù)控制的示例

    這篇文章主要介紹了python多線程semaphore實(shí)現(xiàn)線程數(shù)控制的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 深入理解Python中的*重復(fù)運(yùn)算符

    深入理解Python中的*重復(fù)運(yùn)算符

    這篇文章主要介紹了深入理解Python中的*重復(fù)運(yùn)算符,小編覺得還是挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • python小練習(xí)之爬魷魚游戲的評價(jià)生成詞云

    python小練習(xí)之爬魷魚游戲的評價(jià)生成詞云

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python爬取熱火的魷魚游戲評價(jià),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-10-10
  • python內(nèi)置函數(shù)anext的具體使用

    python內(nèi)置函數(shù)anext的具體使用

    本文主要介紹了python內(nèi)置函數(shù)anext的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Python合并Excel表(多sheet)的實(shí)現(xiàn)

    Python合并Excel表(多sheet)的實(shí)現(xiàn)

    這篇文章主要介紹了Python合并Excel表(多sheet)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 卸載tensorflow-cpu重裝tensorflow-gpu操作

    卸載tensorflow-cpu重裝tensorflow-gpu操作

    這篇文章主要介紹了卸載tensorflow-cpu重裝tensorflow-gpu操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • openCV-Python筆記之解讀圖像的讀取、顯示和保存問題

    openCV-Python筆記之解讀圖像的讀取、顯示和保存問題

    這篇文章主要介紹了openCV-Python筆記之解讀圖像的讀取、顯示和保存問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • pymongo實(shí)現(xiàn)控制mongodb中數(shù)字字段做加法的方法

    pymongo實(shí)現(xiàn)控制mongodb中數(shù)字字段做加法的方法

    這篇文章主要介紹了pymongo實(shí)現(xiàn)控制mongodb中數(shù)字字段做加法的方法,涉及Python使用pymongo模塊操作mongodb數(shù)據(jù)庫字段的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評論