python自動化辦公:玩轉word之樣式秘笈

2020-12-13 python大大

上節對python如何定製word的頁眉頁腳做了詳細介紹,當然,要作出一篇精彩的word文檔,樣式公布可沒,本章繼續介紹python如何玩轉word的樣式。

使用樣式

python如何玩轉word的樣式

此頁面使用前一頁中開發的概念而不作介紹。如果術語不熟悉,請參閱word的樣式參考。

訪問樣式

使用以下屬性訪問樣式:

>>> document = Document()

>>> styles = document.styles

>>> styles

<docx.styles.styles.Styles object at 0x10a7c4f50>

該對象按名稱提供對定義樣式的字典式訪問:

>>> styles['Normal']

<docx.styles.style._ParagraphStyle object at <0x10a7c4f6b>

注意

內置樣式使用其英文名稱存儲在WordprocessingML文件中,例如"標題1",即使在本地化版本的Word上工作的用戶將在UI中看到本地語言名稱,例如"Kop 1"。因為python-docx在WordprocessingML文件上運行,所以樣式查找必須使用英文名稱。此外部站點上提供的文檔允許您創建本地語言名稱和英語樣式名稱之間的映射::show =

用戶定義的樣式(也稱為自定義樣式)未進行本地化,並且使用與Word UI中顯示的名稱完全相同的名稱進行訪問。

該對象也是可迭代的。通過使用標識屬性,可以生成定義樣式的各種子集。例如,此代碼將生成已定義段落樣式的列表:

>>> fromdocx.enum.styleimportWD_STYLE_TYPE

>>> styles = document.styles

>>> paragraph_styles = [

... s for s in styles if s.type == WD_STYLE_TYPE.PARAGRAPH

... ]

>>> forstyle in paragraph_styles:

... print(style.name)

...

Normal

Body Text

List Bullet

應用樣式

應用樣式

word的paragraph對象,每個有style屬性。將樣式對象分配給此屬性將應用該樣式:

>>> document = Document()

>>> paragraph = document.add_paragraph()

>>> paragraph.style

<docx.styles.style._ParagraphStyle object at <0x11a7c4c50>

>>> paragraph.style.name

'Normal'

>>> paragraph.style = document.styles['Heading 1']

>>> paragraph.style.name

'Heading 1'

樣式名稱也可以直接分配,在這種情況下python-docx將為您執行查找:

>>> paragraph.style = 'List Bullet'

>>> paragraph.style

<docx.styles.style._ParagraphStyle object at <0x10a7c4f84>

>>> paragraph.style.name

'List Bullet'

也可以使用樣式對象或其名稱在創建時應用樣式:

>>> paragraph = document.add_paragraph(style='Body Text')

>>> paragraph.style.name

'Body Text'

>>> body_text_style = document.styles['Body Text']

>>> paragraph = document.add_paragraph(style=body_text_style)

>>> paragraph.style.name

'Body Text'

添加或刪除樣式

通過指定唯一名稱和樣式類型,可以向文檔添加新樣式:

>>> fromdocx.enum.styleimportWD_STYLE_TYPE

>>> styles = document.styles

>>> style = styles.add_style('Citation', WD_STYLE_TYPE.PARAGRAPH)

>>> style.name

'Citation'

>>> style.type

PARAGRAPH (1)

使用該base_style屬性指定新樣式應從以下格式繼承格式設置的樣式:

>>> style.base_style

None

>>> style.base_style = styles['Normal']

>>> style.base_style

<docx.styles.style._ParagraphStyle object at 0x10a7a9550>

>>> style.base_style.name

'Normal'

只需調用其方法即可從文檔中刪除樣式 :

>>> styles = document.styles

>>> len(styles)

10

>>> styles['Citation'].delete()

>>> len(styles)

9

注意

Style.delete()方法從文檔中刪除樣式的定義。它不會影響應用該樣式的文檔中的內容。具有未在文檔中定義的樣式的內容使用該內容對象的默認樣式來呈現,例如在段落的情況下為"正常"。

定義字符格式

字符,段落和表格樣式都可以指定要應用於具有該樣式的內容的字符格式。可以在樣式中指定可以直接應用於文本的所有字符格式。示例包括字體字體和大小,粗體,斜體和下劃線。

這三種樣式類型中的每一種都具有 提供對象訪問的屬性。樣式的對象提供了獲取和設置該樣式的字符格式的屬性。

這裡提供了幾個例子。有關完整的可用屬性集,請參閱API文檔。

可以像這樣訪問樣式的字體:

>>> fromdocximportDocument

>>> document = Document()

>>> style = document.styles['Normal']

>>> font = style.font

字體和大小設置如下:

>>> fromdocx.sharedimportPt

>>> font.name = 'Calibri'

>>> font.size = Pt(12)

許多字體屬性是三值,這意味著他們可以採取的價值觀 TrueFalseNoneTrue表示該物業處於"開啟"狀態,表示該物業處於False"關閉"狀態。從概念上講,該None值意味著"繼承"。由於樣式存在於繼承層次結構中,因此能夠在層次結構中的正確位置指定屬性非常重要,通常儘可能遠離層次結構。例如,如果所有標題都應該是Arial字體,那麼在標題1 樣式上設置該屬性並使標題2從標題1繼承更有意義。

大膽和斜體都是三態屬性,如全帽,刪除線,上標等等。有關完整列表,請參閱API文檔:

>>> font.bold, font.italic

(None, None)

>>> font.italic = True

>>> font.italic

True

>>> font.italic = False

>>> font.italic

False

>>> font.italic = None

>>> font.italic

None

下劃線是一種特殊情況。它是三態屬性和枚舉值屬性的混合體。True意味著單一下劃線,是迄今為止最常見的。False意味著沒有下劃線,但None如果不需要下劃線,則更經常是正確的選擇,因為很少從基礎樣式繼承下劃線。其他形式的下劃線(如double或dashed)是使用枚舉的成員指定的:

>>> font.underline

None

>>> font.underline = True

>>> # or perhaps

>>> font.underline = WD_UNDERLINE.DOT_DASH

定義段落格式

段落樣式和表格樣式都允許指定段落格式。這些樣式通過其屬性提供對對象的訪問。

段落格式包括布局行為,例如對齊,縮進,前後空格,之前的分頁控制。有關可用屬性的完整列表,請參閱該對象的API文檔頁面。

下面是一個如何創建一個段落樣式的示例,該段落樣式具有1/4英寸的懸掛縮進,上方12個點的間距:

>>> fromdocx.enum.styleimportWD_STYLE_TYPE

>>> fromdocx.sharedimportInches, Pt

>>> document = Document()

>>> style = document.styles.add_style('Indent', WD_STYLE_TYPE.PARAGRAPH)

>>> paragraph_format = style.paragraph_format

>>> paragraph_format.left_indent = Inches(0.25)

>>> paragraph_format.first_line_indent = Inches(-0.25)

>>> paragraph_format.space_before = Pt(12)

>>> paragraph_format.widow_control = True

使用段落特定的樣式屬性

段落樣式具有一個 屬性,該屬性指定要應用於在該樣式的段落之後插入的新段落的樣式。當樣式通常只在序列中出現一次(例如標題)時,這非常有用。在這種情況下,完成標題後,段落樣式可以自動設置回主體樣式。

在最常見的情況(正文段落)中,後續段落應該與當前段落具有相同的樣式。如果未指定下一個段落樣式,則默認情況下通過應用相同樣式來處理此情況。

以下是如何將標題1樣式的下一個段落樣式更改為正文文本的示例 :

>>> fromdocximportDocument

>>> document = Document()

>>> styles = document.styles

>>> styles['Heading 1'].next_paragraph_style = styles['Body Text']

可以通過分配None或樣式本身來恢復默認行為:

>>> heading_1_style = styles['Heading 1']

>>> heading_1_style.next_paragraph_style.name

'Body Text'

>>> heading_1_style.next_paragraph_style = heading_1_style

>>> heading_1_style.next_paragraph_style.name

'Heading 1'

>>> heading_1_style.next_paragraph_style = None

>>> heading_1_style.next_paragraph_style.name

'Heading 1'

控制樣式在Word UI中的顯示方式

樣式的屬性分為兩類,行為屬性 和格式屬性。其行為屬性控制樣式在Word UI中出現的時間和位置。其格式設置屬性確定應用樣式的內容的格式,例如字體的大小及其段落縮進。

一種風格有五種行為屬性:

·

·

·

·

·

有關這些行為屬性如何交互的說明,請參閱" 的" 部分,以確定樣式在Word UI中的顯示時間和位置。

priority屬性採用整數值。其他四種樣式行為屬性是三態,這意味著它們可以取值True(on),False(off)或None(inherit)。

在樣式庫中顯示樣式

以下代碼將使"正文文本"段落樣式首先顯示在樣式庫中:

>>> fromdocximportDocument

>>> document = Document()

>>> style = document.styles['Body Text']

>>> style.hidden = False

>>> style.quick_style = True

>>> style.priorty = 1

從樣式庫中刪除樣式

此代碼將從樣式庫中刪除"正常"段落樣式,但允許它保留在推薦列表中:

>>> style = document.styles['Normal']

>>> style.hidden = False

>>> style.quick_style = False

使用潛在樣式

有關如何定義尚未在.docx文件的styles.xml部分中定義的內置樣式的行為屬性的說明, 請參閱的和部分 。

