天天看點

Python-docx 讀寫 Word 文檔:插入圖檔、表格,設定表格樣式,章節,頁眉頁腳等

Python-docx 子產品讀寫 Word 文檔基礎(二):圖檔、表格,表格樣式,章節設定,頁眉頁腳等

        • 前言:
        • 1、插入圖檔、設定大小:
        • 2、插入表格、設定格式:
        • 3、設定章節、頁面設定等:
        • 4、設定頁眉頁腳
        • 結尾:
    • 【Python與Office】專欄

前言:

上一篇部落格介紹了 python-docx 子產品如何 建立 word 文檔、設定段落格式、字型格式等 ,本篇部落格将對在日常使用 word 文檔的其他操作進行介紹。

主要内容有:

1、插入圖檔、設定圖檔大小;

2、插入表格、設定表格樣式、字型樣式;

3、章節設定:頁面大小、邊距等;

4、設定頁眉頁腳。

1、插入圖檔、設定大小:

上篇部落格簡單的介紹了插入圖檔的方法,但是沒介紹圖檔大小的設定方法:

# 導入子產品
from docx import Document
# 此子產品中包含 docx 中各類機關方法
from docx import shared

doc = Document()
doc.add_heading('python-docx 基礎講解(二)')

# 在文檔中增加圖檔,并對設定圖檔大小
# 當隻設定一個方向的長度(寬或高)時,另一方向會自動縮放
doc.add_picture('1.png',width=shared.Inches(1))  # 按英寸設定
doc.add_picture('1.png',height=shared.Cm(2))  # 按厘米設定

# 儲存檔案
doc.save('test2.docx')
           

注:當隻設定圖檔一個方向的尺寸(寬或高)時,另一方向會自動縮放。

以上設定後文檔截圖:

Python-docx 讀寫 Word 文檔:插入圖檔、表格,設定表格樣式,章節,頁眉頁腳等

2、插入表格、設定格式:

1、在文檔中增加表格,并添加文字:

# 在文檔中增加表格,并添加文字
table1 = doc.add_table(2,3) # 添加一個2行3列的表格,表格樣式為None
"add_table(self, rows, cols, style=None):"
table1.cell(0,0).text = '0'  # 給表格單元格指派

# 擷取表格對象所有單元格對象清單
print(table1._cells)
# ------運作結果------
# [<docx.table._Cell object at 0x000002131AF996C8>,
# <docx.table._Cell object at 0x000002131AF99608>,
# <docx.table._Cell object at 0x000002131AF99648>,
# <docx.table._Cell object at 0x000002131AF99688>,
# <docx.table._Cell object at 0x000002131AF99588>,
# <docx.table._Cell object at 0x000002131AF995C8>]
# ------運作結果------

# 對單元格對象設定文字
for i,cell in enumerate(table1._cells):
    cell.text = str(i)
           

注:在word文檔中增加表格時,會傳回一個 table 對象。table對象中包含單元格 cell 對象,單元格寫入資料就是設定 cell 對象的 text 值。

插入的表格截圖:

Python-docx 讀寫 Word 文檔:插入圖檔、表格,設定表格樣式,章節,頁眉頁腳等

2、設定表格樣式:

從增加表格方法:add_table(self, rows, cols, style=None),可以看出在建立表格時,就可以對表格樣式進行設定。

可通過下面的方法擷取 word 文檔中 預設的表格樣式:

# 擷取所有表格樣式
from docx.enum.style import WD_STYLE_TYPE

styles = doc.styles
for style in styles:
    if style.type == WD_STYLE_TYPE.TABLE:
        print(style)
