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

Python-docx 模塊讀寫 Word 文檔基礎(二):圖片、表格,表格樣式,章節設置,頁眉頁腳等

前言:

上一篇博客介紹了 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')

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

以上設置後文檔截圖:

在這裏插入圖片描述

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 值。

插入的表格截圖:

在這裏插入圖片描述

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文檔裏的這些表格樣式:

在這裏插入圖片描述
英文也不復雜,大家可以對照一下。

設置表格樣式:

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

doc.add_table(2,3,style ='Table Grid' )

也可在創建後進行設置:

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

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

在這裏插入圖片描述
這樣就比較接近日常使用的表格了。

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 方法

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

在這裏插入圖片描述

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) # 紅色

表格截圖:

在這裏插入圖片描述

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 文檔截圖:

在這裏插入圖片描述

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與Office】專欄

該專欄會對 Python 的第三方模塊,如:xlwt,xlrd,python-docx等,操作 Office 辦公軟件(Word Excel PPT)的方法進行詳細講解。同時也會搭配一些實例演練,一方面強化知識點的理解與運用,另一方面也希望能起到,引導讀者進行思考:如何用 python 提高 offic 辦公軟件辦公效率的作用。

感興趣的朋友,可以點個 關注收藏 。如在博客中遇到任何問題或有一些想法、需求,可留言或私信。

創作不易,你的支持是我最大的動力,感謝 !

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章