去年第一次接觸了pptx-python菱鸥,大致看了一下澎蛛,沒有做深入的探索抚垄。直到最近朋友有一堆ppt要做,因?yàn)闃邮奖容^單一谋逻,量有很大呆馁,想起來這個(gè)python包正好派上用場(chǎng),花了一天的時(shí)間看了官方文檔毁兆,無奈這英語水平還要繼續(xù)努力啊≌懵耍現(xiàn)在將所看所理解的整理如下:
建立和打開一個(gè)pptx
最新更新的文檔包已經(jīng)可以支持建立和打開pptx,形式如下
presentation的基本模塊
from pptx import Presentation
prs = Presentation()
slide_1 = prs.slides.add_slide(prs.slide_layouts[0])
print(prs.slide_height)#高度
print(prs.slide_layouts)#布局
print(prs.slide_master)#主布局
print(prs.slide_width)#寬度
print(prs.slides)#幻燈片
layouts有默認(rèn)有多種气堕,可以自己預(yù)先定義纺腊,推薦還是自己做好,可以通過slide_height和silde_width來查看幻燈片大小送巡。
獲取presentation的信息
可以通過core_properties這個(gè)模塊查看文檔信息,對(duì)于文檔最后的整理和分類有一定作用盒卸。
from pptx import Presentation
prs = Presentation('Crew Drill 4.pptx')
core = prs.core_properties
print(core.author)
print(core.category)
print(core.comments)
print(core.content_status)
print(core.created)
print(core.identifier)
print(core.keywords)
print(core.language)
print(core.last_modified_by)
print(core.last_printed)
print(core.modified)
print(core.revision)
print(core.subject)
print(core.title)
print(core.version)
slides模塊
slides就是ppt里面的幻燈片骗爆,他是一個(gè)集合,可以通過循環(huán)等方式取到單個(gè)slide操作蔽介,也可以添加新的幻燈片和獲取幻燈片的信息摘投。
from pptx import Presentation
#slides 是所有幻燈片的集合煮寡,可以用列表的形式表示
#slides功能有:get(slide_id),add_slide(slide_layout),index(slide)
prs = Presentation('Crew Drill 4.pptx')
print(prs.slides.get(1))#返回slide identified,搞不懂這是什么識(shí)別碼在哪里
slide_1 = prs.slides.add_slide(prs.slide_layouts[0])#增加幻燈片
slide_3 = prs.slides[0]#列表分解
print(prs.slides.index(slide_3))#取index
單個(gè)slide和layouts操作
#slide模塊
from pptx import Presentation
prs = Presentation('Crew Drill 4.pptx')
slide_1 = prs.slides[0]
#background搞不懂
print(help(slide_1.background))
print(slide_1.background)
print(slide_1.element)
print(slide_1.follow_master_background)
print(slide_1.has_notes_slide)
print(slide_1.name)
print(slide_1.notes_slide)
print(slide_1.placeholders)
print(slide_1.shapes)
print(slide_1.slide_id)
print(slide_1.slide_layout)
#slidelayouts 模塊
from pptx import Presentation
prs = Presentation()
slide_layout_4 = prs.slide_layouts[4]
print(slide_layout_4.placeholders)#獲取此布局中的占位符
print(slide_layout_4.shapes)#獲取此布局中的形狀
print(slide_layout_4.slide_master)#獲取此布局中的master母板
print(slide_layout_4.used_by_slides)#這個(gè)不知道是啥
slide和layouts模塊用的最多的主要還是獲取slide的shape,然后進(jìn)行操作犀呼,作者試了一下如果大量工作可以做循環(huán)幸撕,但是ppt中命名很混亂,建議自己先做母板調(diào)整后再獲取會(huì)更高效外臂。
shapes模塊
shapes模塊應(yīng)該是最重要坐儿,使用最頻繁的模塊了 。slideshapes模塊.shapes包含:
auto shape:預(yù)設(shè)的形狀宋光,各種圖形貌矿,包括文本框
picture:圖片一旦添加就是一種特殊的auto shape
graphic frame:指一些table,chart和藝術(shù)畫
group shape:組合圖形
line/connector:連接符罪佳,例如直線逛漫,曲線,折現(xiàn)等等
content part:其他的內(nèi)容赘艳,不知道什么意思
presentation提供了多種單位酌毡。presentation使用的是EMU
1 inche = 914400 EMU
python提供了多種單位供使用,比如inches蕾管,Pt枷踏,Cm
from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE
from pptx.enum.shapes import MSO_CONNECTOR_TYPE
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches,Cm,Pt
from pptx.enum.text import PP_PARAGRAPH_ALIGNMENT
shape添加一個(gè)圖表,需要導(dǎo)入pptx.chart.data和pptx.enum.chart模塊
shape添加一個(gè)auto-shape娇掏,導(dǎo)入 MSO_AUTO_SHAPE_TYPE
shape添加connector呕寝,導(dǎo)入MSO_CONNECTOR_TYPE
shape使用單位,導(dǎo)入pptx.util模塊
shape文本對(duì)齊婴梧,是使用PP_PARAGRAPH_ALIGNMENT
prs = Presentation('hello_ppt.pptx')
slide_1 = prs.slides[0]
from pptx.dml.color import RGBColor
#add_chart添加圖表功能
type = XL_CHART_TYPE.COLUMN_CLUSTERED
x,y,cx,cy = Inches(2),Inches(2),Inches(6),Inches(4.5)
chart_data = CategoryChartData()
chart_data.categories = ['East','West','Midwest']
chart_data.add_series('Series 1',(19.2,21.4,16.7))
slide_1.shapes.add_chart(type,x,y,cx,cy,chart_data)
添加一個(gè)圖表
#add_connector添加連接線功能
connector_type = MSO_CONNECTOR_TYPE.ELBOW
connector = slide_1.shapes.add_connector(
connector_type,Cm(2),Cm(2),Cm(10),Cm(10)
)
添加一個(gè)連接線
#add_picture插入圖片功能
image_file = 'picture_1.jpg'
left,top = Cm(0),Cm(0)
width,height = Cm(25.4),Cm(19.0)
picture = slide_1.shapes.add_picture(image_file,left,top,width,height)
#增加一個(gè)auto shape
slide_1.shapes.add_shape(
MSO_AUTO_SHAPE_TYPE.ROUNDED_RECTANGLE,
Cm(2),Cm(2),Cm(2),Cm(2)
)
# 長(zhǎng)度單位換算
length = Inches(1)
print(length)
print(length.inches,length.cm,length.pt)
fill = slide_1.shapes[2].fill
fill.solid()#實(shí)心填充
fill.fore_color.rgb = RGBColor(255,0,0)
shape的填充現(xiàn)在貌似還不是很完善下梢,填充之前要選擇填充的類型
for shape in slide_1.shapes:
print(shape.is_placeholder)
print(slide_1.placeholders[0].name)
print(slide_1.shapes.title)
subtitle = slide_1.placeholders[1].placeholder_format.type
# 添加文本
text_frame = slide_1.shapes[0].text_frame
text_frame.clear()
text_frame.paragraphs[0].text = 'hello_world'#paragraphs是一個(gè)truple,現(xiàn)在沒有元素,填寫第一個(gè)元素塞蹭,所有要用0
text_frame.add_paragraph().text = 'hello_hangzhou'#add_paragraph是text_frame的孽江,填完就是paragraph的第2個(gè)元素
text_frame.paragraphs[0].add_run().text = 'fuck the world'
print(text_frame.paragraphs[1].text)
print(text_frame.paragraphs[0].text)
ppt_title = slide_1.shapes[0].text_frame
sub_title = slide_1.shapes[1].text_frame
ppt_title.clear()
sub_title.clear()
ppt_title.paragraphs[0].text = '辦公自動(dòng)化'
sub_title.paragraphs[0].text = 'python-pptx使用詳解'
#段落編輯
ppt_title.paragraphs[0].alignment = PP_PARAGRAPH_ALIGNMENT.LEFT
sub_title.paragraphs[0].alignment = PP_PARAGRAPH_ALIGNMENT.CENTER
#字體編輯
ppt_title.paragraphs[0].font.name = '微軟雅黑'
ppt_title.paragraphs[0].font.size = Pt(70)
ppt_title.paragraphs[0].font.bold = True
ppt_title.paragraphs[0].font.italic = True
ppt_title.paragraphs[0].font.color.rgb = RGBColor(255,0,0)
sub_title.paragraphs[0].font.name = '微軟雅黑'
sub_title.paragraphs[0].font.size = Pt(40)
sub_title.paragraphs[0].font.bold = False
sub_title.paragraphs[0].font.italic = False
sub_title.paragraphs[0].font.color.rgb = RGBColor(255,255,0)
#保存ppt
prs.save('hello_ppt.pptx')