最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python實(shí)現(xiàn)批量生成文本框并自動(dòng)排版

 更新時(shí)間:2026年04月24日 08:13:21   作者:站大爺IP  
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)批量生成文本框并自動(dòng)排版,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值感興趣的小伙伴可以了解一下

?小張是個(gè)運(yùn)營,每周五都要做數(shù)據(jù)周報(bào)。

每次打開PPT,新建一頁,拖一個(gè)文本框進(jìn)來,調(diào)字號(hào)、改字體、居中、加粗、換顏色……十幾頁P(yáng)PT做下來,大半個(gè)下午就沒了。

最煩的是,下周還要再來一遍。

她問我:“這些重復(fù)操作,能不能讓代碼幫我做?”

能。Python里有個(gè)庫叫python-pptx,專門干這事兒。

你可能會(huì)想:“我連PPT都沒玩明白,還讓我寫代碼?”

別急。做PPT的重復(fù)操作,本質(zhì)上就是三件事:在哪放文本框、寫什么字、字長(zhǎng)什么樣。用代碼寫一遍,以后每次運(yùn)行就行,連格式刷都省了。

先搭個(gè)最簡(jiǎn)單的框

你只需要四行代碼,就能生成一個(gè)文本框。

from pptx import Presentation
from pptx.util import Inches

# 新建PPT(或者打開現(xiàn)有的)
prs = Presentation()
# 加一頁空白幻燈片
slide = prs.slides.add_slide(prs.slide_layouts[6])

# 畫個(gè)文本框:離左邊1英寸,離上邊1英寸,寬5英寸,高2英寸
textbox = slide.shapes.add_textbox(Inches(1), Inches(1), Inches(5), Inches(2))

# 寫點(diǎn)字進(jìn)去
textbox.text_frame.text = "我是自動(dòng)生成的"

# 保存
prs.save("我的第一個(gè)文本框.pptx")

跑一下這段代碼,打開生成的PPT,你會(huì)在空白頁的左上角看到一個(gè)文本框。

這里有個(gè)概念叫“坐標(biāo)系統(tǒng)”。PPT里所有東西的位置,都是用英寸(Inches)或者厘米(Cm)來定的。add_textbox的四個(gè)參數(shù)分別是:

  • left:離頁面左邊的距離
  • top:離頁面上邊的距離
  • width:文本框的寬度
  • height:文本框的高度

你可以把這些數(shù)字隨便改,比如Inches(2)就是兩英寸。改完再跑一遍,框的位置和大小就變了。

別把字都擠在一起:理解三層結(jié)構(gòu)

你可能會(huì)遇到一個(gè)情況:在一個(gè)文本框里寫了好幾行字,想單獨(dú)調(diào)整其中一行的樣式,發(fā)現(xiàn)調(diào)不了。

這就涉及到python-pptx里文本的核心結(jié)構(gòu)了。它有三層:

TextFrame(文本框容器) :最外層,管整個(gè)框的行為,比如邊距、垂直對(duì)齊、是否自動(dòng)換行。

Paragraph(段落) :中間層,管一段話的行為,比如對(duì)齊方式、行間距、項(xiàng)目符號(hào)層級(jí)。

Run(文字塊) :最內(nèi)層,真正管文字長(zhǎng)什么樣,比如字體、字號(hào)、顏色、粗體斜體。

簡(jiǎn)單說:一個(gè)文本框里可以有多個(gè)段落,一個(gè)段落里可以有多個(gè)Run。

為什么要有Run?因?yàn)橐欢卧捓锟赡芗扔衅胀ㄎ淖钟钟屑哟旨t色文字。Run就是用來實(shí)現(xiàn)這種“混搭”的。

下面這段代碼展示了這三層怎么配合:

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor

prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])

# 新建文本框
textbox = slide.shapes.add_textbox(Inches(1), Inches(1), Inches(8), Inches(3))
frame = textbox.text_frame

# 第一段:普通段落
frame.text = "這是第一段"
frame.paragraphs[0].alignment = PP_ALIGN.CENTER  # 居中對(duì)齊

# 第二段:手動(dòng)添加
p2 = frame.add_paragraph()
p2.text = "這是第二段,有特殊格式:"

# 在第二段里加一個(gè)Run,只讓"重點(diǎn)"兩個(gè)字變色
run = p2.add_run()
run.text = "重點(diǎn)"
run.font.bold = True
run.font.color.rgb = RGBColor(255, 0, 0)  # 紅色
run.font.size = Pt(18)

