您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何使用Python實現(xiàn)辦公自動化PPT批量轉換操作,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
PPT 分為內容和格式,用 Python 操作 PPT,就是利用 Python 對 PPT 的內容進行獲取和填充,修改 PPT 的格式并不是 Python 的強項。因此,當你有一堆 PPT 要做的時候,先做好一個帶格式的 PPT,然后用 Python 復制這個 PPT 文件,然后再對其進行讀寫。
pip install python-pptx
假如文件「測試.pptx」的內容如下:
那么以下代碼可以讀取其內容:
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í)行結果如下所示:
先來個簡單點的。
假如要生成如下圖所示的 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 的如下版式,我已經用數據一一標出:
比如現(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')
以下方法僅適用于 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批量轉換操作”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。