Python操作word文檔的示例詳解

寫在前面

python-docx 不支持 doc 文檔,一定要註意該點,如果使用 doc 文檔,需要提前將其用 Word 相關軟件轉換為 docx 格式。 doc 和 docx 是存在本質差異的,一個是二進制,另一個 XML 格式的文件。

模塊的安裝 pip install python-docx

以下網址首先準備好

  • 官方手冊:https://python-docx.readthedocs.io/en/latest/index.html
  • pypi 官方地址:https://pypi.org/project/python-docx/

資料準備完畢,即可進入編碼環節。

創建一個文檔

第一個需求,創建一個文檔,並在裡面寫入各種信息。

先實現第一步,寫入一個標題

註意下文中的 add_heading() 函數的用法。

from docx import Document

# 創建 Document 對象,等價於在電腦上打開一個 Word 文檔
document = Document()

# 在 Word 文檔中添加一個標題
document.add_heading('這是一個標題',level=0)

# 保存文檔
document.save('demo.docx')

添加文字段落

註意下文中 add_paragraph() 函數添加段落,使用 add_run() 追加文本

from docx import Document

# 創建 Document 對象,等價於在電腦上打開一個 Word 文檔
document = Document()

# 在 Word 文檔中添加一個標題
document.add_heading('這是一個標題', level=0)

# 文檔添加段落
p = document.add_paragraph('這是白給的段落')
# 添加帶樣式的文字
# 添加段落,文本可以包含制表符(\t)、換行符(\n)或回車符(\r)等
# add_run() 在段落後面追加文本
p.add_run('\n我傾斜瞭').italic = True  # 添加一個傾斜文字
p.add_run('\n我加粗瞭').bold = True  # 添加一個加粗文字

# 保存文檔
document.save('demo.docx')

在段落前面增加文字

p.add_run('\n我傾斜瞭').italic = True  # 添加一個傾斜文字
p.add_run('\n我加粗瞭').bold = True  # 添加一個加粗文字

# 段落前面插入內容
prep_p = p.insert_paragraph_before('段落之前插入內容')

段落還可以添加分頁符,代碼如下所示:

# 段落前面插入內容
prep_p = p.insert_paragraph_before('段落之前插入內容')

document.add_page_break()
p1 = document.add_paragraph('新頁新段落')

列表的添加

無序列表的添加

# 添加列表(前面一個小圓點)
document.add_paragraph('我前面是小圓點', style='List Bullet')
# 添加列表(前面一個小圓點)
document.add_paragraph('第二個小圓點', style='List Bullet')

有序列表的添加

# 添加列表(前面數字)
document.add_paragraph('我前面是數字', style='List Number')
# 添加列表(前面數字)
document.add_paragraph('第二個數字', style='List Number')

圖片的添加

Document 對象具備的方法如下所示:

  • add_heading(self, text='', level=1):添加標題;
  • add_page_break(self):分頁符;
  • add_paragraph(self, text='', style=None):添加段落;
  • add_picture(self, image_path_or_stream, width=None, height=None):添加圖片;
  • add_section(self, start_type=2):添加節;
  • add_table(self, rows, cols, style=None):添加表格;

本部分重點學習 add_picture() 方法。

document.add_picture(r"../9.png", width=Inches(1))

add_picture() 函數中參數 image_path_or_stream 可以為相對地址或者絕對地址,也可以是一個圖片數據流,上述代碼中 Inches 表示英寸,除此之外, python-docx 還提供瞭厘米 (Cm) ,如設置 1厘米: Cm(1) ,使用的時候需要提前導入 from docx.shared import Inches, Cm

表格添加

使用 add_table() 函數,可以在 Word 文檔中添加表格。

p1 = document.add_paragraph('新頁新段落')

# 添加一個 2×2 表格
table = document.add_table(rows=2, cols=2)
# 獲取第1行第2列單元格
cell = table.cell(0, 1)

# 設置單元格文本
cell.text = '第1行第2列'

# 獲取第2行
row = table.rows[1]
row.cells[0].text = '橡皮擦'
row.cells[1].text = '喬喻'

學習的時候註意一下相關註釋,即可掌握該部分內容。

相關樣式設置

設置格式需要用 add_run() ,直接使用 add_paragraph() 生成的段落不能直接設置字體等樣式。

# 模塊的導入
from docx.shared import Pt, Cm, Inches
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import RGBColor
# 一級標題 level=0
head0 = document.add_heading(level=0)
# 標題居中
head0.alignment = WD_ALIGN_PARAGRAPH.CENTER
title_run = head0.add_run('這是一個居中的標題', )
title_run.font.size = Pt(24)
# 標題英文字體
title_run.font.name = 'Times New Roman'
# 標題中文字體
title_run.element.rPr.rFonts.set(qn('w:eastAsia'), '微軟雅黑')
# 字體顏色
title_run.font.color.rgb = RGBColor(4, 60, 169)

其中 WD_ALIGN_PARAGRAPH 對象表示段落對其的方式,其值包括如下內容

  • WD_ALIGN_PARAGRAPH. LEFT:左對齊;
  • WD_ALIGN_PARAGRAPH. CENTER:居中對其;
  • WD_ALIGN_PARAGRAPH. RIGHT:右對齊;
  • WD_ALIGN_PARAGRAPH. JUSTIFY:兩端對齊;

行距,段間距 line_spacing 屬性用來設置行距, space_before 表示段前距, space_after 表示段後距。

斜體,下劃線,粗體設置

font.italic = True  #設置斜體
font.underline = True  #設置下劃線
font.bold = True  #設置粗體

首行縮進 paragraph_format_line_indent 可以設置縮進值。

其它設置 除瞭上述內容外,還可以通過 document.styles.add_style('textstyle', WD_STYLE_TYPE. PARAGRAPH) ,使用 add_style() 方法創建新的樣式對象,後續就可以通過提供的屬性進行樣式設置,設置字體使用 font.size ,設置字體顏色為 font.color

然後在添加段落的時候,就可以應用該屬性瞭。

from docx.shared import RGBColor
from docx.enum.style import WD_STYLE_TYPE
style = document.styles.add_style('textstyle', WD_STYLE_TYPE.PARAGRAPH)
# 字體大小
style.font.size = Pt(16)
# 字體顏色
style.font.color.rgb = RGBColor(66, 100, 0)
p1 = document.add_paragraph('神人橡皮擦',style=style)

頁眉和頁腳

頁眉和頁腳可以直接設置,參考代碼如下所示

header = document.sections[0].header
header.add_paragraph('橡皮擦的頁眉')

頁腳設置

footer = document.sections[0].footer

到此這篇關於Python操作word文檔的示例詳解的文章就介紹到這瞭,更多相關Python操作word文檔內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: