iT邦幫忙

0

Python學習筆記: 操作word docx文件之docx模組功能快覽及程式示範

  • 分享至 

  • xImage
  •  

本文同步發表於小弟自架網站(非釣魚也無廣告,純分享):

微確幸資訊站

最近寫了好幾篇分享文使用了docx模組來操作word檔案,
這個模組功能還蠻強的,趁著這次把docx模組說明文件中一些比較常用的功能翻譯成中文。

docx模組英文說明文件網址:
https://python-docx.readthedocs.io/en/latest/index.html

Document constructor (文件建構器)

語法 說明
document = Document() 開啟新文件
document.save('test.docx') 將word存檔為test.docx
document = Document('test.docx') 開啟test.docx檔案
document.add_heading('文件標題', 0) 新增「文件標題」這些字,樣式為word中的「標題」
document.add_page_break() word中的插入分頁符號
document.add_paragraph() word中新增段落,可結合tab (\t)、newline (\n)、return (\r)
document.add_section() word中的插入分節符號
document.add_picture('photo.jpg', Cm(5)) word中的插入photo.jpg圖片,設定圖片寬度5公分,須導入from docx.shared import Cm
document.add_table(3, 2) word文件中插入3列2欄的表格
document.sections() word文件中的所有節,可以用for section in document.sections:遍歷所有的節

Section objects(分節物件)

語法 說明
section.different_first_page_header_footer = False word文件中開啟頁首或頁尾時,首頁不同是否打勾。
section.header.is_linked_to_previous = True word文件中開啟頁首或頁尾時,首頁是否連結到前一節。
section.footer.is_linked_to_previous = True word文件中開啟頁首或頁尾時,首尾是否連結到前一節。
section.page_width = Cm(20) word文件中設定頁面寬度為20公分。須導入from docx.shared import Cm
section.page_height = Cm(30) word文件中設定頁面高度為30公分。須導入from docx.shared import Cm
section.left_margin = Cm(3) word文件中設定左邊界為3公分。須導入from docx.shared import Cm
section.right_margin = Cm(3) word文件中設定右邊界為3公分。須導入from docx.shared import Cm
section.top_margin = Cm(3) word文件中設定上邊界為3公分。須導入from docx.shared import Cm
section.bottom_margin = Cm(3) word文件中設定下邊界為3公分。須導入from docx.shared import Cm

Paragraph objects(段落物件)

語法 說明
run = paragraph.add_run(mytext) 建立run用來處理段落的字體樣式等,mytext是加入段落的字串
run.bold = True 設定run物件中的mytext為粗體
run.font.size = Pt(14) 設定run物件中的mytext字體大小為14,須導入from docx.shared import Pt模組
run.font.name = 'Times New Roman' 設定run物件中的mytext英文及數字的字體為Times New Roman
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'標楷體') 設定run物件中的mytext中文字體為標楷體,須導入from docx.oxml.ns import qn模組

以下為示範程式碼,就不特別示範輸出結果了。

要注意的是,document.save()存檔後,如果存在一樣的檔名,會將原檔案給覆蓋。

import os
from docx import Document
from docx.shared import Cm

# 設定工作目錄
os.chdir('d:/temp/test')

# 取得目前工作目錄
cwd = os.getcwd()

# 列印目前工作目錄
print(cwd)
# 開啟新文件且儲存
document = Document()

# 文件存檔為test.docx
document.save('test.docx')
# 開啟舊檔test.docx
document = Document('test.docx')

# word文件第一層是Document物件,再下一層是是分節物件
doc_sections = document.sections

# 如果word文件有分1個分節符號,印出來就會有2個section物
for section in doc_sections:
    print(section)
# 開啟舊檔test.docx,並設定頁面與邊界
document = Document('test.docx')

# 假設你的文件中沒有分節符號,那定義出第1頁(sections[0])後就能對頁面做設定
doc_section = document.sections[0]

# 設定分節頁面寬度20公分
doc_section.page_width = Cm(20)

# 設定分節頁面高度50公分
doc_section.page_height= Cm(50)

# 設定分節頁面左邊界3公分
doc_section.left_margin = Cm(3)

# 設定分節頁面右邊界3公分
doc_section.right_margin = Cm(3)

# 設定分節頁面上邊界3公分
doc_section.top_margin = Cm(3)

# 設定分節頁面下邊界3公分
doc_section.bottom_margin = Cm(3)

# 完成設定後存檔
document.save('test.docx')
# 開啟舊檔test.docx,並設定頁面與邊界
document = Document('test.docx')

# 假設你的文件中有分節符號,你要對所有分節的頁面做設定
doc_section = document.sections

# 遍歷所有的分節做設定
for section in doc_section:
    
    # 設定分節頁面寬度20公分
    section.page_width = Cm(20)
    
    # 設定分節頁面高度50公分
    section.page_height= Cm(50)
    
    # 設定分節頁面左邊界3公分
    section.left_margin = Cm(3)
    
    # 設定分節頁面右邊界3公分
    section.right_margin = Cm(3)
    
    # 設定分節頁面上邊界3公分
    section.top_margin = Cm(3)
    
    # 設定分節頁面下邊界3公分
    section.bottom_margin = Cm(3)

# 完成設定後存檔
document.save('test.docx')
# 開啟新文件且儲存
document = Document()

# 文件插入1個分節符號
document.add_section()

# 文件插入1個分頁符號
document.add_page_break()

# 文件存檔為test.docx
document.save('test.docx')
# 開啟新文件且儲存
document = Document()

# 文件中加入「文件標題」的字,樣式是標題
document.add_heading('文件標題', 0) # 0如果改成1,樣式就是標題1

# 文件加入「這是示範段落」的字
document.add_paragraph('這是示範段落')

# 文件加入photo.jpg的圖片,設定寬度5公分
document.add_picture('photo.jpg', width=Cm(5))

# 文件存檔為test.docx
document.save('test.docx')

以上就是這次的分享!!

有關頁首和頁尾的設定,會再寫一篇來分享。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
孫守真任真甫
iT邦研究生 4 級 ‧ 2023-06-08 09:50:25

菩薩慈悲:請問 菩薩您用的是什麼編輯器呢? 用Visual Studio 2022 開發 Python 應用程序適合嗎?感恩感恩 南無阿彌陀佛

mackuo iT邦研究生 2 級 ‧ 2023-06-08 13:47:44 檢舉

大師您好,小可是使用jupyter notebook做為編輯器,Visual Studio 是很棒的編輯器,很多專業人士都是這個編輯器的愛用者,但個人還是習慣安裝anaconda後使用網頁版的jupyter notebook來作業。

我要留言

立即登入留言