Python-docx 庫介紹
官網文檔
python-docx 是一個用于創建和修改 Microsoft Word (.docx) 文件的 Python 庫。它允許你通過編程方式生成格式化的文檔,添加文本、段落、表格、圖片等元素,而無需依賴 Microsoft Word 應用程序。
主要功能
- 創建新的 Word 文檔
- 添加段落、標題和列表
- 設置文本格式(字體、大小、顏色、加粗、斜體等)
- 插入表格和處理表格數據
- 添加圖片和圖表
- 管理文檔樣式和布局
- 讀取和修改現有文檔
安裝 python-docx 庫:當前版本1.1.2
pip install python-docx==1.1.2
一,基本使用示例
docx_basics.py
from docx import Document
from docx.shared import Pt, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT# 創建新文檔
doc = Document()# 添加標題
doc.add_heading('Python-docx示例文檔', 0)# 添加段落
paragraph = doc.add_paragraph('這是一個使用python-docx庫創建的示例文檔。')# 添加帶有格式的文本
paragraph.add_run(' 這部分文本是粗體').bold = True
paragraph.add_run(',這部分是斜體').italic = True# 添加不同級別的標題
doc.add_heading('一級標題', level=1)
doc.add_heading('二級標題', level=2)# 添加列表
doc.add_paragraph('無序列表項', style='List Bullet')
doc.add_paragraph('有序列表項', style='List Number')# 添加表格
table = doc.add_table(rows=1, cols=3)
table.alignment = WD_TABLE_ALIGNMENT.CENTER
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '姓名'
hdr_cells[1].text = '年齡'
hdr_cells[2].text = '職業'# 添加表格數據
row_cells = table.add_row().cells
row_cells[0].text = '張三'
row_cells[1].text = '30'
row_cells[2].text = '工程師'# 添加圖片
doc.add_picture('example.png', width=Inches(4))# 保存文檔
doc.save('demo.docx')
docx_reading.py
from docx import Document# 打開現有文檔
doc = Document('existing_document.docx')# 讀取所有段落
for para in doc.paragraphs:print(para.text)# 修改段落
if len(doc.paragraphs) > 0:doc.paragraphs[0].text = '這是修改后的第一段內容'# 訪問表格
if len(doc.tables) > 0:table = doc.tables[0]for row in table.rows:for cell in row.cells:print(cell.text)# 添加新內容
doc.add_paragraph('這是添加到現有文檔的新段落')# 保存修改
doc.save('modified_document.docx')
文檔樣式和格式設置
docx_styles.py
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENTdoc = Document()# 設置段落格式
paragraph = doc.add_paragraph('這是一個居中對齊的段落,字體為12磅,顏色為藍色。')
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER# 設置文本格式
run = paragraph.runs[0]
run.font.name = 'Arial'
run.font.size = Pt(12)
run.font.color.rgb = RGBColor(0, 0, 255) # 藍色
run.bold = True
run.italic = True# 創建自定義樣式
style = doc.styles.add_style('MyHeading', 1) # 1表示標題樣式
style.font.name = '微軟雅黑'
style.font.size = Pt(16)
style.font.bold = True# 使用自定義樣式
doc.add_heading('自定義樣式標題', level=1).style = doc.styles['MyHeading']doc.save('styled_document.docx')
限制和注意事項
- python-docx 只能處理.docx格式的文件,不能處理舊版的.doc格式
- 對于復雜的 Word 文檔(如包含高級格式、復雜圖表或特殊效果),可能無法完全復制其格式
- 某些 Word 功能(如腳注、尾注、復雜的頁眉頁腳)的支持有限
- 該庫主要關注文檔內容的操作,對于文檔的布局和打印設置支持較少
二, Python-docx 庫的類結構
python-docx 庫基于 Open XML 標準構建,采用層次化的類結構來表示 Word 文檔的各個組件。主要類及其關系如下:
- Document:代表整個 Word 文檔,是所有其他元素的容器
- Section:文檔的節,可包含不同的頁面設置
- Paragraph:段落,包含文本和格式信息
- Run:文本運行,共享相同格式的文本塊
- Table:表格,由行和單元格組成
- TableStyle:表格樣式
- Style:文檔樣式
- Header/Footer:頁眉和頁腳
- Image:圖片對象
這些類之間的關系是嵌套的:Document 包含多個 Section,每個 Section 包含多個 Paragraph 和 Table,而 Paragraph 又由一個或多個 Run 組成。
常用類和方法詳解
- Document 類
創建和打開文檔:
from docx import Document# 創建新文檔
doc = Document()# 打開現有文檔
doc = Document('existing_document.docx')# 保存文檔
doc.save('new_document.docx')
添加內容:
# 添加段落
doc.add_paragraph('這是一個新段落')# 添加標題
doc.add_heading('這是一級標題', level=1)# 添加分頁符
doc.add_page_break()
- Paragraph 類
段落操作:
# 獲取段落
paragraphs = doc.paragraphs # 獲取所有段落
first_para = doc.paragraphs[0] # 獲取第一個段落# 添加段落
paragraph = doc.add_paragraph('初始文本')# 添加文本到段落
paragraph.add_run('額外的文本')# 設置段落格式
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中對齊
paragraph.paragraph_format.line_spacing = 1.5 # 1.5倍行距
- Run 類
文本格式設置:
# 創建帶有格式的文本
run = paragraph.add_run('這是粗體斜體文本')
run.bold = True
run.italic = True
run.font.size = Pt(12)
run.font.color.rgb = RGBColor(255, 0, 0) # 紅色
run.font.name = 'Arial'
- Table 類
表格操作:
# 添加表格
table = doc.add_table(rows=3, cols=3)# 訪問單元格
cell = table.cell(0, 0) # 第一行第一列
cell.text = '單元格內容'# 遍歷表格
for row in table.rows:for cell in row.cells:print(cell.text)# 設置表格樣式
table.style = 'Table Grid'
- 樣式操作
應用和創建樣式:
# 應用現有樣式
paragraph.style = doc.styles['Heading 1']# 創建自定義樣式
from docx.shared import Pt
from docx.enum.style import WD_STYLE_TYPEstyle = doc.styles.add_style('MyStyle', WD_STYLE_TYPE.PARAGRAPH)
style.font.name = 'Arial'
style.font.size = Pt(12)
style.font.bold = True
- 圖片和媒體
插入圖片:
from docx.shared import Inches# 添加圖片
doc.add_picture('image.jpg', width=Inches(4))
- 頁眉和頁腳
頁眉頁腳操作:
# 獲取第一個節的頁眉
header = doc.sections[0].header# 添加內容到頁眉
header.paragraphs[0].text = '這是頁眉'# 獲取頁腳
footer = doc.sections[0].footer
footer.paragraphs[0].text = '這是頁腳'
示例:創建復雜文檔,包含多種元素文檔的完整示例
complex_document.py
from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.style import WD_STYLE_TYPE# 創建文檔
doc = Document()# 添加標題
title = doc.add_heading('示例文檔', level=0)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER# 添加段落
doc.add_paragraph('這是一個使用python-docx創建的示例文檔。')# 添加帶格式的段落
paragraph = doc.add_paragraph('這是一個包含 ')
paragraph.add_run('粗體').bold = True
paragraph.add_run(' 和 ')
paragraph.add_run('斜體').italic = True
paragraph.add_run(' 文本的段落。')# 添加圖片
doc.add_picture('sample.jpg', width=Inches(4))# 添加表格
table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'# 設置表頭
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '項目'
hdr_cells[1].text = '描述'
hdr_cells[2].text = '價格'# 添加數據行
data = [('產品A', '這是產品A的描述', '$100'),('產品B', '這是產品B的描述', '$200'),('產品C', '這是產品C的描述', '$300')
]for item, desc, price in data:row_cells = table.add_row().cellsrow_cells[0].text = itemrow_cells[1].text = descrow_cells[2].text = price# 添加分頁符
doc.add_page_break()# 添加列表
doc.add_paragraph('項目列表:', style='List Bullet')
doc.add_paragraph('項目1', style='List Bullet 2')
doc.add_paragraph('項目2', style='List Bullet 2')# 添加自定義樣式
style = doc.styles.add_style('MyQuote', WD_STYLE_TYPE.PARAGRAPH)
style.base_style = doc.styles['Quote']
style.font.size = Pt(11)
style.font.italic = True# 使用自定義樣式
doc.add_paragraph('這是一個引用段落', style='MyQuote')# 保存文檔
doc.save('complex_document.docx')
注意事項
- python-docx 的 API 設計遵循 Word 文檔的邏輯結構,但某些高級功能可能需要更復雜的操作
- 文檔格式(如樣式、對齊方式)通常應用于段落或運行對象,而非單個字符
- 對于復雜的文檔操作,可能需要結合使用多個類和方法
- 建議在開發過程中參考官方文檔以獲取最新的 API 信息