python-docx中文


目錄

 

 

 

說明

python-docx是一個用於創建和更新Microsoft Word(.docx)文件的Python庫。

 

他能做什么

 
  1. from docx import Document
  2. from docx.shared import Inches
  3. document = Document()
  4. document.add_heading('Document Title', 0)
  5. p = document.add_paragraph('A plain paragraph having some ')
  6. p.add_run('bold').bold = True
  7. p.add_run(' and some ')
  8. p.add_run('italic.').italic = True
  9. document.add_heading('Heading, level 1', level=1)
  10. document.add_paragraph('Intense quote', style='Intense Quote')
  11. document.add_paragraph(
  12. 'first item in unordered list', style='List Bullet'
  13. )
  14. document.add_paragraph(
  15. 'first item in ordered list', style='List Number'
  16. )
  17. document.add_picture('monty-truth.png', width=Inches(1.25))
  18. records = (
  19. (3, '101', 'Spam'),
  20. (7, '422', 'Eggs'),
  21. (4, '631', 'Spam, spam, eggs, and spam')
  22. )
  23. table = document.add_table(rows=1, cols=3)
  24. hdr_cells = table.rows[0].cells
  25. hdr_cells[0].text = 'Qty'
  26. hdr_cells[1].text = 'Id'
  27. hdr_cells[2].text = 'Desc'
  28. for qty, id, desc in records:
  29. row_cells = table.add_row().cells
  30. row_cells[0].text = str(qty)
  31. row_cells[1].text = id
  32. row_cells[2].text = desc
  33. document.add_page_break()
  34. document.save('demo.docx')

示例

 

用戶指南

 

安裝

注意:python-docx版本0.3.0及更高版本與先前版本API不兼容。 
python-docx 托管在PyPI上,因此安裝相對簡單,只取決於您安裝的應用程序。 
1. 如果在pip工具可用的情況下你可以直接安裝python-docx,如果還沒有安裝 可以自行搜索怎樣安裝。其在代碼如下: 
pip install python-docx 
2. 當然你也可以用easy_install來安裝python-docx,但是方法不如上面一 種好。其安裝代碼如下: 
easy_install python-docx 
3. 然而,如果你的pip和你的easy_install都不可用的時候,那么此時你可以手動的通過PyPI下載,然后解壓包、運行setup.py. 
tar xvzf python-docx-{version}.tar.gz 
cd python-docx-{version} 
python setup.py install 

 

環境支持:

  • python2.6、2.7,or 3.4
  • lxml >= 2.3.2
 

快速開始

使用python-docx是非常容易的,讓我們一點一點學習這些!

 

打開一個文檔

首先,如果你需要操作一篇文檔,下面是最容易的方法:

 
  1. from docx import Document
  2. document = Document()

這是基於默認模板打開一個空白文檔,這幾乎是你從word打開一個新文檔的內置默認值。你也可以打開並基於一個現有的文檔來使用python-docx,但是我們現在想保持這么簡單的做法。

 

添加一個段落

段落是word結構的基礎,他們用於正文,也標題和列表項目。這是添加一個段落的示例方法:

 
  1. paragraph = document.add_paragraph('Lorem ipsum dolor sit amet.')

這個方法返回對一個段落的引用,在文章的結尾加上一個新段落。這種情況下,這個新段落引用將會被分配給paragraph,但是,除非我需要這個引用,否則我會忽視掉它,在你的代碼中通常不會要做任何事情在你添加了一個新段落之后。因此,保持對它的引用沒有多大意義。 
它還可以當作一個“光標”,用來插入一個新段落。

 
  1. prior_paragraph = paragraph.insert_paragraph_before('Lorem ipsum')

這就使得我們可以在文檔中間插入文檔,這對於我們修改一篇而不是從零開始創建一篇文檔來說重要的多。

 

添加一個標題

在一些除了一些很短的文章中,正文一般分為幾部分,每部分都是一個從一個標題開始,下面是如何添加一個標題的示例:

 
  1. document.add_heading('The REAL meaning of the universe')

在默認情況,此代碼是添加一個最高級別的標題,在word中通常顯示為“標題1”,當你想要添加一個子節標題時,你可以將你需要的級別指定為一個0-9之間的整數。就像這樣:

 
  1. document.add_heading('The role of dolphins', level=2)

如果你指定的級別為0,則會添加一個標題段落,這可以很方便的開始一個沒有單獨標題的相對較短的文章。

 

添加一個分頁符

每隔一段時間你就想要接下來的內容放到下一頁面上,即使這個頁面還沒有滿,而一個強制分頁則可以完成這些操作:

 
  1. document.add_page_break()

你如果發現你用的非常頻繁,那么它可能就是一個你可以很好理解段落格式的一個信號。您可以設置的一個段落樣式屬性是在每個具有該樣式的段落之前立即斷開一個頁面。因此,你可以合適的設置一個標題級別來確保總能開始一個新頁面。更多關於樣式的信息你可以在后面看到,事實證明,在Word中利用好他們是非常重要的。

 

添加一個表

一個人經常會遇到一些內容,它們與表格類似,整齊的排列在一行或者一列中。Word在這個方面做的很好,下面是如何添加一個表格的示例:

 
  1. table = document.add_table(rows=2, cols=2)

表格有幾種方法和屬性,您可以通過他們來填充表格。通過訪問一個單元格 
來學習是一個很好的開始,作為基礎,你可以通過列或者行的一些信息來訪問他們:

 
  1. cell = table.cell(0, 1)

這是我們剛剛創建的的單元格中最右邊的單元格,注意他的行列起始值是0,就像通過List訪問。 
如果你選中了一個單元格,你可以把一些文字放入里面:

 
  1. cell.text = 'parrot, possibly dead'

通常,一次訪問一個表會更加容易,例如當從一個數據源填充一個可變長度的表格時,在每一個含有.cells屬性的表格中我們均可以通過.rows屬性來訪問每一行。這個.cells可同時支持Row和Colum的索引訪問,就像一個List:

 
  1. row = table.rows[1]
  2. row.cells[0].text = 'Foo bar to you.'
  3. row.cells[1].text = 'And a hearty foo bar to you too sir!

在表格中.rows和.columns集合是可迭代的,你可以直接在for循環里面使用它們,與此相同的,.cells上行或列成序列:

 
  1. for row in table.rows:
  2. for cell in row.cells:
  3. print(cell.text)

如果你想要得到行或列的的數目,那么你可以使用len():

 
  1. row_count = len(table.rows)
  2. col_count = len(table.columns)

你也可以以遞增方式向表中添加行:

 
  1. row = table.add_row()

這對於我們上面提到的可變長度表來說是十分方便的:

 
  1. # 獲取表格數據
  2. items = (
  3. (7, '1024', 'Plush kittens'),
  4. (3, '2042', 'Furbees'),
  5. (1, '1288', 'French Poodle Collars, Deluxe'),
  6. )
  7. # 添加表格
  8. table = document.add_table(1, 3)
  9. # 添加表頭
  10. heading_cells = table.rows[0].cells
  11. heading_cells[0].text = 'Qty'
  12. heading_cells[1].text = 'SKU'
  13. heading_cells[2].text = 'Description'
  14. # 給每項添加行數據
  15. for item in items:
  16. cells = table.add_row().cells
  17. cells[0].text = str(item.qty)
  18. cells[1].text = item.sku
  19. cells[2].text = item.desc

同樣對添加列來說也是一樣的。 
Word具有一組預先已經格式化好的表格樣式,你可以從它的表格樣式庫中選擇,你可以將其中一個應用於表格,如下所示:

 
  1. table.style = 'LightShading-Accent1'

從表樣式名稱中刪除所有空格可以形成樣式名稱,你可以通過將鼠標懸停在Word的表樣式庫中的縮略圖上,可以找到表樣式名稱。

 

添加圖片

在Word中,你可以通過【插入】--> 【圖像】--> 【來自文件】菜單來添加圖片,而在這里,你則可以這么添加:

 
  1. document.add_picture('image-filename.png')

此例子使用了從本地加載圖片路徑,你也可以使用一個類文件對象,本質上就像打開任何一個文件對象。如果你從網絡或者數據庫而不想從本地獲取數據,這會很方便。

照片大小 
默認情況下,添加的的圖片大小等於您本地圖片大小,但這通常會比您想象的更大。本地圖片大小的計算方法是像素/dpi(每英寸像素點數),因此,一個300dpi的300x300像素的圖片通常大小是1英寸,但是問題是現在大多數圖片的默認72dpi,這實際上使得同樣的圖片在這樣的情況下會在一半的頁面上一邊顯示大小為4.167英寸。 
在這里,要獲得你想要的圖像大小,你可以指定其高度和寬度,如inches或cm:

 
  1. from docx.shared import Inches
  2. document.add_picture('image-filename.png', width=Inches(1.0))

你可以自由的指定高度和寬度,但是你通常情況下不想要這樣。如果你指想要其中要給參數,python-docx通常可以幫你計算出另外一個參數,這樣可以保持你照片的長寬比,使他看上去不是被拉伸的。 
你可以使用英寸或者厘米這兩個方便的單位來指定你的測量單位。在python-docx內部,我們默認使用英國公制單位,914400英寸(這里沒查到,只查到914400um=1碼),因此你如果忘記了而只是指定了寬度為2的話你就得到一個很小的圖像。此時你需要導入docx.shared子包,你可以就像一個整數一樣的在算術中使用它們,當然,他們事實上也是,因此,像一個表達式width = Inches(3) /thing_count就被利用的很好。

 

應用段落格式

如果你不知道Word的段落格式,你應該檢查下它。基本上,它允許你能一次性應用一整套樣式,如果你了解CSS的話,它和CSS非常類似。 
你可以在創建段落時應用段落樣式:

 
  1. document.add_paragraph('Lorem ipsum dolor sit amet.', style='ListBullet')

這種特殊的樣式會使得段落以一個符號的樣式出現,一個非常方便的東西。之后你依然還可以應用樣式,這下面的兩行相當於上面的一行:

 
  1. paragraph = document.add_paragraph('Lorem ipsum dolor sit amet.')
  2. paragraph.style = 'List Bullet'

這個樣式被指定用他的樣式名,如上所示的List Bullet。通常,樣式名出現在Word的用戶界面中,但是,請注意,如果您使用的是本地化版本的Word,則樣式ID可能來自英語樣式名稱,並且可能不會完全對應於其在Word UI中的樣式名稱。

 

應用粗體以及斜體

為了能夠理解黑體和斜體是怎么回事,你需要理解一點段落內部的事情,簡短來說就是這樣: 
1. 一個段落包含所有塊級格式,例如縮進、行高、Tab等等。 
2. 字符級別的格式,例如黑體和斜體,都是被應用於run級別的。所有段落里面的內容都必須在一個run里面但是也不僅僅一個更新。因此一個含有粗體的段落可能會需要三個run,一個是普通的,一個是包括了粗體的,以及后面另外一個普通的。 
當你利用.add_paragraph()方法向一個段落中添加一段文字的時候,它被放入一個單獨的run中,你可以使用.add_run()在段落中添加更多的內容:

 
  1. paragraph = document.add_paragraph('Lorem ipsum ')
  2. paragraph.add_run('dolor sit amet.')

這樣產生一個像一個單獨字符串產生的段落。除非你看xml,否則你不會看不來這些內容是分開的。注意第一個字符串末尾的尾隨空格,你需要明確說明空格在開頭和結尾之間出現的位置,他們不會自動的在runs之間插入。你總能遇到你幾次這個問題。 
Run這個對象有.bold.italic兩個屬性值供你去設置:

 
  1. paragraph = document.add_paragraph('Lorem ipsum ')
  2. run = paragraph.add_run('dolor')
  3. run.bold = True
  4. paragraph.add_run(' sit amet.')

上述例子的結果像這樣: ‘Lorem ipsum dolor sit amet.’ 
如果你不需要其它的設置你也可以直接對.add_run().bolditalic值結果設置為True

 
  1. paragraph.add_run('dolor').bold = True
  2. # 它同時也等於:
  3. run = paragraph.add_run('dolor')
  4. run.bold = True
  5. # 你不需要'run'之后再次設置引用

利用.add_paragraph構建內容不是必須的,如果你是從runs中構建內容的話這會使你的代碼變得更加簡單:

 
  1. paragraph = document.add_paragraph()
  2. paragraph.add_run('Lorem ipsum ')
  3. paragraph.add_run('dolor').bold = True
  4. paragraph.add_run(' sit amet.')
 

應用字符格式

除了指定一組段落級別的段落樣式外,Word還可以指定一組run級別的字符樣式,通常你可以認為這些字符樣式包括字符、字體、字號、顏色、粗體、斜體等等。 
和段落樣式一樣,字符樣式必須定義在你已經用Document()打開的文檔中。(見理解樣式)。 
字符樣式可以在添加一個run中定義:

 
  1. paragraph = document.add_paragraph('Normal text, ')
  2. paragraph.add_run('text with emphasis.', 'Emphasis')

你也可以在字符已經創建好了之后再去應用樣式,這段代碼與撒謊上面的代碼效果相同:

 
  1. paragraph = document.add_paragraph('Normal text, ')
  2. run = paragraph.add_run('text with emphasis.')
  3. run.style = 'Emphasis'

如同段落樣式一樣,這些樣式名稱可以再Word界面內看見。

 

處理文件

python-docx允許你創建一個新文件或者在一個已經存在的文件上做些修改。事實上,它只允許你從一個已經存在的文檔上進行修改。如果你需要從一篇沒有任何內容的文檔開始,你會感覺從頭開始一篇文檔一樣。 
這個特點是強大的。決定許多文檔看上去怎么樣子的部分是你刪除所有內容后留下的。這些樣式如頁眉、也叫是與你的主要內容無關的,因此,你可以從文檔的開頭就放置這些個性化的內容而之后他們會在文檔中出現。 
讓我們逐步的創建一個文檔示例,並開始做兩件事:打開並保存它。

 

打開一個文當

最簡單的入門方法是打開一個新文檔,而不是指定一個文檔打開:

 
  1. from docx import Document
  2. document = Document()
  3. document.save('test.docx')