訪問文檔中的潛在樣式

可以從styles對象訪問文檔中的潛在樣式:

>>> document = Document()

>>> latent_styles = document.styles.latent_styles

一個對象支持len(),迭代和樣式名字典式的訪問:

>>> len(latent_styles)

161

>>> latent_style_names = [ls.name forls in latent_styles]

>>> latent_style_names

['Normal', 'Heading 1', 'Heading 2', ... 'TOC Heading']

>>> latent_quote = latent_styles['Quote']

>>> latent_quote

<docx.styles.latent.LatentStyle object at 0x10a7c4f50>

>>> latent_quote.priority

29

更改潛在樣式默認值

該對象還提供對當前文檔中內置樣式的默認行為屬性的訪問。這些默認值為 定義的任何未定義屬性以及沒有明確潛在樣式定義的內置樣式的所有行為屬性提供值。有關完整可用屬性集的對象,請參閱API文檔 :

>>> latent_styles.default_to_locked

False

>>> latent_styles.default_to_locked = True

>>> latent_styles.default_to_locked

True

添加潛在的樣式定義

可以使用方法添加新的潛在樣式 。此代碼為內置樣式"List Bullet"添加了一種新的潛在樣式,將其設置為顯示在樣式庫中:

>>> latent_style = latent_styles['List Bullet']

KeyError: no latent style with name 'List Bullet'

>>> latent_style = latent_styles.add_latent_style('List Bullet')

>>> latent_style.hidden = False

>>> latent_style.priority = 2

>>> latent_style.quick_style = True

刪除潛在的樣式定義

可以通過調用其delete()方法刪除潛在樣式定義 :

>>> latent_styles['Light Grid']

<docx.styles.latent.LatentStyle object at 0x10a7c4f50>

>>> latent_styles['Light Grid'].delete()

>>> latent_styles['Light Grid']

KeyError: no latent style with name 'Light Grid'

有關樣式的介紹,就暫時到這裡,老鐵們有什麼意見和需求請儘管提,覺得不錯的點個大讚。