# 繼續(xù)加普通文字
run2 = p2.add_run()
run2.text = " 后面的普通文字"

prs.save("三層結(jié)構(gòu)演示.pptx")

跑完這段,你會(huì)看到:第一段居中,第二段里“重點(diǎn)”兩個(gè)字又大又紅又粗,后面的文字保持原樣。

這就是Run的威力——精細(xì)控制。

讓文字更好看:字體、字號(hào)、顏色、對(duì)齊

做PPT的人都知道,好看的排版離不開這些細(xì)節(jié)。python-pptx基本都支持。

字體和字號(hào)

run = frame.paragraphs[0].add_run()
run.text = "Hello"
run.font.name = "微軟雅黑"  # 字體名
run.font.size = Pt(24)      # 字號(hào),單位是磅

粗體、斜體、下劃線

run.font.bold = True      # 加粗
run.font.italic = True    # 斜體
run.font.underline = True  # 下劃線

顏色

from pptx.dml.color import RGBColor

# RGB顏色,三個(gè)數(shù)字分別代表紅綠藍(lán),范圍0-255
run.font.color.rgb = RGBColor(255, 0, 0)    # 紅色
run.font.color.rgb = RGBColor(0, 112, 192) # 一種藍(lán)色

段落對(duì)齊

from pptx.enum.text import PP_ALIGN

paragraph.alignment = PP_ALIGN.CENTER  # 居中
paragraph.alignment = PP_ALIGN.LEFT    # 左對(duì)齊
paragraph.alignment = PP_ALIGN.RIGHT   # 右對(duì)齊

文本框級(jí)別的設(shè)置(整個(gè)框的垂直對(duì)齊、邊距、自動(dòng)換行):

from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE

frame.vertical_anchor = MSO_ANCHOR.MIDDLE  # 文字在框里垂直居中
frame.margin_left = Inches(0.2)            # 左邊距
frame.margin_top = Inches(0.1)             # 上邊距
frame.word_wrap = True                     # 自動(dòng)換行
frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT  # 根據(jù)文字自動(dòng)調(diào)整框大小

這些設(shè)置混在一起用,基本能實(shí)現(xiàn)PPT里95%的排版需求。

做出有層次感的文本:項(xiàng)目符號(hào)和多級(jí)列表

做PPT少不了要點(diǎn)列表。python-pptx支持自動(dòng)生成項(xiàng)目符號(hào),還能縮進(jìn)。

from pptx import Presentation
from pptx.util import Inches

prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])

textbox = slide.shapes.add_textbox(Inches(1), Inches(1), Inches(6), Inches(3))
frame = textbox.text_frame

# 清空默認(rèn)段落,自己從頭加
frame.clear()

# 加三個(gè)要點(diǎn),層級(jí)不同
items = [
    ("核心結(jié)論", 0),
    ("  營收增長(zhǎng)25%", 1),
    ("    主要來自華東區(qū)", 2),
    ("  成本下降10%", 1),
]

for text, level in items:
    p = frame.add_paragraph()
    p.text = text
    p.level = level  # 0是最外層,數(shù)字越大縮進(jìn)越多
    # 默認(rèn)就有項(xiàng)目符號(hào),如果想關(guān)掉:
    # p.bullet = False

prs.save("項(xiàng)目符號(hào)演示.pptx")

跑完這段,你會(huì)看到一個(gè)有層級(jí)縮進(jìn)的列表,就像Word里的多級(jí)列表一樣。

一個(gè)完整例子:批量生成周報(bào)

現(xiàn)在把小張的需求串起來。假設(shè)她要生成一份周報(bào),包含三部分:標(biāo)題、核心數(shù)據(jù)(加粗紅色)、分析結(jié)論(項(xiàng)目符號(hào))。

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor

