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

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

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

?小張是個運營,每周五都要做數(shù)據(jù)周報。

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

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

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

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

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

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

先搭個最簡單的框

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

from pptx import Presentation
from pptx.util import Inches

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

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

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

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

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

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

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

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

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

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

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

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

Paragraph(段落) :中間層,管一段話的行為,比如對齊方式、行間距、項目符號層級。

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

簡單說:一個文本框里可以有多個段落,一個段落里可以有多個Run。

為什么要有Run?因為一段話里可能既有普通文字又有加粗紅色文字。Run就是用來實現(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  # 居中對齊

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

# 在第二段里加一個Run,只讓"重點"兩個字變色
run = p2.add_run()
run.text = "重點"
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")

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

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

讓文字更好看:字體、字號、顏色、對齊

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

字體和字號

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

粗體、斜體、下劃線

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

顏色

from pptx.dml.color import RGBColor

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

段落對齊

from pptx.enum.text import PP_ALIGN

paragraph.alignment = PP_ALIGN.CENTER  # 居中
paragraph.alignment = PP_ALIGN.LEFT    # 左對齊
paragraph.alignment = PP_ALIGN.RIGHT   # 右對齊

文本框級別的設(shè)置(整個框的垂直對齊、邊距、自動換行):

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                     # 自動換行
frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT  # 根據(jù)文字自動調(diào)整框大小

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

做出有層次感的文本:項目符號和多級列表

做PPT少不了要點列表。python-pptx支持自動生成項目符號,還能縮進(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()

# 加三個要點,層級不同
items = [
    ("核心結(jié)論", 0),
    ("  營收增長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)就有項目符號,如果想關(guān)掉:
    # p.bullet = False

prs.save("項目符號演示.pptx")

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

一個完整例子:批量生成周報

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

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("周報.pptx")
    print("周報生成成功!")

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

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

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

很多公司有自己的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匯報"
slide.placeholders[1].text = "銷售部"

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

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

幾個容易踩的坑

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

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

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

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

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

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

坑四:添加多個段落時,第一段消失了

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

還能做什么?

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

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

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

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

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

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

相關(guān)文章

  • Python TestSuite生成測試報告過程解析

    Python TestSuite生成測試報告過程解析

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

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

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

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

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

    python中Scikit-learn庫的高級特性和實踐分享

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

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

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

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

    這篇文章主要介紹了python實現(xiàn)的文件同步服務(wù)器,實例分析了文件同步服務(wù)器的原理及客戶端、服務(wù)端的實現(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ù)和列車行駛點數(shù)據(jù)、處理線要素、構(gòu)建拓?fù)浣Y(jié)構(gòu),可以使用Network?Analyst工具進(jìn)行路徑分析,最后,通過Python腳本自動化處理大量數(shù)據(jù),生成最優(yōu)路徑
    2024-12-12
  • Django自定義錯誤頁面實現(xiàn)方式

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

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

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

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

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

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

最新評論

惠安县| 左云县| 萨嘎县| 常德市| 巴中市| 巢湖市| 蒙阴县| 怀安县| 元谋县| 佛教| 兴仁县| 民县| 莱芜市| 临西县| 清徐县| 泊头市| 莎车县| 手机| 若羌县| 城口县| 上林县| 湖北省| 蒙阴县| 苍溪县| 利辛县| 灵宝市| 凌海市| 阳原县| 昌江| 绥江县| 驻马店市| 普兰店市| 阿合奇县| 仪陇县| 山阴县| 平谷区| 弥勒县| 崇阳县| 高唐县| 新巴尔虎右旗| 蒙山县|