相關焦點

  • Python自動化辦公(內容)
    python自動化辦公(python操作Excel、Word、PDF、PPT)python使用openpyxl操作excel;python使用PyPDF2和pdfplumber操作pdf;python使用python-docx操作word;python使用python-pptx操作PPT;python如何自動收發郵件;python製作電話號碼歸屬地查詢工具;一:python
  • 聊聊python 辦公自動化之 Word(中)
    作者:星安果 來源:AirPython(公眾號)上一篇文章,對 Word 寫入數據的一些常見操作進行了總結,詳情請看聊聊python 辦公自動化之 Word(上)。相比寫入數據,讀取數據同樣很實用!本篇文章,將談談如何全面讀取一個 Word 文檔中的數據,並會指出一些要注意的點。
  • 【Python基礎】python使用python-docx操作word
    ③ 添加一個分頁from docx import Documentdoc = Document(r"G:\6Tipdm\7python辦公自動化\concat_word\test1.docx")doc.add_page_break()doc.save(r"G:\6Tipdm\7python辦公自動化\concat_word\test1.docx
  • 從PPT到Word,用Python輕鬆實現辦公自動化
    來源  | 早起Python(ID:zaoqi-python)在之前的自動化系列文章中,我們分別講過如何使用 Python 將 Word 中表格信息批量提取至
  • python自動化辦公手冊之python操作PPT
    前言1)python自動化文檔手冊python自動化文章一直深受廣大python愛好者的青睞。基於此,我花了整整一周時間真理出來的python自動化文檔手冊,涉及到五個章節(如下圖所示),① python使用openpyxl操作excel;② python使用PyPDF2和pdfplumber操作pdf;③ python使用python-docx操作word;④ python使用python-pptx操作PPT;⑤ python如何自動收發郵件;⑥ python製作電話號碼歸屬地查詢工具。
  • Python 自動化辦公—Word 文本操作命令
    之前介紹了一個Python包 openpyxl ,用於處理 Excel ;而對於 Word 文本時同樣也有對應的 Python庫 Python-docx,在日常辦公中,如果需要處理多個 word 文本,且操作步驟都是重複單調的,我想這個庫就可以幫到你在了解 Python-docx 常用函數之前,需要知道 在 Python-docx 各命令所對應 word 各部件,下圖所示
  • Python 自動化辦公 — Word 文本操作命令
    之前介紹了一個Python包  openpyxl ,用於處理 Excel ;而對於 Word 文本時同樣也有對應的 Python庫 Python-docx,在日常辦公中,如果需要處理多個 word 文本,且操作步驟都是重複單調的,我想這個庫就可以幫到你在了解 Python-docx
  • 講一講我是如何通過Python實現辦公自動化的
    Python這兩年在我國可謂是大火,各類的補習班、輔導班就如同雨後春筍一般浮現出來,而Python這門語言也被各大機構所接受,人工智慧、爬蟲、辦公自動化等等都有Python這門語言的身影。自動化辦公無非是excel、ppt、word、郵件、文件處理、數據分析處理、爬蟲這些,今天我們主要來講講excel、ppt、word自動化的操作技巧。
  • 最全總結 | 聊聊 Python 辦公自動化之 Word(下)
    新增數字索引我們經常需要在文檔頁腳處添加頁面數字索引,可惜 python-docx 並沒有提供現有方法但是,在 stackoverflow 上找到實現的方式https://stackoverflow.com/questions/56658872/add-page-number-using-python-docx?
  • Python辦公自動化|從Excel到Word
    除了對按照格式進行處理並存入Word中指定位置之外,還有一個需求:最終輸出的word文件名還需要按照一定規則生成:文件名title = f'{order_num_title}-{supplier}-{total_num}-{info_title}-{time}-驗貨報告'print(title)通過上面的代碼,我們就成功的從Excel中提取出來數據,這樣Excel部分就結束了,接下來進行word的填表啦,由於這裡我們默認讀取的word是.docx格式的,實際上讀者的需求是.doc格式文件
  • 用Python玩轉PPT
    修改 PPT 樣式1. 段落樣式修改可以同python-docx模塊對段落樣式的導入進行類比。>.font.color :字體顏色.font.size:字體大小但有一個地方需要加以區別:在python-pptx中,使用文字樣式方法是基於段落,也就是paragraph.font.xxxx, 而在python-docx中,使用文字樣式方法是基於文字塊。
  • Python自動化辦公之Word,全網最全看這一篇就夠了
    環境安裝 使用Python操作word大部分情況都是寫操作,也有少許情況會用到讀操作,在本次教程中都會進行講解,本次課程主要用到以下4個庫,請大家提前安裝。 很多人學習python,不知道從何學起。
  • Python辦公自動化| word 表格轉excel
    之前寫過一篇 Python辦公自動化 | 批量word報告生成工具 ,有小夥伴提出了逆向需求,即:從批量word中獲取內容並寫入excel,需求背景是匯總一些材料,舉例:實習鑑定表、個人簡歷、檔案等。實際需求是這樣的,現在有如下格式的若干word文檔,需要錄入標黃信息到excel,手工錄入效率太低了,能不能用python實現呢?
  • python辦公自動化(二) | 讀取.txt、.data、.doc和.docx文檔的部分內容
    python的文件操作,是python辦公自動化的最基礎部分。
  • Python自動化用這些知識點就夠了!
    這可能是很多非IT職場人士面臨的困惑,想把python用到工作中,卻不知如何下手?python在自動化辦公領域越來越受歡迎,批量處理簡直是加班族的福音。自動化辦公無非是excel、ppt、word、郵件、文件處理、數據分析處理、爬蟲這些,這次就來理一理python自動化辦公的那些知識點。下面一一詳解。
  • python自動化PPT:如何玩轉自選圖形
    python自動化PPT:如何玩轉自選圖形上節對python自動化PPT的圖形基本概念做了詳細介紹,當然,要作出一篇精彩的PPT文檔,精彩的自選圖形必須要掌握,這節繼續來解讀這方面的知識。如何玩轉自選圖形自選圖形基礎自動形狀是規則的形狀。
  • 聊聊python 辦公自動化之 Excel(上)
    前言在我們日常工作中,經常會使用 Word、Excel、PPT、PDF 等辦公軟體。但是,經常會遇到一些重複繁瑣的事情,這時候手工操作顯得效率極其低下;通過python 實現辦公自動化很有必要。接下來的 一系列 文章,我將帶大家對 Python 辦公自動化做一個全面的總結,絕對的乾貨!
  • Python辦公自動化 | 批量word報告生成工具
    有時候我們需要按照某種規則生成一種固定模板的word報告,python能夠很好的完成這項工作。
  • python辦公自動化:PyAutoGUI入門秘笈一
    學好PyAutoGUI,讓機器幫你幹活就能實現這麼舒爽的目標有同學看了以前對python辦公自動化:讓PyAutoGUI來幫你幹活,很感興趣,開始動手實踐。但是遇到很多問題,怎麼能讓大家能更快的入門PyAutoGUI呢,特地準備了以下系列,從入門到使用技巧,對PyAutoGUI做了全方位的解讀。
  • 別再問我Python怎麼操作Word了!
    前言在之前的自動化系列文章中,我們分別講解過👉Python操作Excel利器openpyxl,也講過👉Python操作PDF的幾種方式,今天我們將通過代碼講解Python操作Word文檔docx的常用方法。