轉載自
http://www.cnblogs.com/rencm/p/6285304.html
快速入門
入門python-docx
很容易。讓我們來看一下基礎知識。
打開文檔
你需要的第一件事是工作的文檔。最簡單的方法是:
1
2
3
|
from
docx
import
Document
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”。當您需要子節的標題時,只需指定所需的級別為1到9之間的整數:
1
|
document.add_heading(
'The role of dolphins'
, level
=
2
)
|
如果指定級別0,將添加“標題”段落。這可以方便地啟動一個相對較短的文檔,沒有單獨的標題頁。
添加分頁符
每隔一段時間,你想要下一個文本在一個單獨的頁面,即使你所在的一個不是滿的。“hard”分頁符可以做到這一點:
1
|
document.add_page_break()
|
如果你發現自己經常使用它,這可能是一個標志,你可以通過更好地了解段落樣式受益。可設置的一個段落樣式屬性是在包含該樣式的每個段落之前立即斷開頁面。因此,您可以將標題設置為某個級別,以便始終啟動新頁面。更多風格后。它們對於真正充分利用Word至關重要。
添加表
一個經常遇到的內容,它自己的表格呈現,排列在整齊的行和列。Word在這方面做得相當不錯。以下是添加表格的方法:
1
|
table
=
document.add_table(rows
=
2
, cols
=
2
)
|
表具有幾個屬性和方法,您將需要它們來填充它們。訪問單個單元格可能是一個好的開始的地方。作為基線,您可以始終按其行和列指示訪問單元格:
1
|
cell
=
table.cell(
0
,
1
)
|
這就給出了我們剛剛創建的表格最上面一行的右邊單元格。注意,行和列指示是基於零的,就像在列表訪問中一樣。
一旦你有一個單元格,你可以把東西在它:
1
|
cell.text
=
'parrot, possibly dead'
|
通常,一次訪問一行單元格更容易,例如,當從數據源填充可變長度的表時。在.rows
一個表中的屬性提供給單獨的行,每個都具有一個 .cells
屬性。該.cells
兩個物業Row
和Column
支持索引訪問,就像一個列表:
1
2
3
|
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
上行或列序列:
1
2
3
|
for
row
in
table.rows:
for
cell
in
row.cells:
print
(cell.text)
|
如果你想在表中的行或列的計數,只要使用len()
的順序:
1
2
|
row_count
=
len
(table.rows)
col_count
=
len
(table.columns)
|
您還可以以遞增方式向表中添加行,如下所示:
1
|
row
=
table.add_row()
|
這對於我們上面提到的可變長度表場景非常方便:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 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具有一組預格式化的表格樣式,您可以從其表格樣式庫中選擇。您可以將其中的一個應用於表格,如下所示:
1
|
table.style
=
'LightShading-Accent1'
|
通過從表樣式名稱中刪除所有空格形成樣式名稱。通過將鼠標懸停在Word的表樣式庫中的縮略圖上,可以找到表樣式名稱。
添加圖片
Word中,您可以將圖像使用的文檔中的菜單項。以下是如何做到這一點的:Insert > Photo > Picture fromfile...
python-docx
1
|
document.add_picture(
'image-filename.png'
)
|
此示例使用路徑,從本地文件系統加載圖像文件。你也可以使用一個類文件對象,本質上就像一個打開的文件的任何對象。如果您從數據庫或網絡檢索圖像,並且不想獲取涉及的文件系統,這可能很方便。
圖像大小
默認情況下,添加圖像出現在本地的大小。這通常比你想要的更大。本機大小的計算方法。因此,具有300dpi分辨率的300×300像素圖像出現在一平方英寸。問題是大多數圖像不包含dpi屬性,它默認為72 dpi。這將使同一圖像在一邊,在一半左右的某處出現4.167英寸。pixels / dpi
要獲得所需的圖像大小,您可以以方便的單位指定其寬度或高度,如英寸或厘米:
1
2
3
|
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樣式,如果你知道那些是。
您可以在創建段落時應用段落樣式:
1
|
document.add_paragraph(
'Lorem ipsum dolor sit amet.'
, style
=
'ListBullet'
)
|
這種特殊的風格導致段落顯示為一個子彈,一個非常方便的東西。您也可以在之后應用樣式。這兩行相當於上面的一行:
1
2
|
paragraph
=
document.add_paragraph(
'Lorem ipsum dolor sit amet.'
)
paragraph.style
=
'ListBullet'
|
在此示例中,樣式使用其樣式ID“ListBullet”指定。通常,通過去除樣式名稱中出現在Word用戶界面(UI)中的空格來形成樣式ID。所以風格'列表3號'將被指定為'ListNumber3'
。但是,請注意,如果您使用的是本地化版本的Word,則樣式ID可能來自英語樣式名稱,並且可能不會完全對應於其在Word UI中的樣式名稱。
應用粗體和斜體
為了理解如何大膽和斜體的工作,你需要了解一個段落里面發生了什么。簡短的版本是這樣的:
- 一個段落包含所有的塊級格式,如縮進,行高,制表符,等等。
- 字符級格式,如粗體和斜體,都在應用的 運行水平。段落中的所有內容必須在一個運行中,但可以有多個。因此,在中間有一個粗體字的段落需要三個段落,一個正常的段落,一個包含該單詞的粗體,以及另一個正常的段落。
當您的提供文本添加段落.add_paragraph()
的方法,它被放入一個單一的運行。您可以添加更多的使用.add_run()
上一段方法:
1
2
|
paragraph
=
document.add_paragraph(
'Lorem ipsum '
)
paragraph.add_run(
'dolor sit amet.'
)
|
這將產生一個看起來像從單個字符串創建的段落。除非你看看XML,段落文本被分成幾個部分並不明顯。注意第一個字符串末尾的尾部空格。您需要明確在運行的開始和結束位置出現的位置。它們不會在運行之間自動插入。期待被那一個被抓住幾次:)。
Run
對象既有.bold
和.italic
屬性,您可以設置其值為運行:
1
2
3
4
|
paragraph
=
document.add_paragraph(
'Lorem ipsum '
)
run
=
paragraph.add_run(
'dolor'
)
run.bold
=
True
paragraph.add_run(
' sit amet.'
)
|
其產生的文字,看起來像這樣:'Lorem存有悲坐阿梅德。“
請注意,您可以對結果集粗體或斜體正確的.add_run()
,如果你不需要它為別的:
1
2
3
4
5
6
7
8
|
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()
方法。這可以使你的代碼更簡單,如果你從建立段從運行反正:
1
2
3
4
|
paragraph
=
document.add_paragraph()
paragraph.add_run(
'Lorem ipsum '
)
paragraph.add_run(
'dolor'
).bold
=
True
paragraph.add_run(
' sit amet.'
)
|
應用字符樣式
除了段落樣式,其中指定一組段落級別設置,Word有字符樣式其指定一組運行級別設置。一般來說,您可以將字符樣式視為指定字體,包括其字體,大小,顏色,粗體,斜體等。
像段落樣式,字符樣式必須已經與你在打開的文檔中定義的Document()
調用(參見 了解樣式)。
添加新運行時可以指定字符樣式:
1
2
|
paragraph
=
document.add_paragraph(
'Normal text, '
)
paragraph.add_run(
'text with emphasis.'
,
'Emphasis'
)
|
您還可以在運行創建后將樣式應用於運行。此代碼產生的結果與上面的行相同:
1
2
3
|
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()