python-docx 使用教程

快速入門

入門python-docx很容易。讓咱們來看一下基礎知識。html

官方文檔地址請點擊python

打開文檔

你須要的第一件事是工做的文檔。最簡單的方法是:數據庫

from docx import Document

document = Document()

這將打開一個基於默認「模板」的空白文檔,您能夠打開並使用現有的Word文檔的工做python-docx,咱們會讓事情變得簡單。api

 

增長一段

段落是Word的基礎。它們用於正文文本,但也用於標題和列表項目(如項目符號)。網絡

這裏是添加一個最簡單的方法:字體

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

此方法返回對段落的引用,新添加的段落在文檔的結尾。新的段落引用被分配給paragraph 在這種狀況下,我將要離開了這一點在下面的例子中,除非我有一個須要它。在你的代碼中,一般你不會對項目作任何事情,在添加它,因此沒有什麼意義,保持引用它掛在周圍。ui

還可使用一個段落做爲「光標」,並在其上直接插入一個新段落:spa

prior_paragraph = paragraph.insert_paragraph_before('Lorem ipsum')

這容許將一個段落插入到文檔的中間,這在修改現有文檔時一般很重要,而不是從頭開始生成。code

 

添加標題

在除了最短文檔以外的任何內容中,正文文本被分紅多個部分,每一個部分以一個標題開始。如下是如何添加一個:orm

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

默認狀況下,這會添加頂級標題,Word中顯示爲「標題1」。當您須要子節的標題時,只需指定所需的級別爲1到9之間的整數:

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

若是指定級別0,將添加「標題」段落。這能夠方便地啓動一個相對較短的文檔,沒有單獨的標題頁。

 

添加分頁符

每隔一段時間,你想要下一個文本在一個單獨的頁面,即便你所在的一個不是滿的。「hard」分頁符能夠作到這一點:

document.add_page_break()

若是你發現本身常用它,這多是一個標誌,你能夠經過更好地瞭解段落樣式受益。可設置的一個段落樣式屬性是在包含該樣式的每一個段落以前當即斷開頁面。所以,您能夠將標題設置爲某個級別,以便始終啓動新頁面。更多風格後。它們對於真正充分利用Word相當重要。

 

添加表

一個常常遇到的內容,它本身的表格呈現,排列在整齊的行和列。Word在這方面作得至關不錯。如下是添加表格的方法:

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

表具備幾個屬性和方法,您將須要它們來填充它們。訪問單個單元格多是一個好的開始的地方。做爲基線,您能夠始終按其行和列指示訪問單元格:

cell = table.cell(0, 1)

這就給出了咱們剛剛建立的表格最上面一行的右邊單元格。注意,行和列指示是基於零的,就像在列表訪問中同樣。

一旦你有一個單元格,你能夠把東西在它:

cell.text = 'parrot, possibly dead'

一般,一次訪問一行單元格更容易,例如,當從數據源填充可變長度的表時。在.rows 一個表中的屬性提供給單獨的行,每一個都具備一個 .cells屬性。該.cells兩個物業RowColumn 支持索引訪問,就像一個列表:

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

.rows.columns桌子上的集合是可迭代的,這樣你就能夠直接在使用它們for循環。相同的.cells上行或列序列:

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

若是你想在表中的行或列的計數,只要使用len()的順序:

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

您還能夠以遞增方式向表中添加行,以下所示:

row = table.add_row()

這對於咱們上面提到的可變長度表場景很是方便:

# get table data -------------
items = get_things_from_database_or_something()

# add table ------------------
table = document.add_table(1, 3)

# populate header row --------
heading_cells = table.rows[0].cells
heading_cells[0].text = 'Qty'
heading_cells[1].text = 'SKU'
heading_cells[2].text = 'Description'

# add a data row for each item
for item in items:
    cells = table.add_row().cells
    cells[0].text = str(item.qty)
    cells[1].text = item.sku
    cells[2].text = item.desc

一樣的工做對列,雖然我尚未看到它的一個用例。

Word具備一組預格式化的表格樣式,您能夠從其表格樣式庫中選擇。您能夠將其中的一個應用於表格,以下所示:

table.style = 'LightShading-Accent1'

經過從表樣式名稱中刪除全部空格造成樣式名稱。經過將鼠標懸停在Word的表樣式庫中的縮略圖上,能夠找到表樣式名稱。

 

添加圖片

Word中,您能夠將圖像使用的文檔中的菜單項。如下是如何作到這一點的:Insert Photo Picture fromfile...python-docx

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

此示例使用路徑,從本地文件系統加載圖像文件。你也可使用一個類文件對象,本質上就像一個打開的文件的任何對象。若是您從數據庫或網絡檢索圖像,而且不想獲取涉及的文件系統,這可能很方便。