這個示例是基於內置的默認模板創建一個文檔並把它保存成一個沒有改變的文件名:test.docx。這個默認模板實質上是一個沒有任何內容的新文檔,保存在你已經安裝好的python-docx包里。選擇Word Doucument模板與你在Word中選擇【文件】-【新模板】菜單選項選擇的Word Document(Word文件選項里面好像沒有這個選項( ̄▽ ̄)",感覺應該是文件-->新建里面選擇的模板)大致相同。

 

“真正”打開一個文檔

如果說你想要更多的改變最終文檔,或者說更改已經存在的一個文檔,這個時候你則需要打開一個存在着文件名的一個文檔:

 
  1. document = Document('存在的文檔.docx')
  2. document.save('重命名的文檔.docx')

注意事項: 
- 你可以用這個方法打開任何Word 2007及以后的版本(Word 2003及更早期的.doc文件我們無法使用)。雖然也許你不能很好的編輯內容,但是你可以很好的加載和保存。它現在還在完善中,因此你現在還不能進行添加或者改變標題或者腳注之類的東西,但是Python-docx會很“客氣的”把這些內容單獨放在一邊並足夠聰明的保存它們不用實際理解他們到底是什么。 
- 如果你在打開文件和保存文件的時候使用了同一個文件名,python-docx將會按照你的意思覆蓋原始文件而不用其它提醒。你要確定那就是你想要的。

 

打開一個“類文件”文檔

python-docx可以打開一個文檔從要一個“類文件”對象中,當然也可以同樣保存一個“類文件”對象。這當你想要從網絡或者數據庫中獲取源或文檔而不想(不允許)與本地文件系統交互的時候是非常方便的。實際上,這意味着你可以通過打開文件或者StringIO/BytesIO流中對象來打開或者保存一個文檔:

 
  1. f = open('foobar.docx', 'rb')
  2. document = Document(f)
  3. f.close()
  4. # or
  5. with open('foobar.docx', 'rb') as f:
  6. source_stream = StringIO(f.read())
  7. document = Document(source_stream)
  8. source_stream.close()
  9. ...
  10. target_stream = StringIO()
  11. document.save(target_stream)

不是所有的操作系統都要求這個'rb'打開文件模式的參數,在某些操作系統里面'r'就足夠了,但是在Windows或者要給Linux一些系統中是需要'b'(選擇二進制模式)這個參數去允許打開zip文件格式的文件的。 
好了,你已經打開了一個文檔並且確信它可以稍后保存在某一個地方。下一步則是獲取一些內容.....

 

處理文本

為更有效的處理文本,理解一些塊級元素比如段落和內聯級別比如run是非常重要的。

 

塊級和內聯文本對象

段落是Word中的主要塊級對象。 
塊級項中的文本主要包含在它左右邊沿之間。當文本的內容超過了它的右邊界時,這些超出的文本則就會添加到下一行。對於段落而言,邊界通常是頁邊距,但是如果段落在列中展開的話,邊界也可以是列邊界,如果在在表格里面的單元格中發生的話,它也是單元格的邊界 
表格通常是一個塊級對象。 
一個內聯對象通常是一個塊級項內容發生的一部分,一個例子便是在Word中的一個粗體的單詞和一個全部為大寫的句子。而最主要的內聯對象便是運行。所有塊容器中的內容里面都在內聯對象里面,一個段落包含一個或者多個run,他們每個都是段落文本的一部分。 
塊級項的屬性指定其在頁面上的位置,例如縮進和段前段后的空格。內聯項通常指定顯示內容的字體、字號、粗體、斜體等。

 

段落屬性

一個段落有許多屬性,他們通常指定在容器中的位置(通常在頁面中)以及將行分成不同行的方法。 
通常情況下,應該將段落格式的屬性集成到一個組中,然后應用到段落中,而不是每次都重復的將他們屬性添加到段落中。這類似於CSS與HTML如何一起工作。這里所有的段落屬性都可使用樣式設置,也可直接應用於段落。 
段落的格式屬性是用通過ParagraphFormat對象訪問的,該對象使用段落的Paragraph_Format屬性。

 
水平對齊

也稱為對齊,通過使用枚舉WD_PARAGRAPH_ALIGNMENT可以將段落的水平對齊設置為左、中、右或兩端對齊(在左和右對齊):

 
  1. >>> from docx.enum.text import WD_ALIGN_PARAGRAPH
  2. >>> document = Document()
  3. >>> paragraph = document.add_paragraph()
  4. >>> paragraph_format = paragraph.paragraph_format
  5. >>> paragraph_format.alignment
  6. None # indicating alignment is inherited from the style hierarchy
  7. >>> paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
  8. >>> paragraph_format.alignment
  9. CENTER (1)
 
縮進

縮進是段落於容器邊緣之間的水平空間,通常我們叫做頁邊距。段落我們可以在左邊和右邊分別縮進,段落第一行也可以擁有和其他行不一樣的縮進量。第一行相較於其他行縮進來說成為首行縮進,而其他行相較於首行的縮進我們則稱之為懸掛縮進。 
縮進使用的長度值(例如英寸、磅、厘米)指定的。負值有效但這將導致段落重疊。空值則表示縮進是直接繼承的層次結構值。將None賦值給縮進屬性則會移除直接應用的縮進屬性設置並且從層次結構中還原繼承。

 
  1. >>> from docx.shared import Inches
  2. >>> paragraph = document.add_paragraph()
  3. >>> paragraph_format = paragraph.paragraph_format
  4. >>> paragraph_format.left_indent
  5. None # indicating indentation is inherited from the style hierarchy
  6. >>> paragraph_format.left_indent = Inches(0.5)
  7. >>> paragraph_format.left_indent
  8. 457200
  9. >>> paragraph_format.left_indent.inches
  10. 0.5

右邊的縮進也類似:

 
  1. >>> from docx.shared import Pt
  2. >>> paragraph_format.right_indent
  3. None
  4. >>> paragraph_format.right_indent = Pt(24)
  5. >>> paragraph_format.right_indent
  6. 304800
  7. >>> paragraph_format.right_indent.pt
  8. 24.0

首行行縮進是使用first_line_indent屬性指定的,並且是相對於左縮進行來說的。負值表示懸掛縮進:

 
  1. >>> paragraph_format.first_line_indent
  2. None
  3. >>> paragraph_format.first_line_indent = Inches(-0.25)
  4. >>> paragraph_format.first_line_indent
  5. -228600
  6. >>> paragraph_format.first_line_indent.inches
  7. -0.25
 
制表位

制表位停止了制表符的呈現,特別的是,他可以指定制表符后面文本開始的位置,以及將如何對齊到該位置,以及一個可選的leader字符,它將填充選項卡所跨越的水平空間。可以通過tab填滿的可選主要字符。 
段落或樣式的制表符包含在一個TabStops對象中,該對象使用ParagrapFormat上的tab_stops屬性訪問:

 
  1. >>> tab_stops = paragraph_format.tab_stops
  2. >>> tab_stops
  3. <docx.text.tabstops.TabStops object at 0x106b802d8>

使用add_tab-stop()方法添加一個新的制表位:

 
  1. >>> tab_stop = tab_stops.add_tab_stop(Inches(1.5))
  2. >>> tab_stop.position
  3. 1371600
  4. >>> tab_stop.position.inches
  5. 1.5

默認是左對齊,但是可以通過提供WD_TAB_ALIGNMENT枚舉成員來指定。 前導符默認是空格,但我們可以通過提供WD_TAB_LEADER來指定:

 
  1. >>> from docx.enum.text import WD_TAB_ALIGNMENT, WD_TAB_LEADER
  2. >>> tab_stop = tab_stops.add_tab_stop(Inches(1.5), WD_TAB_ALIGNMENT.RIGHT, WD_TAB_LEADER.DOTS)
  3. >>> print(tab_stop.alignment)
  4. RIGHT (2)
  5. >>> print(tab_stop.leader)
  6. DOTS (1)

使用TabStops上的序列語義訪問現有的制表符:

 
  1. >>> tab_stops[0]
  2. <docx.text.tabstops.TabStop object at 0x1105427e8>

更多信息請見TabStopsTabStop API 文檔

 
段落間距

space_beforespace_after屬性控制着段間距,控制着段前段后的距離。 
段間距在頁面布局內被折疊,這意味着兩段之間的間距是第一段的空格后和第二段空格前的最大值。段間距被指定為一個長度值,通常使用Pt:

 
  1. >>> paragraph_format.space_before, paragraph_format.space_after
  2. (None, None) # inherited by default
  3. >>> paragraph_format.space_before = Pt(18)
  4. >>> paragraph_format.space_before.pt
  5. 18.0
  6. >>> paragraph_format.space_after = Pt(12)
  7. >>> paragraph_format.space_after.pt
  8. 12.0
 
行距

行間距是指段落中行基線之間的距離。行間距可以指定為絕對距離,也可以指定相對於行高度(基本上是所用字體的點大小)。一個典型的絕對衡量標准是18磅。一個典型的相對測量值將是兩個空格(2.0倍行距)。默認的行距是一個空格(1.0倍行距). 
行距是由line_spacingline_spacing_rule屬性的相互作用控制。line_spacing 是一個Length,是(小數)float,或者是零。Length表示絕對距離。浮點數表示多個float。None表示繼承了行距。line_space_Rulewd_line_space枚舉或者None的成員:

 
  1. >>> from docx.shared import Length
  2. >>> paragraph_format.line_spacing
  3. None
  4. >>> paragraph_format.line_spacing_rule
  5. None
  6. >>> paragraph_format.line_spacing = Pt(18)
  7. >>> isinstance(paragraph_format.line_spacing, Length)
  8. True
  9. >>> paragraph_format.line_spacing.pt
  10. 18.0
  11. >>> paragraph_format.line_spacing_rule
  12. EXACTLY (4)
  13. >>> paragraph_format.line_spacing = 1.75
  14. >>> paragraph_format.line_spacing
  15. 1.75
  16. >>> paragraph_format.line_spacing_rule
  17. MULTIPLE (5)
 
分頁

四個段落屬性kepp_together,keep_with_nextpage_break_beforewidow_control控制着段落在頁面附近的顯示。kepp_together會導致整個斷過出現在同一個頁面上,如果不這么做的就會在段落之前存在分頁符。 
keep_with_next會使后面的段落與當前段落出現在同一張頁面內。舉例來說,這將會被用在使節標題和小節內的段落保持在同一個頁面。 
page_break_before使得一個段落可以放置在一個新頁面的頂部。這將會使得章節標題總是會從新頁面開頭出現。 
widow_control會斷開一個頁面,以避免將段落的第一行或最后一行放在與段落其余部分分開的頁面上。 
所有的這四種屬性都是有三種狀態的,即他們可以取值TrueFalse或者None.None表示這些屬性值將會繼承層次結構,True表示打開,Flase表示關閉:

 
  1. >>> paragraph_format.keep_together
  2. None # all four inherit by default
  3. >>> paragraph_format.keep_with_next = True
  4. >>> paragraph_format.keep_with_next
  5. True
  6. >>> paragraph_format.page_break_before = False
  7. >>> paragraph_format.page_break_before
  8. False
 

應用字符格式

字符格式通常被應用在Run級,舉例來說它通常包含字號、字體、粗體、斜體、下划線。 
Run對象的只讀Font屬性提供對font對象的訪問。run的Font對象提供了獲取和設置該運行的字符格式的屬性。 
這里提供了幾個例子,有關可用屬性的完整集合,請參閱Font API文檔。 
run中的font可通過如下方式訪問:

 
  1. >>> from docx import Document
  2. >>> document = Document()
  3. >>> run = document.add_paragraph().add_run()
  4. >>> font = run.font

字體和字號通常像這樣設置:

 
  1. >>> from docx.shared import Pt
  2. >>> font.name = 'Calibri'
  3. >>> font.size = Pt(12)

許多字體屬性是三態的,即也可以取值True,False以及None.True意味着屬性是可以用,而False則與之相反。而None從概念上講則意味着"繼承”。運行存在於繼承層次結構的樣式中,默認情況下從該層次結構繼承其字符格式。使用Font對象直接應用的任何字符格式都會覆蓋繼承的值。 
加粗和斜體是三態屬性,全大寫、刪除線、上標等等也是。有關完整列表,請參閱FontAPI文檔:

 
  1. >>> font.bold, font.italic
  2. (None, None)
  3. >>> font.italic = True
  4. >>> font.italic
  5. True
  6. >>> font.italic = False
  7. >>> font.italic
  8. False
  9. >>> font.italic = None
  10. >>> font.italic
  11. None

Underline是一個特例。它是三態屬性和枚舉值屬性的混合。True表示單下划線,這是目前最常見的。False表示不需要下划線,但通常情況下,如果s屬性值為None,則也代表不需要下划線。其他形式的下划線,如雙划線或虛線,都是由WD_UNDERLINE枚舉成員指定的:

 
  1. >>> font.underline
  2. None
  3. >>> font.underline = True
  4. >>> # or perhaps
  5. >>> font.underline = WD_UNDERLINE.DOT_DASH
 
字體顏色

每個Font對象都有一個ColorFormat對象,該對象提供對其顏色的訪問,可通過其只讀color屬性訪問。 
給字體指定一個RGB顏色:

 
  1. >>> from docx.shared import RGBColor
  2. >>> font.color.rgb = RGBColor(0x42, 0x24, 0xE9)

字體的顏色可以恢復到它的默認值(繼承),通過分配Nonergbtheme_color屬性的ColorFormat:

 
  1. >>> font.color.rgb = None

確定字體的顏色首先要確定字體的顏色類型:

 
  1. >>> font.color.type
  2. RGB (1)

顏色類型屬性的值可以是MSO_COLOR_TYPE枚舉的成員或NoneMSO_COLOR_TYPE.RGB表示它是RGB顏色MSO_COLOR_TYPE.THEME表示主題顏色.MSO_COLOR_TYPE.AUTO表示其值由應用程序自動確定,通常設置為黑色。(這個值比較罕見).None表示沒有應用顏色,顏色是從樣式層次結構繼承而來的;這是最常見的情況。 
當顏色類型是MSO_COLOR_TYPE.RGB時,rgb屬性為RGBColor值,表示RGB顏色:

 
  1. >>> font.color.rgb
  2. RGBColor(0x42, 0x24, 0xe9)

當顏色類型為MSO_COLOR_TYPE.THEME,theme_color屬性將是MSO_THEME_COLOR_INDEX的成員,表示主題顏色:

 
  1. >>> font.color.theme_color
  2. ACCENT_1 (5)
 

處理章節

Word支持section的概念,section是文檔中具有相同頁面布局設置(如頁邊距和頁面方向)的部分。例如,這就是文檔如何在縱向布局中包含一些頁面,在橫向布局中包含一些頁面的方法。 
大多數Word文檔只有默認出現的一個部分,而且大多數文檔沒有理由更改默認的頁邊距或其他頁面布局。但是,當您確實需要更改頁面布局時,您需要了解各個部分才能完成。

 

訪問sections

對文檔部分的訪問由Document對象上的sections屬性提供:

 
  1. >>> document = Document()
  2. >>> sections = document.sections
  3. >>> sections
  4. <docx.parts.document.Sections object at 0x1deadbeef>
  5. >>> len(sections)
  6. 3
  7. >>> section = sections[0]
  8. >>> section
  9. <docx.section.Section object at 0x1deadbeef>
  10. >>> for section in sections:
  11. ... print(section.start_type)
  12. ...
  13. NEW_PAGE (2)
  14. EVEN_PAGE (3)
  15. ODD_PAGE (4)

從理論上講,文檔沒有標明sections是可能的,盡管我還沒有看到這種情況在發生。如果您正在訪問不可預知的.docx文件,您可能希望使用len()檢查或try語句來避免未捕獲的IndexError異常阻止您的程序。

 

添加一個新的

sectionsadd_section()方法允許在文檔末尾添加一個新的section。調用此方法后添加的段落和表將出現在新的section中:

 
  1. >>> current_section = document.sections[-1] # last section in document
  2. >>> current_section.start_type
  3. NEW_PAGE (2)
  4. >>> new_section = document.add_section(WD_SECTION.ODD_PAGE)
  5. >>> new_section.start_type
  6. ODD_PAGE (4)
 

Section 屬性

Section對象有允許發現和指定頁面布局設置的11個屬性。

 
Section開始類型

Section.start_type描述的是section之前的隔斷類型:

 
  1. >>> section.start_type
  2. NEW_PAGE (2)
  3. >>> section.start_type = WD_SECTION.ODD_PAGE
  4. >>> section.start_type
  5. ODD_PAGE (4)

start_type值是枚舉變量WD_SECTION_START的成員

 
頁面尺寸和方向

Section中的三個屬性描述了頁面的尺寸和方向。這些可以一起使用,例如,將Section的方向由縱向到橫向:

 
  1. >>> section.orientation, section.page_width, section.page_height
  2. (PORTRAIT (0), 7772400, 10058400) # (Inches(8.5), Inches(11))
  3. >>> new_width, new_height = section.page_height, section.page_width
  4. >>> section.orientation = WD_ORIENT.LANDSCAPE
  5. >>> section.page_width = new_width
  6. >>> section.page_height = new_height
  7. >>> section.orientation, section.page_width, section.page_height
  8. (LANDSCAPE (1), 10058400, 7772400)
 
頁邊距

Section的7個屬性一起指定了決定文本出現在頁面上的不同頁邊距:

 
  1. >>> from docx.shared import Inches
  2. >>> section.left_margin, section.right_margin
  3. (1143000, 1143000) # (Inches(1.25), Inches(1.25))
  4. >>> section.top_margin, section.bottom_margin
  5. (914400, 914400) # (Inches(1), Inches(1))
  6. >>> section.gutter
  7. 0
  8. >>> section.header_distance, section.footer_distance
  9. (457200, 457200) # (Inches(0.5), Inches(0.5))
  10. >>> section.left_margin = Inches(1.5)
  11. >>> section.right_margin = Inches(1)
  12. >>> section.left_margin, section.right_margin
  13. (1371600, 914400)
 

API基礎

python-docx的API旨在使簡單的事情變得簡單,同時允許通過適度和增強的理解來實現更復雜的結果。 
僅使用一個對象docx.api.Document就可以創建基本文檔是可能的,即打開文件時返回文檔對象。docx.api.Document上的方法,文檔允許將塊級對象添加到文檔末尾。塊級對象包括段落、內聯圖片和表。標題、項目符號和編號列表只是應用了特定樣式的段落。 
通過這種方式,我們可以從上到下“寫”出一篇文章,幾乎像一個人如果他們知道他們想要什么會說這個的基本用例,在內容總是添加到文檔的最后,預計可能會占80%的實際使用情況下,這是一個優先的前提下盡可能地讓它盡可能簡單的力量整個API。

 
內聯對象

docx.api.Document上的每個塊級方法。例如add_paragraph(),返回創建的塊級對象,通常不需要引用;但是,當必須單獨創建內聯對象時,您需要使用塊引用來完成。 
...還有更多的示例...

 

了解樣式

Grasshopper: 
“師傅,為什么我的段落不符合我指定的風格?” 
師傅: 
“那是因為你還需要把這篇文章閱讀下去,Grasshopper”

 

在Wrod中什么是樣式?

當文檔的的元素格式一致的時候,處理文檔就會變得很容易。為了達到這種效果,文檔專業設計者開發了樣式表,樣式表定義了文檔元素類型以及指定了每種元素的格式。例如,段落主題被設置為:字號9pt,字體:Times Roman,行間距為11pt,左端對齊,加粗。當這些指定的內容被添加到每個文檔的元素上面時,一個整體美觀的外觀是可以實現的。 
Word中的樣式是一組可以一次性應用於文檔的規范。Word有段落樣式、字符樣式、表格樣式和數字定義。他們被應用於段落、文本、表格、列表等等。 
有經驗的程序員會將樣式定位為間接Level,關於它的好處其中之一便是允許你定義一次,利用多次,這樣定義節省了很多相同的工作,但更重要的是它允許你改變定義並將改變反應在你應用的所有位置上面。

 

為什么我應用的樣式不顯示?

這其中可能發生的事情可能會相當多直到我可以添加一些更高級的功能來解決它,這里先放一些。 
1. 當你使用Word的時候,所有這些樣式都可以被應用於文中,好看的可以變得更加好看,而且你不需要為自己再重新做,大多數自己的並不會比內置的更漂亮。 
2. 雖然這些樣式顯示在你的UI里面,但它並不在你創建的文檔里面,至少在你第一次使用他們之前。這種事非常好的,他們會占用相當大的空間,而且很多。如果文件包含所有你可以使用但沒有使用的樣式,這會 
3. 如果你使用了python-docx未在文件中使用的樣式來應用樣式(如果你好奇的話,可以到styles.xml去查看),Word就會忽視它。他不會抱怨,但是他同樣改變不了文件的格式。我確定那是個好理由,但如果你不能理解Word的話,那你則可以把它當做一個謎題了。 
4.你如你應用了樣式,Word就會把樣式保存在文件中,一旦在文件中了,它就會一直在那兒。應該有辦法將它刪掉,但是你得努力。如果你使用了樣式,刪除了樣式,但是當你保存文件時,它還是在那兒。 
添加這些就是希望注意: 如果你使用python-docx要在創建的文檔中使用樣式,則以文檔的開頭就必須包含樣式定義。否則就不會工作,它不會引發異常, 它只是不起作用。 
如果你使用 "默認" 模板文檔, 它包含下面列出的樣式, 大多數你可能是你想要的,如果你不設計自己的。如果您使用的是自己的起始文檔, 則需要在其中至少使用一次所需的樣式。您不必保留內容, 但您需要在保存文檔之前至少將該樣式應用於某種方式。寫上一個字或一個詞語, 連續應用五種樣式,然后刪除段落這樣工作就可以了。這就是我如何把下面的那些放入默認模板:)。

 

