快速入門
入門python-docx
很容易。讓我們看一下基礎知識。
打開文檔
您需要做的第一件事是處理文檔。最簡單的方法是這樣的:
from docx import Document document = Document()
這將打開一個基於默認“模板”的空白文檔,這幾乎是您在Word中使用內置默認值啟動新文檔時所獲得的。您可以使用來打開和處理現有的Word文檔python-docx
,但目前我們將使事情變得簡單。
增加一款
段落是Word的基礎。它們用於正文,也用於標題和項目符號(如項目符號)。
這是添加一個的最簡單方法:
paragraph = document.add_paragraph('Lorem ipsum dolor sit amet.')
此方法返回對段落的引用,該段落是在文檔末尾新添加的段落。paragraph
在這種情況下,將為新段落指定引用,但是除非需要,否則在以下示例中將省略該引用。在您的代碼中,添加項目后通常不會對它做任何事情,因此保留對該項目的引用沒有多大意義。
也可以將一個段落用作“光標”,並在其上方直接插入一個新段落:
prior_paragraph = paragraph.insert_paragraph_before('Lorem ipsum')
這樣可以將段落插入文檔的中間,這在修改現有文檔而不是從頭開始生成文檔時通常很重要。
添加標題
除最短的文檔外,正文均分為幾部分,每部分均以標題開頭。以下是添加方法:
document.add_heading('The REAL meaning of the universe')
默認情況下,這會添加一個頂級標題,在Word中顯示為“標題1”。當您想要一個小節的標題時,只需將所需的級別指定為1到9之間的整數即可:
document.add_heading('The role of dolphins', level=2)
如果將級別指定為0,則會添加“標題”段落。這可以方便地開始一個相對簡短的文檔,該文檔沒有單獨的標題頁。
添加分頁
即使您所在的頁面不完整,您偶爾也會希望接下來的文本顯示在單獨的頁面上。一個“硬”分頁符可以做到這一點:
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
兩個屬性Row
和Column
支持索引訪問,就像一個列表:
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 = ( (7, '1024', 'Plush kittens'), (3, '2042', 'Furbees'), (1, '1288', 'French Poodle Collars, Deluxe'), ) # 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 from file...
python-docx
document.add_picture('image-filename.png')
本示例使用路徑從本地文件系統加載圖像文件。您還可以使用類似文件的對象,基本上是任何行為類似於打開文件的對象。如果您要從數據庫或網絡中檢索映像並且不想涉及文件系統,這可能很方便。
圖像大小
默認情況下,添加的圖像以原始大小顯示。這通常比您想要的要大。原始大小計算為。因此,具有300 dpi分辨率的300x300像素圖像出現在一個平方英寸中。問題是大多數圖像不包含dpi屬性,默認為72 dpi。這樣一來,同一張圖像的一側就會出現4.167英寸,大約在頁面的一半左右。pixels / dpi
要獲得所需大小的圖像,可以以方便的單位(例如英寸或厘米)指定其寬度或高度:
from docx.shared import Inches document.add_picture('image-filename.png', width=Inches(1.0))
您可以自由指定寬度和高度,但是通常您不想這樣做。如果僅指定一個,則python-docx
使用它來計算另一個的正確縮放值。這樣一來,就可以保持寬高比,並且圖片看起來不會拉伸。
該Inches
和Cm
被提供的類,讓你指定派上用場單位測量。內部python-docx
使用英制公制914400英寸。因此,如果您忘記了,只是放一些類似的東西,width=2
您將得到一個非常小的圖像:)。您需要從docx.shared
子包中導入它們。您可以在算術中使用它們,就像它們是整數一樣,實際上它們是整數。因此,像這樣的表達式就可以了。width = Inches(3) / thing_count
應用段落樣式
如果您不知道Word段落樣式是什么,則一定要檢查一下。基本上,它允許您一次將整個格式設置集應用於一個段落。如果您知道CSS樣式,則很像CSS樣式。
您可以在創建段落時直接應用段落樣式:
document.add_paragraph('Lorem ipsum dolor sit amet.', style='ListBullet')
這種特殊的樣式使段落顯示為項目符號,非常方便。您也可以在以后應用樣式。這兩行等效於上面的那一行:
paragraph = document.add_paragraph('Lorem ipsum dolor sit amet.') paragraph.style = 'List Bullet'
在此示例中,使用樣式名稱“列表項目符號”指定樣式。通常,樣式名稱與在Word用戶界面(UI)中顯示的樣式名稱完全相同。
應用粗體和斜體
為了理解粗體和斜體的工作方式,您需要對段落中的內容有所了解。簡短的版本是這樣的:
- 段落包含所有塊級格式,例如縮進,行高,制表符等。
- 在運行級別應用字符級別的格式,例如粗體和斜體 。段落中的所有內容都必須在一行中,但可以有多個。因此,在中間有一個粗體字的段落將需要三個運行,一個普通的運行,一個包含該單詞的加粗運行,以及后面的文本的另一個正常運行。
通過向.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 ipsum dolor sit amet”。
請注意,.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中顯示的一樣。