def create_report(report_title, key_number, conclusions):
    prs = Presentation()
    
    # 封面頁
    slide = prs.slides.add_slide(prs.slide_layouts[6])
    
    # 標(biāo)題框
    title_box = slide.shapes.add_textbox(Inches(1), Inches(2), Inches(8), Inches(1))
    title_frame = title_box.text_frame
    title_frame.text = report_title
    title_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
    title_frame.paragraphs[0].runs[0].font.size = Pt(32)
    title_frame.paragraphs[0].runs[0].font.bold = True
    
    # 核心數(shù)據(jù)框
    data_box = slide.shapes.add_textbox(Inches(1), Inches(3.5), Inches(8), Inches(0.8))
    data_frame = data_box.text_frame
    data_frame.text = f"核心數(shù)據(jù):"
    run = data_frame.paragraphs[0].add_run()
    run.text = f" {key_number}"
    run.font.bold = True
    run.font.color.rgb = RGBColor(255, 0, 0)
    run.font.size = Pt(20)
    data_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
    
    # 分析結(jié)論頁
    slide2 = prs.slides.add_slide(prs.slide_layouts[6])
    box = slide2.shapes.add_textbox(Inches(1), Inches(1.5), Inches(8), Inches(4))
    frame = box.text_frame
    frame.text = "分析結(jié)論:"
    frame.paragraphs[0].font.size = Pt(24)
    frame.paragraphs[0].font.bold = True
    
    for conclusion in conclusions:
        p = frame.add_paragraph()
        p.text = conclusion
        p.level = 0
        p.font.size = Pt(16)
    
    prs.save("周報(bào).pptx")
    print("周報(bào)生成成功!")

# 調(diào)用函數(shù)
create_report(
    "第45周運(yùn)營周報(bào)",
    "GMV突破500萬",
    ["用戶活躍度提升12%", "新客轉(zhuǎn)化率創(chuàng)歷史新高", "下周重點(diǎn)關(guān)注留存率"]
)

小張以后每周只需要改三個(gè)參數(shù):標(biāo)題、核心數(shù)字、結(jié)論列表。運(yùn)行一下,幾秒鐘就能拿到一份格式統(tǒng)一的周報(bào)。

遇到模板怎么辦?替換占位符

很多公司有自己的PPT模板,標(biāo)題在固定位置,logo在固定位置。

python-pptx可以打開現(xiàn)有PPT,找到特定的占位符,替換里面的內(nèi)容。

prs = Presentation("公司模板.pptx")
slide = prs.slides[0]  # 取第一頁

# 遍歷這一頁上所有的占位符
for shape in slide.placeholders:
    print(f"占位符ID: {shape.placeholder_format.idx}, 名字: {shape.name}")

# 根據(jù)索引替換
slide.placeholders[0].text = "2025年Q1匯報(bào)"
slide.placeholders[1].text = "銷售部"

prs.save("填好內(nèi)容的匯報(bào).pptx")

先跑一下打印占位符的代碼,記下每個(gè)位置對(duì)應(yīng)的ID,然后就可以用代碼批量填充了。

幾個(gè)容易踩的坑

坑一:修改已有文本框內(nèi)容時(shí),格式丟了

如果你拿到一個(gè)已有的文本框,直接text_frame.text = "新內(nèi)容",里面的格式會(huì)被清空。想保留格式,應(yīng)該操作具體的段落和Run。

坑二:中文字體顯示成方塊

必須指定系統(tǒng)里存在的字體。Windows用"微軟雅黑""SimHei",Mac用"PingFang SC"。不指定的話,可能會(huì)用默認(rèn)字體,中文就變成方塊了。

坑三:文本框太小,字顯示不全

設(shè)置text_frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT,文本框會(huì)自動(dòng)撐大?;蛘咴O(shè)置text_frame.word_wrap = True讓它自動(dòng)換行。

坑四:添加多個(gè)段落時(shí),第一段消失了

剛創(chuàng)建的文本框自帶一個(gè)空段落。如果你調(diào)用add_paragraph()之前沒有clear(),那第一段可能會(huì)被覆蓋。保險(xiǎn)做法:加內(nèi)容之前先text_frame.clear()。

還能做什么?

掌握了文本框,python-pptx還能干更多事:

  • 插入圖片和表格
  • 畫各種形狀(矩形、圓形、箭頭)
  • 讀取現(xiàn)有PPT的內(nèi)容
  • 批量修改幾十個(gè)PPT的頁腳

比如給100份產(chǎn)品介紹PPT統(tǒng)一加上公司logo和聯(lián)系方式,手改要半天,用代碼兩秒跑完。

回到小張。她現(xiàn)在每周五上午花兩分鐘改改參數(shù),然后去倒杯咖啡,回來周報(bào)就生成好了。

她說:“以前覺得會(huì)寫代碼的人很酷,現(xiàn)在發(fā)現(xiàn)會(huì)寫代碼的自己更酷。”