Glossary

樣式定義 
文檔樣式部分中的元素<w:style>,它顯式地定義了樣式的屬性。 
定義樣式 
文檔 
已經在文檔中明確定義的文檔隱藏樣式相區別。 
內置樣式 
Word中含有276個預設風格的預設樣式在Word中,例如像“Heading 1”。內置樣式可以是顯式的也可以是隱式的。而尚未定義的樣式稱為隱式樣式。但是不管顯式定義還是隱式定義的都可以在Word的樣式面板或者樣式選項中出現。 
自定義格式 
可以被稱為用戶樣式,即所有不是預設樣式的樣式,注意下自定義樣式不能為隱藏樣式。 
隱式樣式 
在特定文檔中沒有定義的內置樣式稱為該文檔中的隱式樣式。根據文檔中的LatentStyles對象中的設置,隱式樣式可以作為UI中的選項出現。 
推薦列表樣式 
從樣式列表下拉框中選擇【推薦】時,樣式工具箱或面板中出現的樣式列表。 
樣式庫 
The selection of example styles that appear in the ribbon of the Word UI and which may be applied by clicking on one of them. 
出現在Word UI中的示例樣式的選擇,可以通過單擊其中之一來應用。

 

識別樣式

一個樣式有三個識別屬性,name,style_idtype。 
每個樣式的name屬性都是穩定的,是用於訪問的唯一標識符。 
樣式的style_id在內部用於將內容對象(如段落)設為其樣式。然而,這個值是由Word自動生成的,不能保證在整個保存過程中都是穩定的。通常,樣式id只是通過從本地化樣式名稱中刪除空格形成的,但是也有例外。python-docx的用戶通常應該避免使用樣式id,除非他們對所涉及的內部內容有信心。 
樣式的type是在創建時設置的,不能更改。

 

內置樣式

Word有近300種所謂的內置樣式,比如Normal、Heading 1和List Bullet。樣式定義存儲在styles.xml是docx包的一部分,但是內置的樣式定義存儲在Word應用程序本身中,不寫入styles.xml。直到真正使用xml。這是一種明智的策略,因為它們占用了大量空間,否則將在每個.docx文件中產生大量冗余和無用的開銷。 
內置樣式直到使用后才寫入python.docx包,這一事實引起了對隱式樣式的需求。

 

樣式行為

除了收集一組格式化屬性外,樣式還有五個屬性指定其behavior。這種行為相對簡單,基本上等同於樣式出現在Word或LibreOffice UI中的時間和位置。 
理解樣式行為的關鍵概念是推薦列表。在Word中的“樣式”窗格中,用戶可以選擇要查看的樣式列表。其中一個被命名為“推薦列表”,稱為“推薦列表”。所有五種行為屬性都會影響樣式在這個列表和樣式庫中的外觀的某些方面。 
簡而言之,如果一個樣式的隱藏屬性為False(默認),那么它就會出現在推薦列表中。如果一個樣式沒有隱藏,並且它的quick_style屬性為True,那么它也會出現在樣式庫中。如果隱藏樣式的unhide_when_used屬性為True,那么它的隱藏屬性在第一次使用時就設置為False。樣式列表和樣式庫中的樣式按照優先級排序,然后按照字母順序排序相同優先級的樣式。如果樣式的locked屬性為True,並且文檔的格式限制被打開,那么樣式將不會出現在任何列表或樣式庫中,並且不能應用於內容。

 

隱式樣式

需要指定沒有在style.sxml中定義的內置樣式的UI行為。就需要隱式樣式定義。隱式樣式定義基本上是根樣式定義,除了樣式名稱之外,它最多有五個行為屬性。通過為每個行為屬性定義默認值來節省額外的空間,因此只需要定義那些與默認值不同的屬性,並且匹配所有默認值的樣式不需要隱式的樣式定義。 
潛在的樣式定義使用w:latentStylesw:lsdException元素指定,這些元素出現在styles.xml中。 
內建樣式只需要隱式樣式定義,因為只有內建樣式可以出現在UI中,而不需要在styles.xml中定義樣式。

 

樣式繼承

樣式可以從另一種樣式繼承屬性,有點類似於級聯樣式表(CSS)的工作方式。使用base_style屬性指定繼承。通過將一種樣式建立在另一種樣式的基礎上,就可以形成任意深度的繼承層次結構。沒有基本樣式的樣式從默認文檔繼承屬性。

 

默認模板中的段落樣式

  • Normal
  • Body Text
  • Body Text 2
  • Body Text 3
  • Caption
  • Heading 1
  • Heading 2
  • Heading 3
  • Heading 4
  • Heading 5
  • Heading 6
  • Heading 7
  • Heading 8
  • Heading 9
  • Intense Quote
  • List
  • List 2
  • List 3
  • List Bullet
  • List Bullet 2
  • List Bullet 3
  • List Continue
  • List Continue 2
  • List Continue 3
  • List Number
  • List Number 2
  • List Number 3
  • List Paragraph
  • Macro Text
  • No Spacing
  • Quote
  • Subtitle
  • TOCHeading
  • Title 
    默認模板中的表格樣式
  • Table Normal
  • Colorful Grid
  • Colorful Grid Accent 1
  • Colorful Grid Accent 2
  • Colorful Grid Accent 3
  • Colorful Grid Accent 4
  • Colorful Grid Accent 5
  • Colorful Grid Accent 6
  • Colorful List
  • Colorful List Accent 1
  • Colorful List Accent 2
  • Colorful List Accent 3
  • Colorful List Accent 4
  • Colorful List Accent 5
  • Colorful List Accent 6
  • Colorful Shading
  • Colorful Shading Accent 1
  • Colorful Shading Accent 2
  • Colorful Shading Accent 3
  • Colorful Shading Accent 4
  • Colorful Shading Accent 5
  • Colorful Shading Accent 6
  • Dark List
  • Dark List Accent 1
  • Dark List Accent 2
  • Dark List Accent 3
  • Dark List Accent 4
  • Dark List Accent 5
  • Dark List Accent 6
  • Light Grid
  • Light Grid Accent 1
  • Light Grid Accent 2
  • Light Grid Accent 3
  • Light Grid Accent 4
  • Light Grid Accent 5
  • Light Grid Accent 6
  • Light List
  • Light List Accent 1
  • Light List Accent 2
  • Light List Accent 3
  • Light List Accent 4
  • Light List Accent 5
  • Light List Accent 6
  • Light Shading
  • Light Shading Accent 1
  • Light Shading Accent 2
  • Light Shading Accent 3
  • Light Shading Accent 4
  • Light Shading Accent 5
  • Light Shading Accent 6
  • Medium Grid 1
  • Medium Grid 1 Accent 1
  • Medium Grid 1 Accent 2
  • Medium Grid 1 Accent 3
  • Medium Grid 1 Accent 4
  • Medium Grid 1 Accent 5
  • Medium Grid 1 Accent 6
  • Medium Grid 2
  • Medium Grid 2 Accent 1
  • Medium Grid 2 Accent 2
  • Medium Grid 2 Accent 3
  • Medium Grid 2 Accent 4
  • Medium Grid 2 Accent 5
  • Medium Grid 2 Accent 6
  • Medium Grid 3
  • Medium Grid 3 Accent 1
  • Medium Grid 3 Accent 2
  • Medium Grid 3 Accent 3
  • Medium Grid 3 Accent 4
  • Medium Grid 3 Accent 5
  • Medium Grid 3 Accent 6
  • Medium List 1
  • Medium List 1 Accent 1
  • Medium List 1 Accent 2
  • Medium List 1 Accent 3
  • Medium List 1 Accent 4
  • Medium List 1 Accent 5
  • Medium List 1 Accent 6
  • Medium List 2
  • Medium List 2 Accent 1
  • Medium List 2 Accent 2
  • Medium List 2 Accent 3
  • Medium List 2 Accent 4
  • Medium List 2 Accent 5
  • Medium List 2 Accent 6
  • Medium Shading 1
  • Medium Shading 1 Accent 1
  • Medium Shading 1 Accent 2
  • Medium Shading 1 Accent 3
  • Medium Shading 1 Accent 4
  • Medium Shading 1 Accent 5
  • Medium Shading 1 Accent 6
  • Medium Shading 2
  • Medium Shading 2 Accent 1
  • Medium Shading 2 Accent 2
  • Medium Shading 2 Accent 3
  • Medium Shading 2 Accent 4
  • Medium Shading 2 Accent 5
  • Medium Shading 2 Accent 6
  • Table Grid
 

處理樣式

本頁使用了前一小節的概念,如果不熟悉,請參閱前一節了解樣式

 

訪問一個樣式

樣式可以通過使用Document.styles屬性訪問:

 
  1. >>> document = Document()
  2. >>> styles = document.styles
  3. >>> styles
  4. <docx.styles.styles.Styles object at 0x10a7c4f50>

style對象提供了對通過名稱定義的樣式的字典式訪問:

 
  1. >>> styles['Normal']
  2. <docx.styles.style._ParagraphStyle object at <0x10a7c4f6b>