圖像大小

默認狀況下,添加圖像出如今本地的大小。這一般比你想要的更大。本機大小的計算方法。所以,具備300dpi分辨率的300×300像素圖像出如今一平方英寸。問題是大多數圖像不包含dpi屬性,它默認爲72 dpi。這將使同一圖像在一邊,在一半左右的某處出現4.167英寸。pixels dpi

要得到所需的圖像大小,您能夠以方便的單位指定其寬度或高度,如英寸或釐米:

from docx.shared import Inches

document.add_picture('image-filename.png', width=Inches(1.0))

你能夠自由地指定寬度和高度,但一般你不想要。若是僅指定一個,python-docx用它來計算出其餘的適當換算值。這樣的高寬比是保留的,你的圖像看起來不拉伸。

InchesCm提供課程,讓你指定派上用場單位進行測量。在內部,python-docx使用英語公制單位,914400爲英寸。因此,若是你忘記了,只是把喜歡的東西width=2,你會獲得一個很是小的圖像:)。你須要從導入docx.shared 子包。你能夠在算術中使用它們,就像它們是一個整數,事實上它們是。所以,像一個表達式的做品就行了。width Inches(3) /thing_count

 

應用段落樣式

若是你不知道一個Word段落風格是你應該確定檢查出來。基本上,它容許您將一整套格式化選項當即應用到段落。這很像CSS樣式,若是你知道那些是。

您能夠在建立段落時應用段落樣式:

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

這種特殊的風格致使段落顯示爲一個子彈,一個很是方便的東西。您也能夠在以後應用樣式。這兩行至關於上面的一行:

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

在此示例中,樣式使用其樣式ID「ListBullet」指定。一般,經過去除樣式名稱中出如今Word用戶界面(UI)中的空格來造成樣式ID。因此風格'列表3號'將被指定爲'ListNumber3'。可是,請注意,若是您使用的是本地化版本的Word,則樣式ID可能來自英語樣式名稱,而且可能不會徹底對應於其在Word UI中的樣式名稱。

 

應用粗體和斜體

爲了理解如何大膽和斜體的工做,你須要瞭解一個段落裏面發生了什麼。簡短的版本是這樣的:

  1. 一個段落包含全部的塊級格式,如縮進,行高,製表符,等等。
  2. 字符級格式,如粗體和斜體,都在應用的 運行水平。段落中的全部內容必須在一個運行中,但能夠有多個。所以,在中間有一個粗體字的段落須要三個段落,一個正常的段落,一個包含該單詞的粗體,以及另外一個正常的段落。

當您的提供文本添加段落.add_paragraph()的方法,它被放入一個單一的運行。您能夠添加更多的使用.add_run()上一段方法:

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

這將產生一個看起來像從單個字符串建立的段落。除非你看看XML,段落文本被分紅幾個部分並不明顯。注意第一個字符串末尾的尾部空格。您須要明確在運行的開始和結束位置出現的位置。它們不會在運行之間自動插入。期待被那一個被抓住幾回:)。

Run對象既有.bold.italic屬性,您能夠設置其值爲運行:

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

其產生的文字,看起來像這樣:'Lorem存有坐阿梅德。「

請注意,您能夠對結果集粗體或斜體正確的.add_run(),若是你不須要它爲別的:

paragraph.add_run('dolor').bold = True

# is equivalent to:

run = paragraph.add_run('dolor')
run.bold = True

# except you don't have a reference to `run` afterward

它不是必須提供的文字給.add_paragraph()方法。這可使你的代碼更簡單,若是你從創建段從運行反正:

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

  

應用字符樣式

除了段落樣式,其中指定一組段落級別設置,Word有字符樣式其指定一組運行級別設置。通常來講,您能夠將字符樣式視爲指定字體,包括其字體,大小,顏色,粗體,斜體等。

像段落樣式,字符樣式必須已經與你在打開的文檔中定義的Document()調用(參見 瞭解樣式)。

添加新運行時能夠指定字符樣式:

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

您還能夠在運行建立後將樣式應用於運行。此代碼產生的結果與上面的行相同:

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

與段落樣式同樣,經過刪除名稱中出如今Word UI中的空格造成樣式ID。因此風格'微妙強調'將被指定爲'SubtleEmphasis'。請注意,若是您使用的是本地化版本的Word,則樣式ID可能來自英語樣式名稱,而且可能不對應於其在Word UI中的樣式名稱。

document.add_page_break()本文爲博主原創文章,轉載請註明出處http://www.cnblogs.com/rencm/p/6285304.html
相關文章
相關標籤/搜索