?到此這篇關(guān)于使用Python實(shí)現(xiàn)批量生成文本框并自動(dòng)排版的文章就介紹到這了,更多相關(guān)Python批量生成文本框內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python TestSuite生成測(cè)試報(bào)告過程解析

    Python TestSuite生成測(cè)試報(bào)告過程解析

    這篇文章主要介紹了Python TestSuite生成測(cè)試報(bào)告過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • python基礎(chǔ)入門之列表(一)

    python基礎(chǔ)入門之列表(一)

    在Python中,列表(list)是常用的數(shù)據(jù)類型。列表由一系列按照特定順序排列的項(xiàng)(item)組成。
    2021-06-06
  • 怎么在Python的正則表達(dá)式中找到每個(gè)匹配的確切位置

    怎么在Python的正則表達(dá)式中找到每個(gè)匹配的確切位置

    Python正則表達(dá)式是一種用于字符串匹配和操作的工具,它通過定義一系列的字符組合規(guī)則來實(shí)現(xiàn)對(duì)文本的查找、替換等操作,這篇文章主要介紹了怎么在Python的正則表達(dá)式中找到每個(gè)匹配的確切位置,需要的朋友可以參考下
    2026-01-01
  • python中Scikit-learn庫的高級(jí)特性和實(shí)踐分享

    python中Scikit-learn庫的高級(jí)特性和實(shí)踐分享

    Scikit-learn是一個(gè)廣受歡迎的Python庫,它用于解決許多機(jī)器學(xué)習(xí)的問題,在本篇文章中,我們將進(jìn)一步探索Scikit-learn的高級(jí)特性和最佳實(shí)踐,需要的朋友可以參考下
    2023-07-07
  • python中判斷文件結(jié)束符的具體方法

    python中判斷文件結(jié)束符的具體方法

    在本篇文章里小編給大家分享的是一篇關(guān)于python中判斷文件結(jié)束符的具體方法,有興趣的朋友們可以參考學(xué)習(xí)下。
    2020-08-08
  • python實(shí)現(xiàn)的文件同步服務(wù)器實(shí)例

    python實(shí)現(xiàn)的文件同步服務(wù)器實(shí)例

    這篇文章主要介紹了python實(shí)現(xiàn)的文件同步服務(wù)器,實(shí)例分析了文件同步服務(wù)器的原理及客戶端、服務(wù)端的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • 使用Arcgis做路徑規(guī)劃方式(使用python腳本調(diào)用)

    使用Arcgis做路徑規(guī)劃方式(使用python腳本調(diào)用)

    本文介紹了如何使用ArcGIS和Python來解決鐵路路徑規(guī)劃問題,通過配置ArcGIS、導(dǎo)入路網(wǎng)數(shù)據(jù)和列車行駛點(diǎn)數(shù)據(jù)、處理線要素、構(gòu)建拓?fù)浣Y(jié)構(gòu),可以使用Network?Analyst工具進(jìn)行路徑分析,最后,通過Python腳本自動(dòng)化處理大量數(shù)據(jù),生成最優(yōu)路徑
    2024-12-12
  • Django自定義錯(cuò)誤頁面實(shí)現(xiàn)方式

    Django自定義錯(cuò)誤頁面實(shí)現(xiàn)方式

    文章介紹了在Django項(xiàng)目中設(shè)置生產(chǎn)環(huán)境相關(guān)配置的方法,包括關(guān)閉調(diào)試模式、設(shè)置允許訪問的主機(jī)、創(chuàng)建錯(cuò)誤頁面模板以及在項(xiàng)目的urls.py中指定錯(cuò)誤處理視圖的入口
    2025-10-10
  • 使用Pytorch來擬合函數(shù)方式

    使用Pytorch來擬合函數(shù)方式

    今天小編就為大家分享一篇使用Pytorch來擬合函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python實(shí)現(xiàn)多級(jí)目錄壓縮與解壓文件的方法

    Python實(shí)現(xiàn)多級(jí)目錄壓縮與解壓文件的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)多級(jí)目錄壓縮與解壓文件的方法,涉及Python針對(duì)文件路徑的遍歷、判斷以及文件壓縮、解壓縮等相關(guān)操作技巧,需要的朋友可以參考下
    2018-09-09

最新評(píng)論

随州市| 利津县| 灌云县| 铜鼓县| 平阳县| 河南省| 凉城县| 阿拉尔市| 兴业县| 乐至县| 临夏市| 遵义县| 鹤峰县| 屯门区| 长岛县| 华亭县| 井冈山市| 沭阳县| 得荣县| 定远县| 龙川县| 枣强县| 英德市| 思南县| 千阳县| 贵州省| 德安县| 陆川县| 新闻| 子洲县| 沁源县| 木里| 武鸣县| 四子王旗| 宁津县| 江阴市| 即墨市| 满洲里市| 东乡县| 澄城县| 洛南县|