注意
內置樣式使用英文名稱(如“Heading 1”)存儲在WordprocessingML文件中,但是 使用本地化版本的Word的用戶還是會在UI中看到本地語言名稱(如“Kop1”)。因為python-docx操作WordprocessingML文件,樣式查找必須使用英文名。這個外部站點上的文檔允許您在本地語言名稱和英語樣式名稱之間創建映射: http://www.thedoctools.com/index.php?show=mt_create_style_name_list 用戶定義的樣式(也稱為自定義樣式)不是本地化的,它們是通過與Word中的UI中的相同的名字來訪問的。

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

 
  1. >>> from docx.enum.style import WD_STYLE_TYPE
  2. >>> styles = document.styles
  3. >>> paragraph_styles = [
  4. ... s for s in styles if s.type == WD_STYLE_TYPE.PARAGRAPH
  5. ... ]
  6. >>> for style in paragraph_styles:
  7. ... print(style.name)
  8. ...
  9. Normal
  10. Body Text
  11. List Bullet
 

應用一個樣式

ParagraphRunTable對象每個都有Styles屬性,為這些屬性分配一個樣式對象將應用該樣式:

 
  1. >>> document = Document()
  2. >>> paragraph = document.add_paragraph()
  3. >>> paragraph.style
  4. <docx.styles.style._ParagraphStyle object at <0x11a7c4c50>
  5. >>> paragraph.style.name
  6. 'Normal'
  7. >>> paragraph.style = document.styles['Heading 1']
  8. >>> paragraph.style.name
  9. 'Heading 1'

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

 
  1. >>> paragraph.style = 'List Bullet'
  2. >>> paragraph.style
  3. <docx.styles.style._ParagraphStyle object at <0x10a7c4f84>
  4. >>> paragraph.style.name
  5. 'List Bullet'

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

 
  1. >>> paragraph = document.add_paragraph(style='Body Text')
  2. >>> paragraph.style.name
  3. 'Body Text'
  4. >>> body_text_style = document.styles['Body Text']
  5. >>> paragraph = document.add_paragraph(style=body_text_style)
  6. >>> paragraph.style.name
  7. 'Body Text'
 

添加或刪除樣式

一個新樣式可以通過指定一個唯一的名字和類型來添加到文檔中:

 
  1. >>> from docx.enum.style import WD_STYLE_TYPE
  2. >>> styles = document.styles
  3. >>> style = styles.add_style('Citation', WD_STYLE_TYPE.PARAGRAPH)
  4. >>> style.name
  5. 'Citation'
  6. >>> style.type
  7. PARAGRAPH (1)

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

 
  1. >>> style.base_style
  2. None
  3. >>> style.base_style = styles['Normal']
  4. >>> style.base_style
  5. <docx.styles.style._ParagraphStyle object at 0x10a7a9550>
  6. >>> style.base_style.name
  7. 'Normal'

一個樣式可以通過使用一個簡單的delete()方法來刪除:

 
  1. >>> styles = document.styles
  2. >>> len(styles)
  3. 10
  4. >>> styles['Citation'].delete()
  5. >>> len(styles)
  6. 9
注意
從文檔中刪除Style.delete()方法。它不會影響應用該樣式的文檔中的內容。具有文檔中未定義的樣式的內容是使用該內容對象的默認樣式呈現的,例如段落中的“Normal”
 

定義字符格式

字符、段落和表樣式都可以指定要應用於具有該樣式的內容的字符格式。可以直接應用於文本的所有字符格式都可以用樣式指定。示例包括字體字體和大小、粗體、斜體和下划線。 
這三種樣式類型中的每一種都有一個font屬性,提供對Font對象的訪問。樣式的字體對象提供了獲取和設置該樣式的字符格式的屬性。 
這里提供了幾個例子,要想了解更詳細的信息,請參閱:Font API參考手冊。 
Font樣式可以通過這樣訪問:

 
  1. >>> from docx import Document
  2. >>> document = Document()
  3. >>> style = document.styles['Normal']
  4. >>> font = style.font

字體和字號可以通過這樣訪問:

 
  1. >>> from docx.shared import Pt
  2. >>> font.name = 'Calibri'
  3. >>> font.size = Pt(12)

許多字體屬性都是三態的,意味着,意味着他們可以有:True,FalseNoneTrue意味着屬性是“打開”,False意味着“關閉”,從概念上說,None意味着“繼承”。因為樣式存在於繼承層次結構中,所以有能力在層次結構中的正確位置指定屬性是很重要的,通常是在層次結構中越高越好。例如,如果所有標題都應該使用Arial字體,那么在標題1樣式上設置這個屬性,讓標題2從標題1繼承就更有意義了。 
粗體和斜體是三態屬性,全大寫、刪除線、上標等等也是三態屬性。有關完整列表,請參閱FontAPI文檔:

 
  1. >>> font.bold, font.italic
  2. (None, None)
  3. >>> font.italic = True
  4. >>> font.italic
  5. True
  6. >>> font.italic = False
  7. >>> font.italic
  8. False
  9. >>> font.italic = None
  10. >>> font.italic
  11. None

下划線是一種特殊的情況,它是三態屬性和枚舉值屬性的混合。True表示單下划線,這是目前最常見的。False表示不需要下划線,但如果不需要下划線,通常都不是正確的選擇,因為很少從基本樣式繼承下划線。其他形式的下划線,如雙划線或虛線,都是由WD_UNDERLINE枚舉成員指定的:

 
  1. >>> font.underline
  2. None
  3. >>> font.underline = True
  4. >>> # or perhaps
  5. >>> font.underline = WD_UNDERLINE.DOT_DASH
 

定義段落格式

段落樣式和表格樣式都允許指定段落格式。這些樣式都提供了對ParagraphFormat對象的paragraph_format屬性的訪問方法。 
段落格式包括布局,如對齊、縮進、前后空格、前分頁和孤行控制。有關可用屬性的完整列表,請參閱ParagraphFormat的API文檔。 
這是一個例子,告訴你如何創建一個段落樣式,懸掛縮進1/4字符,12pint的間距,和孤行控制:

 
  1. >>> from docx.enum.style import WD_STYLE_TYPE
  2. >>> from docx.shared import Inches, Pt
  3. >>> document = Document()
  4. >>> style = document.styles.add_style('Indent', WD_STYLE_TYPE.PARAGRAPH)
  5. >>> paragraph_format = style.paragraph_format
  6. >>> paragraph_format.left_indent = Inches(0.25)
  7. >>> paragraph_format.first_line_indent = Inches(-0.25)
  8. >>> paragraph_format.space_before = Pt(12)
  9. >>> paragraph_format.widow_control = True
 

使用特定段落的樣式屬性

段落樣式具有next_paragraph_style屬性,該屬性指定將應用於在該樣式的段落之后插入的新段落的樣式。當樣式通常只在序列中出現一次(如標題)時,這是非常有用的。在這種情況下,段落樣式可以在完成標題后自動恢復為主體樣式。 
在大多數的情況下(正文段落),后續段落應采用與當前段落相同的風格。如果沒有指定下一段的樣式,默認的樣式可以通過應用相同的樣式很好地處理這種情況。 
這里是一個如果在一個主體文本里改變下一段標題1樣式的的例子:

 
  1. >>> from docx import Document
  2. >>> document = Document()
  3. >>> styles = document.styles
  4. >>> styles['Heading 1'].next_paragraph_style = styles['Body Text']

這種默認可以通過設置其為None或樣式本身來恢復:

 
  1. >>> heading_1_style = styles['Heading 1']
  2. >>> heading_1_style.next_paragraph_style.name
  3. 'Body Text'
  4. >>> heading_1_style.next_paragraph_style = heading_1_style
  5. >>> heading_1_style.next_paragraph_style.name
  6. 'Heading 1'
  7. >>> heading_1_style.next_paragraph_style = None
  8. >>> heading_1_style.next_paragraph_style.name
  9. 'Heading 1'
 
控制在Word的UI中樣式如何顯示?

樣式的屬性分為兩類,行為屬性和格式屬性。它的行為屬性控制樣式在UI中出現的時間和位置。它的格式屬性決定了應用樣式的內容的格式,比如字體的大小和段落縮進。 
這是5中樣式的行為屬性;

  • hidden
  • unhide_when_used
  • priority
  • quick_style
  • locked

有關這些行為屬性如何交互的描述,請參閱“了解樣式”中的“樣式行為”部分,以確定樣式在UI中出現的時間和位置。 
優先級屬性接受一個整數值。其他四個樣式行為屬性是三態屬性,這意味着它們可以取值True(打開)、False(關閉)或None(繼承)。

 
在樣式庫中顯示一個樣式

以下代碼將使“正文文本”段落樣式首先出現在樣式庫中:

 
  1. >>> from docx import Document
  2. >>> document = Document()
  3. >>> style = document.styles['Body Text']
  4. >>> style.hidden = False
  5. >>> style.quick_style = True
  6. >>> style.priorty = 1
 
在樣式庫中移除一個樣式

他的代碼將從樣式庫中刪除“普通”段落樣式,但允許它保留在推薦列表中:

 
  1. >>> style = document.styles['Normal']
  2. >>> style.hidden = False
  3. >>> style.quick_style = False
 

處理隱式樣式

請參閱“了解樣式”中的“內置樣式”和“隱式樣式”部分,以了解隱式樣式如何定義尚未在樣式中定義的內建樣式的行為屬性在python.docx文件的styles.xml 部分。

 
在文檔中訪問隱式樣式:
 
  1. >>> document = Document()
  2. >>> latent_styles = document.styles.latent_styles

LatentStyles對象支持len()方法,迭代、和通過樣式名進行字典式訪問:

 
  1. >>> len(latent_styles)
  2. 161
  3. >>> latent_style_names = [ls.name for ls in latent_styles]
  4. >>> latent_style_names
  5. ['Normal', 'Heading 1', 'Heading 2', ... 'TOC Heading']
  6. >>> latent_quote = latent_styles['Quote']
  7. >>> latent_quote
  8. <docx.styles.latent.LatentStyle object at 0x10a7c4f50>
  9. >>> latent_quote.priority
  10. 29
 
改變隱式樣式默認屬性

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

 
  1. >>> latent_styles.default_to_locked
  2. False
  3. >>> latent_styles.default_to_locked = True
  4. >>> latent_styles.default_to_locked
  5. True
 
添加一個隱式樣式定義

LatentStyles中可以通過使用一個·add_latent_style()方法 來添加一個隱式樣式。

 
  1. >>> latent_style = latent_styles['List Bullet']
  2. KeyError: no latent style with name 'List Bullet'
  3. >>> latent_style = latent_styles.add_latent_style('List Bullet')
  4. >>> latent_style.hidden = False
  5. >>> latent_style.priority = 2
  6. >>> latent_style.quick_style = True
 

刪除一個隱式樣式定義

一個隱式樣式刪除可以通過 delete() 方法。

 
  1. >>> latent_styles['Light Grid']
  2. <docx.styles.latent.LatentStyle object at 0x10a7c4f50>
  3. >>> latent_styles['Light Grid'].delete()
  4. >>> latent_styles['Light Grid']
  5. KeyError: no latent style with name 'Light Grid'
 

了解圖片及其他一些形狀

從概念上講,Word文檔有兩個層,一個文本層和一個繪圖層。在文本層中,文本對象從左到右、從上到下流動,當先前的頁面被填充時,就開始一個新的頁面。在繪圖層中,繪制對象(稱為形狀)被放置在任意位置。這些形狀有時被稱為浮動形狀。 
圖片是可以出現在文本或繪圖層中的形狀。當它出現在文本層時,它被稱為內聯形狀,或者更具體地說,內聯圖片。 
內聯形狀被視為一個大文本字符(字符符號)。線的高度增加,以適應形狀,形狀被包裝成一條線,它將適合寬度,就像文本。在它前面插入文本會使它向右移動。通常,一幅畫是單獨放在一段中,但這不是必需的。它可以在放置它的段落前后有文本。 
在編寫本文時,python-docx只支持內聯圖片。可以添加浮動圖片。如果您有一個案例,請在問題跟蹤器上提交一個特性請求。add_picture()方法將一個指定的圖片添加到文檔末尾的一個段落中。然而,通過深入挖掘API,您可以在圖片的任意一側放置文本,或者兩者都放置。

 

API 參考文檔

 

Document對象

主要文檔及相關對象

 

Document構造函數

docx.Document(docx=None)

返回從docx加載的文檔對象,其中docx可以是.docx文件(字符串)的路徑,也可以是類文件對象。如果docx缺少或沒有,則加載內置的默認文檔“模板”

 

Document對象

class docx.document.Document

WordprocessingML(WML)文檔。不打算直接構造。使用docx.Document()打開或創建一個文檔。

add_heading(text=u'', level=1)
返回新添加到文檔末尾的標題段落,其中包含文本,其段落樣式由級別決定。如果level為0,樣式設置為Title。如果級別是1(或省略),則使用標題1。否則樣式設置為Heading {level}。如果級別在0-9范圍之外,就會增加ValueError值。
add_page_break()
返回新添加到文檔末尾的段落,僅包含分頁符。
add_paragraph(text=u'', style=None)
返回一個新添加到文檔末尾的段落,用文本填充,具有段落樣式。文本可以包含制表符(\t)字符,這些字符被轉換為制表符的適當XML格式。文本還可以包括換行符(\n)或回車符(\r),每個換行符都被轉換為換行符。
add_picture(image_path_or_stream, width=None, height=None)
返回在文檔末尾自己的段落中添加的新圖形形狀。圖片包含image_path_or_stream的圖片,根據寬度和高度縮放。如果既沒有指定寬度也沒有指定高度,則圖像將以其實際大小顯示。如果只指定了一個,則使用它來計算一個縮放因子,然后應用於未指定的維數,以保持圖像的長寬比。圖的實際大小使用圖像文件中指定的點每英寸(dpi)值計算,如果沒有指定值,默認為72 dpi,通常情況下是這樣的。
add_section(start_type=2)
返回一個Section對象,表示在文檔末尾添加的新節。可選的start_type參數必須是WD_SECTION_START枚舉的成員,如果沒有提供NEW_PAGE,默認為WD_SECTION。
add_table(rows, cols, style=None)
添加一個分別具有行和cols行數和表樣式的表和列計數的表。樣式可以是段落樣式對象或段落樣式名稱。如果樣式為空,則表繼承文檔的默認表樣式。
core_properties
CoreProperties對象提供對本文檔核心屬性的讀寫訪問。
inline_shapes
一個InlineShapes對象,提供對該文檔中內聯形狀的訪問。內聯形狀是一個圖形對象,例如圖片,包含在一段文本中,表現得像字符符號,像段落中的其他文本一樣流動。
paragraphs
與文檔中各段相對應的段落實例列表,按文檔順序排列。注意,或等修訂標記中的段落不在此列表中。
part
文檔的部分對象。
save(path_or_stream)
將此文檔保存到path_or_stream,它可以是文件系統位置(字符串)的路徑,也可以是類文件對象。
sections
sections對象提供對本文檔中每個節的訪問。
settings
一個 Styles對象,提供對該文檔中的樣式的訪問。
tables
與文檔中的表相對應的表實例列表,按文檔順序排列。注意,只有出現在文檔頂層的表出現在這個列表中;嵌套在表單元格中的表不會出現。修訂標記內的表,如 <w:ins><w:del>,也不會出現在列表中
 