'''
可設定的表格樣式:
_TableStyle('Normal Table') id: 187730312
_TableStyle('Table Grid') id: 187730312
_TableStyle('Light Shading') id: 187730376
_TableStyle('Light Shading Accent 1') id: 187730312
_TableStyle('Light Shading Accent 2') id: 187730376
_TableStyle('Light Shading Accent 3') id: 187730312
_TableStyle('Light Shading Accent 4') id: 187730376
_TableStyle('Light Shading Accent 5') id: 187730312
_TableStyle('Light Shading Accent 6') id: 187730376
_TableStyle('Light List') id: 187730312
...
内容很多,可以自己嘗試運作列印一下
'''
           

以上擷取的表格樣式,對應word文檔裡的這些表格樣式:

Python-docx 讀寫 Word 文檔:插入圖檔、表格,設定表格樣式,章節,頁眉頁腳等

英文也不複雜,大家可以對照一下。

設定表格樣式:

表格在建立時可及可指定格式:

也可在建立後進行設定:

# 為表格設定統一樣式:
table1.style = 'Table Grid'
           

設定表格樣式後表格截圖:

Python-docx 讀寫 Word 文檔:插入圖檔、表格,設定表格樣式,章節,頁眉頁腳等

這樣就比較接近日常使用的表格了。

3、其他表格常用方法:

# 表格設定自動調整列寬,(預設也為真)
table1.autofit = True

# 為表格對象增加列
table1.add_column(shared.Inches(3)) # 需指定寬度
"add_column(self, width):"

# 為表格對象增加行
table1.add_row() # 隻能逐行添加
"add_row(self):"
           

擷取表格對象的一些屬性:

# 擷取行對象
row0 = table1.rows[0]
print(row0)
# 擷取列對象
col0 = table1.columns[0]

# 擷取表格一行的單元格對象清單
row0_cells = table1.row_cells(0)
print(row0_cells)
# 運作結果
# [<docx.table._Cell object at 0x000000000B311C88>,
# <docx.table._Cell object at 0x000000000B311AC8>,
# <docx.table._Cell object at 0x000000000B311B08>,
# <docx.table._Cell object at 0x000000000B311A48>]

# 擷取一列的單元格對象清單
col_0_cells = table1.column_cells(0)
print(col_0_cells)
# 運作結果
# [<docx.table._Cell object at 0x000000000B312F88>,
# <docx.table._Cell object at 0x000000000B312CC8>,
# <docx.table._Cell object at 0x000000000B31A108>]
           

4、設定表格内單元格對齊方式,合并單元格:

# 設定單元格對齊方式
# 垂直對齊方式
from docx.enum.table import WD_ALIGN_VERTICAL
table1.cell(0,0).vertical_alignment = WD_ALIGN_VERTICAL.TOP

# 合并單元格
cell_new = table1.cell(2,0).merge(table1.cell(2,1))
# 傳回一個新單元格對象
print(cell_new)
# <docx.table._Cell object at 0x000000000B312F08>
# 要繼續合并的話,可用此單元格再次使用 merge 方法
           

對表格增加行、列,合并單元格後表格截圖:

Python-docx 讀寫 Word 文檔:插入圖檔、表格,設定表格樣式,章節,頁眉頁腳等

5、設定單元格字型格式:

單元格内其實也是有 paragraph 對象的,即對單元格内字型設定方式,和對段落中文字格式設定方法一樣。

cell_par = cell_new.paragraphs[0] # 擷取到對象
# 設定對齊方式
from docx.enum.text import WD_ALIGN_PARAGRAPH
cell_par.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 擷取 run 對象
cell_run = cell_new.paragraphs[0].runs[0]
# 設定字型
cell_run.font.name = 'Times New Roman'
from docx.oxml.ns import qn
cell_run.font.element.rPr.rFonts.set(qn('w:eastAsia'),'楷體')
# 設定字型顔色
from docx.shared import RGBColor
cell_run.font.color.rgb = RGBColor(255,55,55) # 紅色
           

表格截圖:

Python-docx 讀寫 Word 文檔:插入圖檔、表格,設定表格樣式,章節,頁眉頁腳等

3、設定章節、頁面設定等:

章節 也是 word 文檔中一個塊級元素,相較于段落塊級元素它的範圍應該更大一點。一般來說:一個 word 文檔包含多個章節、一個章節包含多個 run 塊級元素。

一個word文檔被建立時至少包含一個章節:

# word文檔中章節 section 對象
sec = doc.sections
print(sec) # <docx.section.Sections object at 0x000000000B312E88>
print(len(sec)) # 1
           

1、建立章節:

# 建立一個章節
doc.add_section()
print(len(sec)) # 2
           

2、擷取文檔頁面邊距:

word 文檔的頁邊距、頁眉頁腳的設定和章節對象有關:

# 文檔頁邊距設定
# 擷取、設定頁面邊距
sec0 = sec[0]  # 擷取章節對象
# 擷取頁面邊距值:(機關為像素)
print('左邊距:',sec0.left_margin)
# 左邊距: 1143000
print('右邊距:',sec0.right_margin)
# 右邊距: 1143000
print('上邊距:',sec0.top_margin)
# 上邊距: 914400
print('下邊距:',sec0.bottom_margin)
# 下邊距: 914400
print('頁眉邊距:',sec0.header_distance)
# 頁眉邊距: 457200
print('頁腳邊距:',sec0.footer_distance)
# 頁腳邊距: 457200
           

3、設定文檔頁面邊距、頁面大小:

# 設定頁面高度、寬度
sec0.page_height = shared.Inches(15)
sec0.page_width = shared.Inches(10)

# 也可以設定頁面的邊距:
sec0.left_margin = shared.Inches(1)
sec0.right_margin = shared.Inches(1)
sec0.top_margin = shared.Inches(2)
sec0.bottom_margin = shared.Inches(2)
           

設定後的 word 文檔截圖:

Python-docx 讀寫 Word 文檔:插入圖檔、表格,設定表格樣式,章節,頁眉頁腳等

4、設定頁眉頁腳

設定頁面頁腳時,先擷取頁眉頁腳對象:

# 設定頁眉
head0 = sec0.header  # 傳回頁眉對象
font0 = sec0.footer  # 傳回頁腳對象
print(head0)
# <docx.section._Header object at 0x000000000B312E08>
print(font0)
# <docx.section._Footer object at 0x000000000B312B88>
           

設定方法:

"在設定word文檔的頁眉頁腳時,有一個非常重要的是否與前一節相同"
# 檢視頁眉是否和上節一直
print(head0.is_linked_to_previous)  # 預設為 True

# 設定頁眉
"頁眉也是一個塊級對象,裡面也包含了 Paragraph 對象,"
"是以對齊方式,文字格式設定方式和前文介紹一緻。"

print(head0.paragraphs)
head0_par = head0.paragraphs[0]
head0_par.add_run('頁眉')

# 設定頁腳
font0_par = font0.paragraphs[0]
font0_par.add_run('頁腳')
# 注: 設定頁腳按序列增加的方式暫未找到
           

頁眉頁腳設定效果圖:

Python-docx 讀寫 Word 文檔:插入圖檔、表格,設定表格樣式,章節,頁眉頁腳等

結尾:

以上就是本篇部落格的全部内容,感謝閱讀。

下一篇将會是 python-docx 子產品讀取 word 文檔中各種資訊方法的詳細介紹,包括段落文本資訊、表格文本資訊、各類塊級元素的格式資訊等。

【Python與Office】專欄

該專欄會對 Python 的第三方子產品,如:xlwt,xlrd,python-docx等,操作 Office 辦公軟體(Word Excel PPT)的方法進行詳細講解。同時也會搭配一些執行個體演練,一方面強化知識點的了解與運用,另一方面也希望能起到,引導讀者進行思考:如何用 python 提高 offic 辦公軟體辦公效率的作用。 感興趣的朋友,可以點個 關注 或 收藏 。如在部落格中遇到任何問題或有一些想法、需求,可留言或私信。 創作不易,你的支援是我最大的動力,感謝 !