辦公自動(dòng)化之pptx-python詳解

去年第一次接觸了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')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市番电,隨后出現(xiàn)的幾起案子岗屏,更是在濱河造成了極大的恐慌,老刑警劉巖漱办,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件这刷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡娩井,警方通過查閱死者的電腦和手機(jī)暇屋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洞辣,“玉大人咐刨,你說我怎么就攤上這事昙衅。” “怎么了定鸟?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵而涉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我联予,道長(zhǎng)啼县,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任躯泰,我火速辦了婚禮谭羔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘麦向。我一直安慰自己瘟裸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布诵竭。 她就那樣靜靜地躺著话告,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卵慰。 梳的紋絲不亂的頭發(fā)上沙郭,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音裳朋,去河邊找鬼病线。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鲤嫡,可吹牛的內(nèi)容都是我干的送挑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼暖眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼惕耕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诫肠,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤司澎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后栋豫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挤安,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年丧鸯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛤铜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖昂羡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摔踱,我是刑警寧澤虐先,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站派敷,受9級(jí)特大地震影響蛹批,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜篮愉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一腐芍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧试躏,春花似錦猪勇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至犀被,卻和暖如春椅您,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寡键。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工掀泳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人西轩。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓员舵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親遭商。 傳聞我的和親對(duì)象是個(gè)殘疾皇子固灵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 上周,一朋友找我?guī)兔⑺掷锏木毩?xí)題word文檔做成ppt劫流,要有動(dòng)畫效果巫玻,即按一下才顯示答案那種,他要在課堂上講祠汇。...
    paulye閱讀 16,836評(píng)論 2 11
  • 一句話概括本文: 靈感來自于5.15錘子鳥巢發(fā)布會(huì)上老羅用閃念膠囊一鍵生成了32張PPT可很,原理利用Python-p...
    coder_pig閱讀 1,632評(píng)論 3 4
  • 最喜歡在下雨的時(shí)候坐在車上 看淅淅瀝瀝的雨落在車窗 看行人狼狽的彷徨 看路過的繁華都模糊了模樣 最喜歡在夜深的時(shí)候...
    VCWLEU閱讀 249評(píng)論 0 0
  • 現(xiàn)在是 2018 年春節(jié)剛過诗力,對(duì)自己在 2017 年 11月之后的所做及所想做個(gè)反思。為什么是 11 月之后呢我抠?因...
    劉員外__閱讀 450評(píng)論 3 3
  • 錦州御牌食品有限公司成立于2011年5月苇本,位于錦州經(jīng)濟(jì)技術(shù)開發(fā)區(qū)(國(guó)家級(jí)開發(fā)區(qū))天王路二段99號(hào)袜茧,南觀渤海、北接繁...
    錦州御燒烤閱讀 156評(píng)論 0 0