CoreProperties對象

每個Document對象都提供了通過core_properties屬性來提供對其CorePropertiesvV1來對其CoreProperties對象的訪問。CoreProperties象為文檔提供對所謂的核心屬性的讀寫訪問。核心屬性包括作者、類別、注釋、content_status、已創建、標識符、關鍵字、語言、last_modified_by、last_print、modified、revision、主題、標題和版本等。 
每個屬性都是三種類型之一,strdatetime以及int。字符串屬性的長度限制為255個字符,如果沒有設置,則返回一個空字符串(")。沒有時區的datetime對象,即UTC格式。任何時區轉換都是客戶端的責任。如果未設置日期屬性,則返回None。 
python-docx不會自動設置任何文檔核心屬性,除非將核心屬性部分添加到沒有核心屬性的表示中(非常少見)。如果python-docx添加了一個核心屬性部分,那么它包含標題、last_modified_by、修訂和修改屬性的默認值。如果需要,客戶端代碼應該更新諸如修訂和last_modified_by之類的屬性。

class docx.opc.coreprops.CoreProperties
author
string--主要負責生成資源內容的實體。
category
string--此包內容的分類。示例值可能包括:簡歷、信函、財務預測、提案或技術演示。
comments
string--對資源內容的描述。
content_status
string--文檔的完成狀態,例如“草稿”
created
datetime--文件初始創建時間
identifier
string--對給定上下文中的資源的明確引用,例如ISBN
keywords
string--描述性單詞或短語可能被用作本文檔的搜索詞
language
string--文件使用的語言
last_modified_by
string--最后修改文檔的人的姓名或其他標識符(如電子郵件地址)
last_printed
datetime--最后一次打印文件的時間
modified
datetime--最后一次修改文檔的時間
revision
int此修訂的編號,每次保存文檔時都會遞增。但是請注意,python-docx在保存文檔時不會自動增加修訂號。
subject
string--文章資源內容的主題
title
string--給定資源的名字
version
string--自由格式的版本字符串
 

Document Settings 對象

class docx.settings.Settings

提供對文檔級別設置的訪問。使用 Document.settingsf訪問。設置屬性。

element
這個對象代理的lxml元素。
 

樣式關系對象

style用於在單個名稱下收集一組格式化屬性,並一次性將這些屬性應用於內容對象。這促進了整個文檔和相關文檔的格式一致性,並允許通過以適當的樣式更改定義來全局地進行格式更改。

 

Styles 對象

class docx.styles.styles.Styles

提供對文檔中定義的樣式的訪問的集合。使用Document.Style屬性訪問。通過樣式名稱支持len()、迭代和字典樣式訪問。

add_style(name, style_type, builtin=False)
返回一個新添加的 style對象,類型為style_type,並通過名稱進行標識。內建樣式可以通過為可選的內建參數傳遞True來定義。
default(style_type)
返回style_type的默認樣式或None(如果沒有為該類型定義默認樣式)。
element
這個對象代理的lxml元素
latent_styles
LatentStyles對象提供對隱式樣式的默認行為和 _LatentStyle對象集合的訪問,這些對象定義了特定的隱式樣式的默認覆蓋。
 

BaseStyle 對象

class docx.styles.style.BaseStyle

用於各種類型的樣式對象、段落、字符、表和編號的基類。所有樣式對象都繼承這些屬性和方法。

builtin
只讀。如果這個樣式是內置樣式則為 TureFalse就說明這個是自定義(用戶樣式)。注意,這個值是基於XML中存在的customStyle屬性,而不是基於關於哪些樣式構建到Word中的特定知識。
delete()
從文檔中刪除樣式定義。注意,調用此方法不會刪除或更改應用於任何文檔內容的樣式。具有已刪除樣式的內容項將使用默認樣式呈現,文檔中未定義樣式的任何內容也是如此。
element
代理這個對象的lxml元素。
hidden
如果在樣式庫和推薦樣式列表中顯示此樣式被禁止,則為 True。否則為 False。為了在樣式庫中顯示,這個值必須為 Falsequick_style必須為 True
locked
可讀寫的布爾值。 如果這個樣式是被鎖住的狀態則為 True,一個被鎖住狀態的樣式不能再在樣式面板中顯示出來或者說不能被文檔內容應用。只有在打開文檔的格式保護時(通過Developer菜單),該行為才會激活。
name
這個style的UI中的名字。
priority
此樣式在Word UI中的整數排序控制顯示序列的關鍵字。 None表示沒有定義任何設置,導致Word使用默認值0。樣式名用作二級排序鍵,用於解析具有相同優先級值的樣式的排序。
quick_style
如果這個樣式顯示在樣式庫中則為 True,如果該樣式在隱藏時應該顯示在樣式庫中,則為 False。讀/寫布爾值。
type
對應於該樣式類型的WD_STYLE_TYPE的成員,例如WD_STYLE_TYPE.段落。
unhide_when_used
如果應用程序在下一次應用於內容時應該使該樣式可見,則為 True。否則 False。請注意,當將python-docx應用於內容時,它不會自動地為該屬性打開具有 True的樣式。
 

_CharacterStyle 對象

class docx.styles.style._CharacterStyle

基礎: docx.styles.style.BaseStyle 
字符樣式。字符樣式應用於Run對象,主要通過字體屬性中的Font對象提供字符級格式。

base_style
如果此樣式不是基於另一種樣式,則此樣式將繼承或不繼承。
builtin
只讀。如果這個樣式是內置樣式則為 TureFalse就說明這個是自定義(用戶樣式)。注意,這個值是基於XML中存在的customStyle屬性,而不是基於關於哪些樣式構建到Word中的特定知識。
delete()
從文檔中刪除樣式定義。注意,調用此方法不會刪除或更改應用於任何文檔內容的樣式。具有已刪除樣式的內容項將使用默認樣式呈現,文檔中未定義樣式的任何內容也是如此。
font
Font對象提供對這種樣式的字符格式屬性(如字體名稱和大小)的訪問。
hidden
如果在樣式庫和推薦樣式列表中顯示此樣式被禁止,則為 True。否則為 False。為了在樣式庫中顯示,這個值必須為 False以及  quick_style必須為 True
locked
可讀寫的布爾值。 如果這個樣式是被鎖住的狀態則為 True,一個被鎖住狀態的樣式不能再在樣式面板中顯示出來或者說不能被文檔內容應用。只有在打開文檔的格式保護時(通過Developer菜單),該行為才會激活。
name
這個style的UI中的名字。
priority
此樣式在Word UI中的整數排序控制顯示序列的關鍵字。 None表示沒有定義任何設置,導致Word使用默認值0。樣式名用作二級排序鍵,用於解析具有相同優先級值的樣式的排序。
quick_style
如果這個樣式顯示在樣式庫中則為 True,如果該樣式在隱藏時應該顯示在樣式庫中,則為 False。讀/寫布爾值。
unhide_when_used
如果應用程序在下一次應用於內容時應該使該樣式可見,則為 True。否則 False。請注意,當將python-docx應用於內容時,它不會自動地為該屬性打開具有 True的樣式。
 

_ParagraphStyle 對象

class docx.styles.style._ParagraphStyle
基礎:  docx.styles.style._CharacterStyle
一種段落樣式,一個段落樣式提供了字符格式和段落格式例如縮進和行間距。
base_style
如果此樣式不是基於另一種樣式,則此樣式將繼承或不繼承。
builtin
只讀。如果這個樣式是內置樣式則為 TureFalse就說明這個是自定義(用戶樣式)。注意,這個值是基於XML中存在的customStyle屬性,而不是基於關於哪些樣式構建到Word中的特定知識。
delete()
從文檔中刪除樣式定義。注意,調用此方法不會刪除或更改應用於任何文檔內容的樣式。具有已刪除樣式的內容項將使用默認樣式呈現,文檔中未定義樣式的任何內容也是如此。
font
Font對象提供對這種樣式的字符格式屬性(如字體名稱和大小)的訪問。
hidden
如果在樣式庫和推薦樣式列表中顯示此樣式被禁止,則為 True。否則為 False。為了在樣式庫中顯示,這個值必須為 False以及  quick_style必須為 True
locked
可讀寫的布爾值。 如果這個樣式是被鎖住的狀態則為 True,一個被鎖住狀態的樣式不能再在樣式面板中顯示出來或者說不能被文檔內容應用。只有在打開文檔的格式保護時(通過Developer菜單),該行為才會激活。
name
這個style的UI中的名字。
next_paragraph_style
_CharacterStyle對象,該對象表示將自動應用於插入該樣式后的新段落的樣式。如果沒有定義下一段樣式,則返回self。分配None或self會刪除設置,以便使用相同的樣式創建新段落。
paragraph_format
_CharacterStyle對象提供了對於例如像縮進等段落格式屬性這樣樣式的訪問。
priority
此樣式在Word UI中的整數排序控制顯示序列的關鍵字。 None表示沒有定義任何設置,導致Word使用默認值0。樣式名用作二級排序鍵,用於解析具有相同優先級值的樣式的排序。
quick_style
如果這個樣式顯示在樣式庫中則為 True,如果該樣式在隱藏時應該顯示在樣式庫中,則為 False。讀/寫布爾值。
unhide_when_used
如果應用程序在下一次應用於內容時應該使該樣式可見,則為 True。否則 False。請注意,當將python-docx應用於內容時,它不會自動地為該屬性打開具有 True的樣式。
 

_TableStyle 對象

class docx.styles.style._TableStyle
基礎: docx.styles.style._ParagraphStyle
一個表的風格。表樣式為其內容提供字符和段落格式,以及特殊的表格式屬性。
base_style
如果此樣式不是基於另一種樣式,則此樣式將繼承或不繼承。
builtin
只讀。如果這個樣式是內置樣式則為 TureFalse就說明這個是自定義(用戶樣式)。注意,這個值是基於XML中存在的customStyle屬性,而不是基於關於哪些樣式構建到Word中的特定知識。
delete()
從文檔中刪除樣式定義。注意,調用此方法不會刪除或更改應用於任何文檔內容的樣式。具有已刪除樣式的內容項將使用默認樣式呈現,文檔中未定義樣式的任何內容也是如此。
font
Font對象提供對這種樣式的字符格式屬性(如字體名稱和大小)的訪問。
hidden
如果在樣式庫和推薦樣式列表中顯示此樣式被禁止,則為 True。否則為 False。為了在樣式庫中顯示,這個值必須為 False以及  quick_style必須為 True
locked
可讀寫的布爾值。 如果這個樣式是被鎖住的狀態則為 True,一個被鎖住狀態的樣式不能再在樣式面板中顯示出來或者說不能被文檔內容應用。只有在打開文檔的格式保護時(通過Developer菜單),該行為才會激活。
name
這個style的UI中的名字。
next_paragraph_style
_CharacterStyle對象,該對象表示將自動應用於插入該樣式后的新段落的樣式。如果沒有定義下一段樣式,則返回self。分配None或self會刪除設置,以便使用相同的樣式創建新段落。
paragraph_format
_CharacterStyle對象提供了對於例如像縮進等段落格式屬性這樣樣式的訪問。
priority
此樣式在Word UI中的整數排序控制顯示序列的關鍵字。 None表示沒有定義任何設置,導致Word使用默認值0。樣式名用作二級排序鍵,用於解析具有相同優先級值的樣式的排序。
quick_style
如果這個樣式顯示在樣式庫中則為 True,如果該樣式在隱藏時應該顯示在樣式庫中,則為 False。讀/寫布爾值。
unhide_when_used
如果應用程序在下一次應用於內容時應該使該樣式可見,則為 True。否則 False。請注意,當將python-docx應用於內容時,它不會自動地為該屬性打開具有 True的樣式。
 

_NumberingStyle 對象

class docx.styles.style._NumberingStyle
編號樣式。沒有實現。
 

LatentStyles objects

class docx.styles.latent.LatentStyles

提供對本文檔中隱式樣式的默認行為和_LatentStyle對象集合的訪問,這些對象為特定的指定隱式樣式定義這些缺省值的覆蓋。

add_latent_style(name)
返回一個新添加的 _LatentStyle對象,以覆蓋這個潛在樣式對象中為具有名稱的內置樣式定義的繼承默認值。
default_priority
0到99之間的整數,指定樣式列表和樣式庫中潛在樣式的默認排序順序。如果沒有賦值,則為 None,這將導致Word使用默認值99。
default_to_hidden
布爾值指定是否隱藏隱式樣式的默認行為。隱式樣式不會出現在推薦列表或樣式庫中。
default_to_locked
布爾值指定是否鎖定潛在樣式的默認行為。鎖定樣式不會出現在樣式面板或樣式庫中,也不能應用於文檔內容。只有在打開文檔的格式保護時(通過Developer菜單),該行為才會激活。
default_to_quick_style
布爾值指定隱藏樣式的默認行為是否在不隱藏時出現在樣式庫中。
default_to_unhide_when_used
布爾值指定隱藏樣式的默認行為是否在首次應用於內容時不隱藏。
element
通過這個對象代理lxml
load_count
指定要初始化到這個 LatentStyles對象中指定的默認值的內置樣式的數量。如果XML中沒有設置(非常少見),則沒有設置。默認的Word 2011模板將該值設置為276,這是Word 2010中的內置樣式。
 

_LatentStyle objects

class docx.styles.latent._LatentStyle

w:lsdException元素的代理,當樣式中尚未存儲該樣式的定義時,該元素指定內置樣式的顯示行為。style.xml的一部分。這個元素中的值覆蓋了父w:latentStyles元素中指定的默認值。

delete()
刪除這種潛在的樣式定義,以便在包含 LatentStyles對象中定義的默認值為其每個屬性提供有效值。在調用此方法后試圖訪問此對象上的任何屬性將引發 AttributeError
element
通過這個對象代理lxml
hidden
三態值,指定是否在推薦列表中顯示這種隱式樣式。沒有一個表示有效值繼承自父元素 <w:latentstyles>
locked
三態值,指定這種隱式樣式是否鎖定。鎖定樣式不會出現在樣式面板或樣式庫中,也不能應用於文檔內容。只有在打開文檔的格式保護時(通過Developer菜單),該行為才會激活。
name
此異常應用於的內置樣式的名稱。
priority
整數排序鍵用於UI中這種隱式樣式。
quick_style
三態值,指定當不隱藏時,這種潛在樣式是否應該出現在樣式庫中。沒有一個表示有效值應該從其父LatentStyles對象的默認值繼承。
unhide_when_used
在下次將樣式應用於內容時,指定該樣式是否應該將其隱藏屬性設置為False。 None表示有效值應該繼承自其父LatentStyles對象指定的默認值。
 

文本相關對象

 

Paragraph 對象

lass docx.text.paragraph.Paragraph

代理對象包裝元素

add_run(text=None, style=None)
在包含文本並具有由樣式ID樣式標識的字符樣式的段落中追加一個run。文本可以包含制表符(\t)字符,這些字符被轉換為制表符的適當XML格式。文本還可以包括換行符(\n)或回車符(\r),每個換行符都被轉換為換行符。
alignment
WD_PARAGRAPH_ALIGNMENT枚舉變量成員,指定了這段的對齊設置。None值表示段落沒有直接應用的對齊值,並將從其樣式層次結構繼承其對齊值。將None賦給此屬性會刪除任何直接應用的對齊值。 
clear()
刪除所有內容后返回相同的段落。段落級別的格式,比如樣式,被保留了下來。
insert_paragraph_before(text=None, style=None)
返回一個新創建的段落,直接插入到這段前面。如果提供了文本,新段落將在一次運行中包含該文本。如果提供了樣式,則將該樣式分配給新段落。
paragraph_format
段落格式對象提供對段落格式屬性的訪問,例如行間距和縮進。
runs
本段中元素對應的運行實例序列。
style
讀/寫。 _ParagraphStyle對象,表示分配給這段的樣式。如果沒有為該段落指定顯式樣式,則其值為文檔的默認段落樣式。可以用段落樣式名稱代替段落樣式對象。分配None會移除任何應用的樣式,使其有效值成為文檔的默認段落樣式。
text
連接段落中每個運行的文本而形成的字符串。XML中的制表符和換行符分別映射到\t和\n字符。 
將文本分配給此屬性將導致將所有現有的段落內容替換為包含指定文本的單個運行。文本中的t字符映射到元素,每個\n或\r字符映射到換行符。段落級別的格式,比如樣式,被保留了下來。所有運行級格式(如粗體或斜體)都被刪除。
 

ParagraphFormat objects

class docx.text.parfmt.ParagraphFormat

提供對段落格式的訪問,如對齊、縮進、行間距、前后縮進以孤行控制。

alignment
WD_PARAGRAPH_ALIGNMENT枚舉變量成員,指定了這段的對齊設置。None值表示段落對齊是從樣式層次結構繼承而來的。
first_line_indent
指定段落第一行縮進的相對差異的長度值。一個正數會使第一行縮進。一個負數產生一個掛起縮進。 None第一行縮進是從樣式層次結構繼承的。
keep_together
如果段落應該保持“完整”,並且在呈現文檔時不跨頁邊界,則為 TrueNone它的有效值是從樣式層次結構繼承的。
keep_with_next
如果該段落在呈現文檔時應與隨后的段落保持在同一頁上,則為 True。例如,此屬性可用於將一個章節標題保持在與第一段相同的頁面上。 None它的有效值是從樣式層次結構繼承的。
left_indent
長度值,指定段落左側空白處和左側空白處之間的空間。 None個表示左縮進值是從樣式層次結構繼承的。使用英寸值對象作為以英寸為單位應用縮進的方便方法。
line_spacing
floatLength,指定段落連續行中基線之間的空間。 None值表示從樣式層次結構繼承行間距。浮動值,例如2.0或1.75,表示行距為線高的倍數。 Lenght如Pt(12)表示間距是固定高度。Pt值類是在點的單位中應用行間距的一種方便方法。分配 None會重置從樣式層次結構繼承的行間距。
line_spacing_rule
WD_LINE_SPACING枚舉的一個成員,指示應該如何解釋 line_space的值。將任何WD_LINE_SPACING成員賦值為 SINGLEDOUBLEONE_POINT_FIVE都會導致 line_space的值被更新,以產生相應的行間距。
page_break_before
如果段落應該出現在前面段落后面的頁面頂部,則為 TrueNone指出它的有效值是從樣式層次結構繼承的。
right_indent
Length,指定段落右側和右側之間的空間。 None表示右縮進值是從樣式層次結構繼承的。使用 Cm值對象作為一種方便的方法來應用以厘米為單位的縮進。
space_after
長度值,指定該段落與后續段落之間出現的間距。 None表示這個值是從樣式層次結構繼承的。長度對象提供了方便的屬性,例如pt和inch,允許輕松轉換到各種長度單位。
space_before
長度值,指定在該段和前段之間出現的間距。 None表示這個值是從樣式層次結構繼承的。Length對象提供了方便的屬性,例如pt和cm,可以方便地轉換到各種長度單位。
tab_stops
TabStops對象提供對為這種段落格式定義的選項卡停止的訪問。
widow_control
如果一段中的第一行和最后一行與另一段保持在同一頁上,則當單詞重新標記文檔時為 TrueNone它的有效值是從樣式層次結構繼承的。
 

Run objects

class docx.text.run.Run

代理對象包裝元素。運行中的一些屬性接受三態值,TrueFalseNoneTrueFalse分別對應開關。False表示屬性沒有在運行中直接指定,它的有效值是從樣式層次結構中獲取的。

add_break(break_type=6)
在run添加break_type的break元素。break_type可以獲取 WD_BREAK.LINEWD_BREAK.PAGE, WD_BREAK.COLUMN在docx.enum.text中導入WD_BREAK時。break_type默認為WD_BREAK.LINE。
add_picture(image_path_or_stream, width=None, height=None)
返回一個InlineShape實例,該實例包含image_path_or_stream標識的圖像,並添加到運行的末尾。 image_path_or_stream可以是路徑(字符串)或包含二進制圖像的類文件對象。如果既沒有指定寬度也沒有指定高度,則圖像將以其實際大小顯示。如果只指定了一個,則使用它來計算一個縮放因子,然后應用於未指定的維數,以保持圖像的長寬比。圖的本機大小使用圖像文件中指定的點每英寸(dpi)值計算,如果沒有指定值,默認為72 dpi,yiban情況下是這樣的。
add_tab()
在run的末尾添加一個的元素,在Word中解釋為一個制表符。
add_text(text)
將一個新添加的_Text對象(對應於一個新的子元素)返回到包含文本的run。與為運行分配文本給 Run.text相比這一方法可能更加友好。
bold
使運行里面的文本以粗體顯示。
font
Font對象提供對此運行的字符格式屬性(如字體名稱和大小)的訪問。
italic
讀/寫。三態值。當為True時,將導致運行的文本以斜體顯示。
style
讀/寫。一個 _CharacterStyle對象,表示應用於此運行的字符樣式。如果運行沒有直接應用的字符樣式,則返回文檔的默認字符樣式(通常是默認字符字體)。將此屬性設置為None會刪除任何直接應用的字符樣式。
text
通過將每個run content子元素的文本等效連接到Python字符串而形成的字符串。每個元素添加它所包含的文本字符。元素添加了一個\t字符。一個或元素每個添加一個\n字符。注意,元素可以指示分頁符或列分隔符以及行分隔符。所有元素都轉換為一個\n字符,不管它們的類型如何。所有其他內容子元素,如,都被忽略。 
將文本賦給此屬性會產生相反的效果,將每個\t字符轉換為元素,將每個\n或\r字符轉換為元素。任何現有的運行內容都將被替換。運行格式保持不變。
underline
Run的下划線樣式,可以是一個為None、True、False或WD_UNDERLINE的值。 None值表示運行沒有直接應用的下划線樣式,因此將繼承包含段落的下划線值。將 None賦給此屬性會刪除任何直接應用的下划線值。 False值表示沒有下划線的直接應用的設置,覆蓋任何繼承值。 True值表示單下划線。 WD_UNDERLINE的值用來指定其他的輪廓樣式,比如`double、wavy和點星型。
 

Font對象

class docx.text.run.Font

代理對象封裝元素的父元素,並提供對字符屬性(如字體名稱、字體大小、粗體和下標)的訪問。

all_caps
讀/寫. 使此字體中的文本以大寫字母顯示。
bold
讀/寫。使此文本內容以粗體顯示。
color
一個 ColorFormat對象,提供了一種獲取和設置該字體文本顏色的方法。
complex_script
讀寫三態值。如果為True,則將運行中的字符視為復雜的腳本,而不考慮其Unicode值。
cs_bold
讀/寫三態值。當為 True時,將使運行中的復雜腳本字符以粗體顯示。
cs_italic
讀/寫三態值。當為 True時,將使運行中的復雜腳本字符以斜體顯示。
double_strike
讀/寫三態值。當為 True時,將使運行中的文本以雙刪除線貫穿顯示。
emboss
讀/寫三態值。當為 True時,將使運行中的文本顯示為凸起的頁面。
hidden
讀/寫三態值。當為 True時,將導致run中的文本隱藏不顯示,除非應用程序設置強制顯示隱藏文本。
highlight_color
WD_COLOR_INDEX的一個成員,指示應用了高亮顯示的顏色,如果沒有應用高亮顯示,則為空。
imprint
讀寫三態值。當為True時,將使運行中的文本顯示為壓入頁面的狀態。
italic
讀/寫三態值。當為True時,將導致Run的文本以斜體顯示。 None表示有效值是從樣式層次結構繼承的。
math
讀/寫三態值。當為True時,指定此運行包含的WML應該像Office Open XML Math一樣處理。
name
獲取或設置此字體實例的字體名稱,如果找到匹配的字體,則使其控制的文本出現在指定的字體中。 None表示字體是從樣式層次結構繼承的。
no_proof
讀/寫三態值。當為 True時,指定在掃描文檔以查找拼寫和語法時,此運行的內容不應報告任何錯誤。
outline
讀/寫三態值。當True使運行中的字符看起來好像有一個輪廓,通過在每個字符符號的內外邊界上繪制一個像素寬的邊框。
rtl
讀/寫三態值。當True使運行中的文本具有從右到左的特征時。
shadow
讀/寫三態值。當 True使運行中的文本顯示為每個字符都有陰影時。
size
讀/寫長度值或 None,以英文單位(EMU)表示字體高度。 None表字體大小應該從樣式層次結構繼承。Length是int的子類,具有方便轉換為點或其他長度單位的屬性。 docx.shared.Pt類允許方便的點值規范:
  1. >> font.size = Pt(24)
  2. >> font.size
  3. 304800
  4. >> font.size.pt
  5. 24.0
small_caps
讀/寫三態值。當 True時,運行中的小寫字符顯示為大寫字母,比為運行指定的字體大小小兩個點。
snap_to_grid
讀/寫三態值。當True使運行在布局此運行中的字符時,在 FdocGrid元素中定義的每行設置中使用文檔網格字符。
spec_vanish
讀/寫三態值。當True時,將使運行中的文本以一條橫線穿過該行的中心出現。

subscript 
:布爾值,指示此字體中的字符是否顯示為下標。None下標/下標值是從樣式層次結構繼承的。

superscript
布爾值,指示此字體中的字符是否顯示為上標。 None表示下標/上標值是從樣式層次結構繼承的。
underline
此字體的下划線樣式,為 NoneTrueFalseWD_UNDERLINE的值之一。沒有指示字體從樣式層次結構繼承下划線值。 False表示沒有下划線。 True表示單下划線。 WD_UNDERLINE的值用來指定其他的輪廓樣式,比如double、wavy和dotted。
web_hidden
讀/寫三態值。當為True時,指定在web頁面視圖中顯示文檔時,將隱藏該運行的內容。
 

TabStop 對象

class docx.text.tabstops.TabStop

一個單獨的標簽停止應用於一個段落或樣式。使用包含制表位對象的列表語義進行訪問。

alignment
指定此制表位停止的對齊設置的 WD_TAB_ALIGNMENT成員。讀/寫。
leader
WD_TAB_LEADER中的一個成員,指定作為“leader”使用的重復字符,填充此選項卡所跨越的空間。分配None會產生與分配wd_tab_leader . space相同的結果。讀/寫。

position 
: 一個長度對象,表示這個制表符從段落內邊緣的距離。可能是積極的,也可能是消極的。讀/寫。

 

TabStops 對象

***class docx.text.tabstops.TabStops

一組taosptop卡對象,提供對段落或段落樣式的選項卡停止的訪問。支持迭代、索引訪問、del和len()。采用分段格式的tab_stops屬性;它不打算直接建造。

add_tab_stop(position, alignment=WD_TAB_ALIGNMENT.LEFT, leader=WD_TAB_LEADER.SPACES)
在位置添加一個新的制表符停止,長度對象指定制表符停止相對於段落邊緣的位置。一個負位置值是有效的,出現在掛起縮進。選項卡對齊默認為左側,但可以通過將 WD_TAB_ALIGNMENT枚舉的成員作為對齊方式傳遞來指定。可以通過將 WD_TAB_LEADER枚舉的成員作為leader傳遞來指定可選的leader字符。
clear_all()
移除所有自定義制表位。
 

表格對象

class docx.table.Table(tbl, parent)

一個WordprocessingML elemen的代理類。

add_column(width)
返回一個寬度 _Column對象,新添加到最右邊的表。
add_row()
返回一個_Row實例,新添加到表的最底部。
alignment
讀/寫。 WD_TABLE_ALIGNMENT或為 None,指定該表在頁邊距之間的位置。如果沒有指定設置,則會導致從樣式層次結構繼承有效值。
autofit
如果可以自動調整列寬以提高單元格內容的適合度,則為 True。如果表布局是固定的,則為 False。如果總列寬度超過頁面寬度,則在兩種情況下都會調整列寬。讀/寫布爾。
cell(row_idx, col_idx)
返回_Cell實例correponding到row_idx, col_idx交集的表單元格,其中(0,0)是最上面、最左邊的單元格。
column_cells(column_idx)
表中column_idx列中的單元格序列。
columns
表示該表中列序列的_Columns實例。
row_cells(row_idx)
該表中row_idx行的單元格序列。
rows
包含此表中的行序列的_Rows實例。
style
讀/寫。表示應用於該表的樣式的 _TableStyle對象。如果表沒有直接應用的樣式,則返回文檔的默認表樣式(通常是普通表)。將None賦給此屬性會刪除任何直接應用的表樣式,導致它繼承文檔的默認表樣式。注意,表樣式的樣式名稱與用戶界面中顯示的樣式略有不同;連字符,如果出現,必須刪除。
table_direction
WD_TABLE_DIRECTION中的一個成員,指示表單元格排列的方向,例如 WD_TABLE_DIRECTION.LTR。沒有一個表示值是從樣式層次結構繼承的。
 

_Cell對象

class docx.table._Cell(tc, parent)

表格里的單元格

add_paragraph(text=u'', style=None)
返回在單元格中內容末尾新添加的段落。如果出現,文本將在一次運行中添加到段落中。如果指定,則應用段落樣式。如果沒有指定或沒有指定樣式,結果就好像應用了“普通”樣式。注意,單元格中的文本格式可能會受到表樣式的影響。文本可以包含制表符(\t)字符,這些字符被轉換為制表符的適當XML格式。文本還可以包括換行符(\n)或回車符(\r),每個換行符都被轉換為換行符。
add_table(rows, cols)
在現有單元格內容之后返回新添加到此單元格的表,其中包含行rows和cols列。在表后添加一個空段落,因為Word需要段落元素作為每個單元格中的最后一個元素。
merge(other_cell)
返回一個合並的單元格,該單元格是通過將此單元格和other_cell作為對角線跨越矩形區域而創建的。如果單元格沒有定義一個矩形區域,就會引發 InvalidSpanError
paragraphs
單元格中的段落列表。表單元格需要包含至少一個塊級元素並以段落結尾。默認情況下,新單元格包含一個段落。只讀
tables
單元格中的段落列表。表單元格需要包含至少一個塊級元素並以段落結尾。默認情況下,新單元格包含一個段落。只讀。
text
這個單元格的整個內容作為一個文本字符串。將字符串賦給此屬性將所有現有內容替換為在一次運行中包含指定文本的單個段落。
vertical_alignment
WD_CELL_VERTICAL_ALIGNMENT或 None。 
None值表示該單元格的垂直對齊是繼承的。分配None會導致刪除任何明確定義的垂直對齊,從而恢復繼承。

width 
在EMU中設置此單元格的寬度,如果沒有設置顯式寬度,則為None。

 

_Row對象

class docx.table._Row(tr, parent)

表格的行

cells
與這一行中的單元格對應的 _Cell實例序列。
height
返回一個表示單元格高度的 Length對象,如果沒有設置顯式高度,則返回 None
height_rule
作為 WD_ROW_HEIGHT_RULE枚舉的成員返回該單元格的高度規則,如果沒有設置顯式的 height_rule,則返回 None
table
引用這一行所屬的表對象。
 

_Column objects

class docx.table._Column(gridCol, parent)

表格的列

cells
與此列中的單元格對應的 _Cell實例序列。
table
引用此列所屬的表對象。
width
在EMU中設置此列的寬度,如果沒有設置顯式寬度,則為 None
 

_Rows 對象

class docx.table._Rows(tbl, parent

與表中的行對應的_Row對象序列。支持len()、迭代、索引訪問和切片。

table
引用此行集合所屬的 Table對象
 

_Columns 對象

class docx.table._Columns(tbl, parent)
與表中的列相對應的_Column實例序列。支持len()、迭代和索引訪問。 
table 
: 引用此列集合所屬的 Table對象。
 

章節對象

提供對部分屬性(如頁邊距和頁面方向)的訪問。

 

Sections對象

class docx.section.Sections(document_elm)
與文檔中的節相對應的節對象序列。支持len()、迭代和索引訪問。
 

Section對象

class docx.section.Section(sectPr)

文檔部分,提供對部分和頁面設置設置的訪問。

bottom_margin
Length對象,表示本節中所有頁的底部空白,單位為英文公制單位。
footer_distance
Length對象,表示從頁面底部邊緣到頁腳底部邊緣的距離。如果XML中沒有設置,則為None。
gutter
Length對象,表示本節中所有頁的頁槽大小(以英文公制單位表示)。頁邊距是在內頁邊距上增加的額外間距,以確保頁邊距均勻。
header_distance
Length對象,表示從頁面頂部邊緣到頁眉頂部邊緣的距離。如果XML中沒有設置,則為 None
left_margin
Length對象,表示本節中所有頁的左邊空白處,單位為英文公制單位。
orientation
指定此部分的頁面方向的 WD_ORIENTATION成員,是 WD_ORIENT.PORTRAITWD_ORIENT.LANDSCAPE
page_height
本節使用的總頁面高度,包括所有的邊緣間距值,如頁邊距。考慮到頁面方向,例如,當方向是橫向的時候,它的預期值是英寸(8.5)。
page_width
本節使用的總頁面寬度,包括所有的邊間距值,如邊距。考慮到頁面方向,例如,當方向是橫向時,字體大小的紙張的預期值為英寸(11)。
right_margin
Length對象,表示本節中所有頁的右邊距,單位為英文公制單位。
start_type
WD_SECTION_START枚舉的成員對應於此部分的初始中斷行為,例如 WD_SECTION。如果部分應該從下一個奇數頁開始,則為奇數頁。
top_margin
Length對象,表示本節中所有頁的頂部空白,單位為英文公制單位。
 
 

InlineShapes 對象

class docx.shape.InlineShapes(body_elm, parent)
InlineShape實例序列,支持len()、迭代和索引訪問。
 
InlineShape 對象

InlineShapewidthheight屬性提供了一個length對象,它是length的實例。這些實例的行為像int,但也有內置單元轉換屬性,例如:

  1. >>> inline_shape.height
  2. 914400
  3. >>> inline_shape.height.inches
  4. 1.0
class docx.shape.InlineShape(inline)

一個元素的代理,表示一個內聯圖形對象的容器

height
讀/寫。這個內聯形狀作為Emu實例的顯示高度。
type
此內聯圖形作為 docx.enum.shape.WD_INLINE_SHAP枚舉的成員,例如 LINKED_PICTURE,只讀。
width
讀/寫。這個內聯形狀作為Emu實例的顯示寬度。
 

DrawingML 對象

低級的繪圖元素,如出現在各種文檔上下文中的顏色。

 

ColorFormat對象

class docx.dml.color.ColorFormat

提供對顏色設置的訪問,例如RGB顏色、主題顏色和亮度調整。

rgb
如果沒有指定RGB顏色,則為RGBColor值或 None。 
type為MSO_COLOR_TYPE.RGB時,這個屬性的值總是一個RGBColor值。如果 typeMSO_COLOR_TYPE.THEME,它也可能是 RGBColor值。就像Word在指定主題顏色時寫入當前值一樣。在這種情況下,RGB值應該被解釋為僅僅是一個好的猜測,因為主題顏色在呈現時優先。當 typeNoneMSO_COLOR_TYPE.AUTO時,其值為 None。 
指定 RGBColor值yiji將使 type變為 MSO_COLOR_TYPE.RGB。分配`None``會導致沒有任何顏色,從而從樣式層次結構繼承有效顏色。
theme_color
MSO_THEME_COLOR_INDEX的成員,如果沒有指定主題顏色,則為 None。當 typeMSO_COLOR_TYPE.THEME時。這個屬性的值總是MSO_THEME_COLOR_INDEX的成員。當類型有任何其他值時,此屬性的值為None。 
分配 MSO_THEME_COLOR_INDEX的成員會使 type變成MSO_COLOR_TYPE.THEME。任何現有的RGB值都被保留,但被Word忽略。分配None會導致刪除所有顏色規范,從而從樣式層次結構繼承有效的顏色。
type
只讀的。MSO_COLOR_TYPE (RGB、THEME或AUTO中的一個)的成員,對應於該顏色的定義方式。如果在此級別沒有應用顏色,則其值為 None,這將導致有效顏色從樣式層次結構繼承。
 

Shared classes

 

Length 對象

python-docx中的長度值表示為標准長度值對象。Length是int的子類,具有int的所有行為。

 
  1. >>> inline_shape.height
  2. 914400
  3. >>> inline_shape.height.inches
  4. 1.0
Length對象是使用一系列方便的構造函數來構造的,允許在最適合上下文的單元中表示值。
class docx.shared.Length

長度構造函數類的基類:英寸、厘米、毫米、Px和Emu。作為英制公制單位的int計數,914,400到英寸,36,000到毫米。以只讀屬性的形式提供方便的單位轉換方法。不可變的。

cm
以厘米表示的等效長度(浮點數)。
emu
用英制單位(int)表示的等效長度。
inches
以英寸表示的等效長度(浮點數)。
mm
以毫米表示的等效長度(浮點數)。
pt
浮點數的長度
twips
以twips (int)表示的等效長度。
class docx.shared.Inches
長度(英寸)的構造函數,例如 width = Inches(0.5)
class docx.shared.Cm
方便的構造函數長度以厘米為單位,例如: height = Cm(12)
class docx.shared.Mm
長度單位為毫米的方便構造函數,例如 width = Mm(240.5)
class docx.shared.Pt
用於在點中指定長度的類
class docx.shared.Twips
長度的方便構造函數,例如 width = Twips(42)。twip是0.20,635 EMU。
class docx.shared.Emu
長度的構造函數,用英文公制單位表示,例如 width = Emu(457200)
 

RGBColor 對象

class docx.shared.RGBColor(r, g, b)

定義特定RGB顏色的不可變值對象。、 
r、g和b都是0-255范圍內的整數。使用h十六進制表示法(例如0x42)可以增強可讀性,在使用十六進制RGB值時:

  1. >>> lavender = RGBColor(0xff, 0x99, 0xcc)

類方法:from_string(rgb_hex_str) 
從RGB顏色十六進制字符串返回一個新實例,比如'3C2F80'

 

枚舉量

在這里可以找到用於python-docx屬性設置的各種枚舉文檔:

MSO_COLOR_TYPE

指定顏色規格方案 
例子:

  1. from docx.enum.dml import MSO_COLOR_TYPE
  2. assert font.color.type == MSO_COLOR_TYPE.THEME
RGB
顏色由RGBColor值指定。
THEME
顏色是預設的主題顏色之一。
AUTO
顏色是自動確定的應用程序。
MSO_THEME_COLOR_INDEX

表示Office主題顏色,即格式色帶上的顏色畫廊中顯示的顏色之一。 
別名:MSO_THEME_COLOR 
實例:

  1. from docx.enum.dml import MSO_THEME_COLOR
  2. font.color.theme_color = MSO_THEME_COLOR.ACCENT_1
NOT_THEME_COLOR
表示沒有主題顏色
ACCENT_1
指定ACCENT_1為主題顏色。
ACCENT_2
指定ACCENT_2為主題顏色。
ACCENT_3
指定ACCENT_3為主題顏色。
ACCENT_4
指定ACCENT_4為主題顏色。
ACCENT_5
指定ACCENT_5為主題顏色。
ACCENT_6
指定ACCENT_6為主題顏色。
BACKGROUND_1
指定背景1的主題顏色。
BACKGROUND_1
指定背景2的主題顏色。
DARK_1
指定Drak1為主題顏色.
DRAK_2
指定Drak2為主題顏色
FOLLOWED_HYPERLINK
指定被單擊超鏈接的主題顏色。
HYPERLINK
指定超鏈接的主題顏色。
LIGHT_1
指定Light 1主題顏色。
LIGHT_2
指定Light 2主題顏色。
TEXT_1
指定文本1的主題顏色。
TEXT_2
指定文本2的主題顏色。
MIXED
表示使用了多種主題顏色。
WD_PARAGRAPH_ALIGNMENT

別名:WD_ALIGN_PARAGRAPH 
指定段落對齊類型。 
例子:

  1. from docx.enum.text import WD_ALIGN_PARAGRAPH
  2. paragraph = document.add_paragraph()
  3. paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
LEFT
左對齊
CENTER
居中
RIGHT
右對齊。
JUSTIFY
DISTRIBUTE
段落字符被分配以填充整個段落的寬度。
JUSTIFY_MED
用中等字符壓縮比證明。
JUSTIFY_HI
具有高字符壓縮比。
JUSTIFY_LOW
用低字符壓縮比證明。
THAI_JUSTIFY
根據泰國格式布局對齊。
WD_BUILTIN_STYLE

alias: WD_STYLE 
指定內置的Microsoft Word樣式。 
例子:

  1. from docx import Document
  2. from docx.enum.style import WD_STYLE
  3. document = Document()
  4. styles = document.styles
  5. style = styles[WD_STYLE.BODY_TEXT]
BLOCK_QUOTATION
塊文本
BODY_TEXT
主體文本
BODY_TEXT_2
主體文本2
BODY_TEXT_3
主體文本3
BODY_TEXT_FIRST_INDENT
正文文本首行縮進
BODY_TEXT_FIRST_INDENT_2
正文文本首行縮進
BODY_TEXT_INDENT
正文文本縮進
BODY_TEXT_INDENT_2
正文文本縮進2
BODY_TEXT_INDENT_3
正文文本縮進3
BOOK_TITLE
文章名
CAPTION
標題
CLOSING
關閉
COMMENT_REFERENCE
評論參考
COMMENT_TEXT
批注文本。
DATE
日期
DEFAULT_PARAGRAPH_FONT
默認段落字體。
EMPHASIS
強調
ENDNOTE_REFERENCE
尾注引用。
ENDNOTE_TEXT
尾注的文本。
ENVELOPE_ADDRESS
信封地址。
ENVELOPE_RETURN
返回一個信封對象
FOOTER
頁腳。
FOOTNOTE_REFERENCE
腳注引用
FOOTNOTE_TEXT
腳注文本
HEADER
HEADING_1
標題1。
HEADING_2
標題2。
HEADING_3
標題3。
HEADING_4
標題4。
HEADING_5
標題5
HEADING_6
標題6
HEADING_7
標題7
HEADING_8
標題8
HEADING_9
標題9
HTML_ACRONYM
HTML縮略詞。
HTML_ADDRESS
HTML的地址。
HTML_CITE
HTML引用。
HTML_CODE
HTML代碼
HTML_DFN
HTML定義。
HTML_KBD
HTML 快捷鍵。
HTML_NORMAL
正常(網絡)。
HTML_PRE
HTML格式化。
HTML_SAMP
HTML示例。
HTML_TT
HTML字體。
HTML_VAR
HTML變量。
HYPERLINK
超鏈接
HYPERLINK_FOLLOWED
跟蹤超鏈接
INDEX_1
目錄1
INDEX_2
目錄2
INDEX_3
目錄3
INDEX_4
目錄4
INDEX_5
目錄5
INDEX_6
目錄6
INDEX_7
目錄7
INDEX_8
目錄8
INDEX_9
目錄9
INDEX_HEADING
目錄標題
INTENSE_EMPHASIS
強烈的強調。
INTENSE_QUOTE
強調引用。
INTENSE_REFERENCE
強調的參考。
LINE_NUMBER
行號。
LIST
列表
LIST_2
列表2
LIST_3
列表3
LIST_4
列表4
LIST_5
列表5
LIST_BULLET
符號列表
LIST_BULLET_2
符號列表2
LIST_BULLET_3
符號列表3
LIST_BULLET_4
符號列表4
LIST_BULLET_5
符號列表5
LIST_CONTINUE
List Continue.
LIST_CONTINUE_2
List Continue 2.
LIST_CONTINUE_3
List Continue 3.
LIST_CONTINUE_4
List Continue 4.
LIST_CONTINUE_5
List Continue 5.
LIST_NUMBER
List Number.
LIST_NUMBER_2
List Number 2.
LIST_NUMBER_3
List Number 3.
LIST_NUMBER_4
List Number 4.
LIST_NUMBER_5
List Number 5.
LIST_PARAGRAPH
List 段落
MACRO_TEXT
宏觀文本
MESSAGE_HEADER
消息標題
NAV_PANE
Document Map.
NORMAL
正常
NORMAL_INDENT
正常縮進
NORMAL_OBJECT
正常對象
NORMAL_TABLE
普通(應用於表中)。
NOTE_HEADING
請注意標題。
PAGE_NUMBER
頁碼。
PLAIN_TEXT
純文本。
QUOTE
引用
SALUTATION
問候。
SIGNATURE
簽名。
STRONG
強大。
SUBTITLE
副標題。
SUBTLE_EMPHASIS
次要重點
SUBTLE_REFERENCE
次要參考
TABLE_COLORFUL_GRID
多色彩網格邊框
TABLE_COLORFUL_LIST
多色彩列表
TABLE_COLORFUL_SHADING
彩色的陰影。
TABLE_DARK_LIST
暗色列表
TABLE_LIGHT_GRID
亮色表格邊框
TABLE_LIGHT_GRID_ACCENT_1
光網格重音1。
TABLE_LIGHT_LIST
亮色表格
TABLE_LIGHT_LIST_ACCENT_1
Light List Accent 1.
TABLE_LIGHT_SHADING
光的陰影。
TABLE_LIGHT_SHADING_ACCENT_1
淺陰影重音1。
TABLE_MEDIUM_GRID_1
中等寬度邊框。
TABLE_MEDIUM_GRID_2
中等寬度邊框2
TABLE_MEDIUM_GRID_3
中等寬度邊框3
TABLE_MEDIUM_LIST_1
中等寬度表格列表1所示。
TABLE_MEDIUM_LIST_1_ACCENT_1
Medium List 1 Accent 1.
TABLE_MEDIUM_LIST_2
中等 List 2.
TABLE_MEDIUM_SHADING_1
Medium Shading 1.
TABLE_MEDIUM_SHADING_1_ACCENT_1
Medium Shading 1 Accent 1.
TABLE_MEDIUM_SHADING_2
Medium Shading 2.
TABLE_MEDIUM_SHADING_2_ACCENT_1
Medium Shading 2 Accent 1.
TABLE_OF_AUTHORITIES
Table of Authorities.
TABLE_OF_FIGURES
數據表
TITLE
題目
TOAHEADING
TOA標題。
TOC_1
TOC 1.
TOC_2
TOC 2.
TOC_3
TOC 3.
TOC_4
TOC 4.
TOC_5
TOC 5.
TOC_6
TOC 6.
TOC_7
TOC 7.
TOC_8
TOC 8.
TOC_9
TOC 9.
WD_CELL_VERTICAL_ALIGNMENT

別名:WD_ALIGN_VERTICAL 
指定表的一個或多個單元格中文本的垂直對齊方式。 
實例:

  1. from docx.enum.table import WD_ALIGN_VERTICAL
  2. table = document.add_table(3, 3)
  3. table.cell(0, 0).vertical_alignment = WD_ALIGN_VERTICAL.BOTTOM
TOP
文本對齊到單元格的頂部邊框。
CENTER
文本對齊單元格的中心。
BOTTOM
文本對齊單元格的底部。
BOTH
這是OpenXml規范中的一個選項,但不是Word本身。目前還不清楚這種設置會產生什么樣的文字行為。如果你發現了請讓我們知道,我們將更新這個文件。否則,最好避免這種選擇。
WD_COLOR_INDEX

別名:WD_COLOR 
指定要應用的標准預設顏色。用於字體高亮顯示和其他應用程序。

AUTO
自動顏色,默認通常是黑色。
BLACK
黑色
BRIGHT_GREEN
亮綠色
DARK_BLUE
暗藍色
DARK_RED
暗紅色
DARK_YELLOW
暗黃色
GRAY_25
25%深淺的灰色。
GRAY_50
50%深淺的灰色。
GREEN
綠色
PINK
粉色。
RED
紅色。
TEAL
Teal顏色。
TURQUOISE
湖色 color。
VIOLET
紫羅蘭色的。
WHITE
白色。
YELLOW
黃色。
WD_LINE_SPACING

指定要應用於段落的行間距格式。 
實例:

  1. from docx.enum.text import WD_LINE_SPACING
  2. paragraph = document.add_paragraph()
  3. paragraph.line_spacing_rule = WD_LINE_SPACING.EXACTLY
ONE_POINT_FIVE
Space-and-a-half行間距。
AT_LEAST
行間距總是至少指定的數量。金額是單獨指定的。
DOUBLE
雙倍空格。
EXACTLY
行間距正好是規定的量。金額是單獨指定的。
MULTIPLE
線間距指定為線高的倍數。改變字體大小會相應地改變行距。
SINGLE
單一的間隔(默認)。
WD_ORIENTATION

別名: WD_ORIENT 
指定頁面方向: 
實例:

  1. from docx.enum.section import WD_ORIENT
  2. section = document.sections[-1]
  3. section.orientation = WD_ORIENT.LANDSCAPE
PORTRAIT
縱向
LANDSCAPE
橫向。
WD_TABLE_ALIGNMENT

指定表對齊類型 
實例:

  1. from docx.enum.table import WD_TABLE_ALIGNMENT
  2. table = document.add_table(3, 3)
  3. table.alignment = WD_TABLE_ALIGNMENT.CENTER
LEFT
左對齊
CENTER
中間對齊
RIGHT
右對齊
WD_ROW_HEIGHT_RULE
別名:WD_ROW_HEIGHT 
指定確定表行高度的規則 
實例:
 
  1. from docx.enum.table import WD_ROW_HEIGHT_RULE
  2. table = document.add_table(3, 3)
  3. table.rows[0].height_rule = WD_ROW_HEIGHT_RULE.EXACTLY
AUTO
:    調整行高度以適應行的最高值。

AT_LEAST
:   行高度至少是指定的最小值。

EXACTLY
:   行高度是一個精確的值。
WD_SECTION_START

別名:WD_SECTION指定段中斷的開始類型。 
實例:

  1. from docx.enum.section import WD_SECTION
  2. section = document.sections[0]
  3. section.start_type = WD_SECTION.NEW_PAG
CONTINUOUS
連續的部分。
NEW_COLUMN
新的列中斷。
NEW_PAGE
新頁段中斷。
EVEN_PAGE
偶數頁分段。
ODD_PAGE
新章節從下一頁開始
WD_STYLE_TYPE

指定四種樣式類型之一:段落、字符、列表或表。 
實例:

  1. from docx import Document
  2. from docx.enum.style import WD_STYLE_TYPE
  3. styles = Document().styles
  4. assert styles[0].type == WD_STYLE_TYPE.PARAGRAPH
CHARACTER
字符樣式。
LIST
列表樣式
PARAGRAPH
段落樣式
TABLE
表樣式
WD_TAB_ALIGNMENT
指定要應用的制表符對齊方式。
LEFT
左對齊
CENTER
中心對齊
RIGHT
右對齊
DECIMAL
Decimal-aligned.
BAR
Bar-aligned.
LIST
List-aligned. (deprecated)
CLEAR
清除繼承的制表符.
END
右對齊 (棄用)
NUM
左對齊 (棄用)
START
左對齊. (棄用)
WD_TAB_LEADER

指定要用作帶格式化選項卡的標題的字符。

SPACES
默認空格
DOTS
DASHES
破折號。
LINES
雙行
HEAVY
一個加粗線。
MIDDLE_DOT
垂直。
WD_TABLE_DIRECTION

指定應用程序在指定表或行中對單元格進行排序的方向。 
實例:

  1. from docx.enum.table import WD_TABLE_DIRECTION
  2. table = document.add_table(3, 3)
  3. table.direction = WD_TABLE_DIRECTION.RTL
LTR
表或行與第一列排列在最左邊的位置。
RTL
表或行與第一列排列在最右邊的位置。
WD_UNDERLINE

指定應用於一系列字符的下划線的樣式

NOTE
沒有下划線。此設置覆蓋所有繼承的下划線值,因此可用於從從其包含段落中繼承下划線的運行中刪除下划線。注意,這與為Run.underline分配 None不一樣。 None是一個有效的賦值,但會導致運行繼承其下划線值。分配WD_UNDERLINE。沒有人會無條件地關閉下划線。
SINGL
一行。注意,此設置是只寫的,因為在運行時使用此設置會返回 True(而不是WD_UNDERLINE.SINGLE)。
WORDS
只在單個字下面加划線。
DOUBLE
一個雙下划線
DOTTED
THICK
一個單行細線
DASH
破折號
DOT_DASH
交替點和破折號。
DOT_DOT_DASH
一種交替的點-點-划模式。
WAVY
一條波浪線。
DOTTED_HEAVY
加粗的點。
DASH_HEAVY
加粗的破折號。
DOT_DASH_HEAVY
交替使用加粗點和加粗線。
DOT_DOT_DASH_HEAVY
一種交替的重點-點-划模式。
WAVY_HEAVY
一條加粗的波浪線。
DASH_LONG
長破折號。
WAVY_DOUBLE
雙波浪線。
DASH_LONG_HEAVY
長加粗破折號。
 

python-docx源代碼

 
    1. # encoding: utf-8
    2. """
    3. |Document| and closely related objects
    4. """
    5. from __future__ import (
    6. absolute_import, division, print_function, unicode_literals
    7. )
    8. from .blkcntnr import BlockItemContainer
    9. from .enum.section import WD_SECTION
    10. from .enum.text import WD_BREAK
    11. from .section import Section, Sections
    12. from .shared import ElementProxy, Emu
    13. [docs]
    14. class Document(ElementProxy):
    15. """
    16. WordprocessingML (WML) document. Not intended to be constructed directly.
    17. Use :func:`docx.Document` to open or create a document.
    18. """
    19. __slots__ = ('_part', '__body')
    20. def __init__(self, element, part):
    21. super(Document, self).__init__(element)
    22. self._part = part
    23. self.__body = None
    24. [docs]
    25. def add_heading(self, text='', level=1):
    26. """
    27. Return a heading paragraph newly added to the end of the document,
    28. containing *text* and having its paragraph style determined by
    29. *level*. If *level* is 0, the style is set to `Title`. If *level* is
    30. 1 (or omitted), `Heading 1` is used. Otherwise the style is set to
    31. `Heading {level}`. Raises |ValueError| if *level* is outside the
    32. range 0-9.
    33. """
    34. if not 0 <= level <= 9:
    35. raise ValueError("level must be in range 0-9, got %d" % level)
    36. style = 'Title' if level == 0 else 'Heading %d' % level
    37. return self.add_paragraph(text, style)
    38. [docs]
    39. def add_page_break(self):
    40. """
    41. Return a paragraph newly added to the end of the document and
    42. containing only a page break.
    43. """
    44. paragraph = self.add_paragraph()
    45. paragraph.add_run().add_break(WD_BREAK.PAGE)
    46. return paragraph
    47. [docs]
    48. def add_paragraph(self, text='', style=None):
    49. """
    50. Return a paragraph newly added to the end of the document, populated
    51. with *text* and having paragraph style *style*. *text* can contain
    52. tab (``\\t``) characters, which are converted to the appropriate XML
    53. form for a tab. *text* can also include newline (``\\n``) or carriage
    54. return (``\\r``) characters, each of which is converted to a line
    55. break.
    56. """
    57. return self._body.add_paragraph(text, style)
    58. [docs]
    59. def add_picture(self, image_path_or_stream, width=None, height=None):
    60. """
    61. Return a new picture shape added in its own paragraph at the end of
    62. the document. The picture contains the image at
    63. *image_path_or_stream*, scaled based on *width* and *height*. If
    64. neither width nor height is specified, the picture appears at its
    65. native size. If only one is specified, it is used to compute
    66. a scaling factor that is then applied to the unspecified dimension,
    67. preserving the aspect ratio of the image. The native size of the
    68. picture is calculated using the dots-per-inch (dpi) value specified
    69. in the image file, defaulting to 72 dpi if no value is specified, as
    70. is often the case.
    71. """
    72. run = self.add_paragraph().add_run()
    73. return run.add_picture(image_path_or_stream, width, height)
    74. [docs]
    75. def add_section(self, start_type=WD_SECTION.NEW_PAGE):
    76. """
    77. Return a |Section| object representing a new section added at the end
    78. of the document. The optional *start_type* argument must be a member
    79. of the :ref:`WdSectionStart` enumeration, and defaults to
    80. ``WD_SECTION.NEW_PAGE`` if not provided.
    81. """
    82. new_sectPr = self._element.body.add_section_break()
    83. new_sectPr.start_type = start_type
    84. return Section(new_sectPr)
    85. [docs]
    86. def add_table(self, rows, cols, style=None):
    87. """
    88. Add a table having row and column counts of *rows* and *cols*
    89. respectively and table style of *style*. *style* may be a paragraph
    90. style object or a paragraph style name. If *style* is |None|, the
    91. table inherits the default table style of the document.
    92. """
    93. table = self._body.add_table(rows, cols, self._block_width)
    94. table.style = style
    95. return table
    96. @property
    97. def core_properties(self):
    98. """
    99. A |CoreProperties| object providing read/write access to the core
    100. properties of this document.
    101. """
    102. return self._part.core_properties
    103. @property
    104. def inline_shapes(self):
    105. """
    106. An |InlineShapes| object providing access to the inline shapes in
    107. this document. An inline shape is a graphical object, such as
    108. a picture, contained in a run of text and behaving like a character
    109. glyph, being flowed like other text in a paragraph.
    110. """
    111. return self._part.inline_shapes
    112. @property
    113. def paragraphs(self):
    114. """
    115. A list of |Paragraph| instances corresponding to the paragraphs in
    116. the document, in document order. Note that paragraphs within revision
    117. marks such as ``<w:ins>`` or ``<w:del>`` do not appear in this list.
    118. """
    119. return self._body.paragraphs
    120. @property
    121. def part(self):
    122. """
    123. The |DocumentPart| object of this document.
    124. """
    125. return self._part
    126. [docs]
    127. def save(self, path_or_stream):
    128. """
    129. Save this document to *path_or_stream*, which can be either a path to
    130. a filesystem location (a string) or a file-like object.
    131. """
    132. self._part.save(path_or_stream)
    133. @property
    134. def sections(self):
    135. """
    136. A |Sections| object providing access to each section in this
    137. document.
    138. """
    139. return Sections(self._element)
    140. @property
    141. def settings(self):
    142. """
    143. A |Settings| object providing access to the document-level settings
    144. for this document.
    145. """
    146. return self._part.settings
    147. @property
    148. def styles(self):
    149. """
    150. A |Styles| object providing access to the styles in this document.
    151. """
    152. return self._part.styles
    153. @property
    154. def tables(self):
    155. """
    156. A list of |Table| instances corresponding to the tables in the
    157. document, in document order. Note that only tables appearing at the
    158. top level of the document appear in this list; a table nested inside
    159. a table cell does not appear. A table within revision marks such as
    160. ``<w:ins>`` or ``<w:del>`` will also not appear in the list.
    161. """
    162. return self._body.tables
    163. @property
    164. def _block_width(self):
    165. """
    166. Return a |Length| object specifying the width of available "writing"
    167. space between the margins of the last section of this document.
    168. """
    169. section = self.sections[-1]
    170. return Emu(
    171. section.page_width - section.left_margin - section.right_margin
    172. )
    173. @property
    174. def _body(self):
    175. """
    176. The |_Body| instance containing the content for this document.
    177. """
    178. if self.__body is None:
    179. self.__body = _Body(self._element.body, self)
    180. return self.__body
    181. class _Body(BlockItemContainer):
    182. """
    183. Proxy for ``<w:body>`` element in this document, having primarily a
    184. container role.
    185. """
    186. def __init__(self, body_elm, parent):
    187. super(_Body, self).__init__(body_elm, parent)
    188. self._body = body_elm
    189. def clear_content(self):
    190. """
    191. Return this |_Body| instance after clearing it of all content.
    192. Section properties for the main document story, if present, are
    193. preserved.
    194. """
    195. self._body.clear_content()
    196. return self


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM