溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Python實現(xiàn)辦公自動化PPT批量轉換操作

發(fā)布時間:2021-09-14 17:47:38 來源:億速云 閱讀:287 作者:小新 欄目:開發(fā)技術

這篇文章將為大家詳細講解有關如何使用Python實現(xiàn)辦公自動化PPT批量轉換操作,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

    PPT 分為內容和格式,用 Python 操作 PPT,就是利用 Python 對 PPT 的內容進行獲取和填充,修改 PPT 的格式并不是 Python 的強項。因此,當你有一堆 PPT 要做的時候,先做好一個帶格式的 PPT,然后用 Python 復制這個 PPT 文件,然后再對其進行讀寫。

    python-pptx 模塊的安裝

    pip install python-pptx

    讀取 PPT

    假如文件「測試.pptx」的內容如下:

    如何使用Python實現(xiàn)辦公自動化PPT批量轉換操作

    那么以下代碼可以讀取其內容:

    from pptx import Presentation
    prs = Presentation("測試.pptx")
    for index, slide in enumerate(prs.slides):
        print(f"第 {index+1} 頁")
        for shape in slide.shapes:
            if shape.has_text_frame:
                text_frame = shape.text_frame
                # print(text_frame.text)
                # 如果分段讀就用下面的代碼
                for paragraph in text_frame.paragraphs:
                    print(paragraph.text)

    執(zhí)行結果如下所示:

    如何使用Python實現(xiàn)辦公自動化PPT批量轉換操作 

    寫入 PPT

    先來個簡單點的。

    假如要生成如下圖所示的 PPT 頁

    如何使用Python實現(xiàn)辦公自動化PPT批量轉換操作

    代碼可以這樣寫:

    from pptx import Presentation
    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 = "Hello, World!"
    subtitle.text = "python-pptx was here!"
    prs.save('test.pptx')

    添加一張幻燈片

    幻燈片都有板式,同樣的,pptx 提供了 9 種版式讓我們選擇,分別是:

    • Title (presentation title slide)

    • Title and Content

    • Section Header (sometimes called Segue)

    • Two Content (side by side bullet textboxes)

    • Comparison (same but additional title for each side by side content box)

    • Title Only

    • Blank

    • Content with Caption

    • Picture with Caption

    分別對應 PPT 的如下版式,我已經用數據一一標出:

    如何使用Python實現(xiàn)辦公自動化PPT批量轉換操作

    比如現(xiàn)在要添加一張標題和內容的版式,就可以這樣寫代碼:

    from pptx import Presentation
    prs = Presentation()
    SLD_LAYOUT_TITLE_AND_CONTENT = 1  ##標題和內容版式的序號
    slide_layout = prs.slide_layouts[SLD_LAYOUT_TITLE_AND_CONTENT]
    slide = prs.slides.add_slide(slide_layout)

    為幻燈片添加內容

    添加內容之前先理解一下形狀。從技術上講,可以在幻燈片上放置 9 種類型的形狀:

    • 形狀 - 帶有填充和輪廓的自動形狀

    • 文本框 - 沒有填充和輪廓的自動形狀

    • 占位符 - 可以出現(xiàn)在幻燈片布局或母版上的自動形狀,并在使用該布局的幻燈片上繼承,允許添加采用占位符格式的內容

    • 線路/連接器

    • 圖片

    • 表格 - 行和列的東西

    • 圖表 – 餅圖、折線圖等。

    • 智能藝術 - 尚不支持,但如果存在則保留

    • 媒體剪輯——視頻或音頻

    每一個幻燈片都有由一個形狀樹來組織,之所以稱為樹,是因為它在一般情況下是分層的;形狀樹中的節(jié)點可以是一個組形狀,它本身可以包含形狀并具有與形狀樹相同的語義。對于大多數用途,形狀樹具有列表語義。

    獲取幻燈片中的形狀:

    shapes = slide.shapes

    自動形狀是規(guī)則形狀。正方形、圓形、三角形、星星之類的。有 182 種不同的形狀可供選擇。其中 120 個具有調整“手柄”,您可以使用它來改變形狀。

    許多形狀類型共享一組公共屬性。我們將在此處介紹其中的許多形狀,因為其中一些形狀只是 AutoShape 的一種特殊形式。

    添加自動形狀

    以下代碼添加一個圓角矩形形狀,一英寸見方,并放置在距幻燈片左上角一英寸處:

    from pptx.enum.shapes import MSO_SHAPE
    from pptx.util import Inches
    shapes = slide.shapes
    left = top = width = height = Inches(1.0)
    shape = shapes.add_shape(
        MSO_SHAPE.ROUNDED_RECTANGLE, left, top, width, height
    )
    prs.save('新建幻燈片.pptx')

    有關所有 182 種自動形狀類型的列表,具體請參閱官方文檔 MSO_AUTO_SHAPE_TYPE 枚舉項。

    占位符

    占位符也是一種形狀,有 18 種類型的占位符。標題、中心標題、副標題、正文,內容,圖片,剪貼畫,圖表、表格、智能藝術,日期、頁腳、幻燈片編號,媒體剪輯,標題,垂直正文、垂直對象、垂直標題。

    幻燈片上的占位符可以為空或已填充。這在圖片占位符中最為明顯。未填充時,占位符會顯示可自定義的提示文本。內容豐富的占位符在為空時也會顯示一個或多個內容插入按鈕。

    純文本占位符在輸入文本的第一個字符時進入“填充”模式,并在刪除文本的最后一個字符時返回“未填充”模式。內容豐富的占位符在插入圖片等內容時進入填充模式,并在刪除該內容時返回未填充模式。為了刪除填充的占位符,形狀必須被刪除兩次。第一次刪除刪除內容并將占位符恢復到未填充模式。額外的刪除將刪除占位符本身。可以通過重新應用布局來恢復已刪除的占位符。

    訪問占位符

    >>> prs = Presentation()
    >>> slide = prs.slides.add_slide(prs.slide_layouts[8])
    >>> for shape in slide.placeholders:
    ...     print('%d %s' % (shape.placeholder_format.idx, shape.name))
    ...
    0  Title 1
    1  Picture Placeholder 2
    2  Text Placeholder 3

    如果已經知道占位符的索引,也可通過索引來訪問:

    >>> slide.placeholders[1]
    <pptx.parts.slide.PicturePlaceholder object at 0x10d094590>
    >>> slide.placeholders[2].name
    'Text Placeholder 3'

    將內容插入占位符

    >>> prs = Presentation()
    >>> slide = prs.slides.add_slide(prs.slide_layouts[8])
    >>> placeholder = slide.placeholders[1]  # idx key, not position
    >>> placeholder.name
    'Picture Placeholder 2'
    >>> placeholder.placeholder_format.type
    PICTURE (18)
    >>> picture = placeholder.insert_picture('my-image.png')

    如果要插入表格:

    from pptx import Presentation
    from pptx.util import Inches
    prs = Presentation()
    title_only_slide_layout = prs.slide_layouts[5]
    slide = prs.slides.add_slide(title_only_slide_layout)
    shapes = slide.shapes
    shapes.title.text = 'Adding a Table'
    rows = cols = 2
    left = top = Inches(2.0)
    width = Inches(6.0)
    height = Inches(0.8)
    table = shapes.add_table(rows, cols, left, top, width, height).table
    # set column widths
    table.columns[0].width = Inches(2.0)
    table.columns[1].width = Inches(4.0)
    # write column headings
    table.cell(0, 0).text = 'Foo'
    table.cell(0, 1).text = 'Bar'
    # write body cells
    table.cell(1, 0).text = 'Baz'
    table.cell(1, 1).text = 'Qux'
    prs.save('write_ppt_table.pptx')

    如果要插入圖表:

    from pptx import Presentation
    from pptx.chart.data import CategoryChartData
    from pptx.enum.chart import XL_CHART_TYPE
    from pptx.util import Inches
    # create presentation with 1 slide ------
    prs = Presentation()
    slide = prs.slides.add_slide(prs.slide_layouts[5])
    # define chart data ---------------------
    chart_data = CategoryChartData()
    chart_data.categories = ['East', 'West', 'Midwest']
    chart_data.add_series('Series 1', (19.2, 21.4, 16.7))
    # add chart to slide --------------------
    x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
    slide.shapes.add_chart(
        XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
    ) 
    prs.save('write_ppt_chart.pptx')

    PPT 轉 Pdf

    以下方法僅適用于 windows

    def PPTtoPDF2(inputFileName, outputFileName, formatType = 32):
        import comtypes.client
        powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
        powerpoint.Visible = 1
        if outputFileName[-3:] != 'pdf':
            outputFileName = outputFileName + ".pdf"
        deck = powerpoint.Presentations.Open(inputFileName)
        deck.SaveAs(outputFileName, formatType) # formatType = 32 for ppt to pdf
        deck.Close()
        powerpoint.Quit()

    關于“如何使用Python實現(xiàn)辦公自動化PPT批量轉換操作”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI