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')
注:當隻設定圖檔一個方向的尺寸(寬或高)時,另一方向會自動縮放。
以上設定後文檔截圖:

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文檔裡的這些表格樣式:
英文也不複雜,大家可以對照一下。
設定表格樣式:
表格在建立時可及可指定格式:
也可在建立後進行設定:
# 為表格設定統一樣式:
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 辦公軟體辦公效率的作用。 感興趣的朋友,可以點個 關注 或 收藏 。如在部落格中遇到任何問題或有一些想法、需求,可留言或私信。 創作不易,你的支援是我最大的動力,感謝 !