python-docx 库教程

Python-docx 库介绍

官网文档

python-docx 是一个用于创建和修改 Microsoft Word (.docx) 文件的 Python 库。它允许你通过编程方式生成格式化的文档,添加文本、段落、表格、图片等元素,而无需依赖 Microsoft Word 应用程序。

主要功能
  • 创建新的 Word 文档
  • 添加段落、标题和列表
  • 设置文本格式(字体、大小、颜色、加粗、斜体等)
  • 插入表格和处理表格数据
  • 添加图片和图表
  • 管理文档样式和布局
  • 读取和修改现有文档
安装 python-docx 库:当前版本1.1.2
bash 复制代码
pip install python-docx==1.1.2

一,基本使用示例

docx_basics.py

python 复制代码
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

python 复制代码
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

python 复制代码
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

doc = 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 组成。

常用类和方法详解

  1. Document 类
    创建和打开文档:
python 复制代码
from docx import Document

# 创建新文档
doc = Document()

# 打开现有文档
doc = Document('existing_document.docx')

# 保存文档
doc.save('new_document.docx')

添加内容:

python 复制代码
# 添加段落
doc.add_paragraph('这是一个新段落')

# 添加标题
doc.add_heading('这是一级标题', level=1)

# 添加分页符
doc.add_page_break()
  1. Paragraph 类
    段落操作:
python 复制代码
# 获取段落
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倍行距
  1. Run 类
    文本格式设置:
python 复制代码
# 创建带有格式的文本
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'
  1. Table 类
    表格操作:
python 复制代码
# 添加表格
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'
  1. 样式操作
    应用和创建样式:
python 复制代码
# 应用现有样式
paragraph.style = doc.styles['Heading 1']

# 创建自定义样式
from docx.shared import Pt
from docx.enum.style import WD_STYLE_TYPE

style = doc.styles.add_style('MyStyle', WD_STYLE_TYPE.PARAGRAPH)
style.font.name = 'Arial'
style.font.size = Pt(12)
style.font.bold = True
  1. 图片和媒体
    插入图片:
python 复制代码
from docx.shared import Inches

# 添加图片
doc.add_picture('image.jpg', width=Inches(4))
  1. 页眉和页脚
    页眉页脚操作:
python 复制代码
# 获取第一个节的页眉
header = doc.sections[0].header

# 添加内容到页眉
header.paragraphs[0].text = '这是页眉'

# 获取页脚
footer = doc.sections[0].footer
footer.paragraphs[0].text = '这是页脚'

示例:创建复杂文档,包含多种元素文档的完整示例

complex_document.py

python 复制代码
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().cells
    row_cells[0].text = item
    row_cells[1].text = desc
    row_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 信息
相关推荐
豆豆(设计前端)1 分钟前
在 JavaScript 中,你可以使用 Date 对象来获取 当前日期 和 当前时间、当前年份。
开发语言·javascript·ecmascript
luofeiju8 分钟前
数字图像处理与OpenCV初探
c++·图像处理·python·opencv·计算机视觉
壹米饭11 分钟前
Java程序员学Python学习笔记一:学习python的动机与思考
java·后端·python
freyazzr26 分钟前
TCP/IP 网络编程 | Reactor事件处理模式
开发语言·网络·c++·网络协议·tcp/ip
电院工程师33 分钟前
SM3算法Python实现(无第三方库)
开发语言·python·算法·安全·密码学
YuTaoShao40 分钟前
Java八股文——MySQL「存储引擎篇」
java·开发语言·mysql
AI风老师42 分钟前
通信网络基础概念
开发语言·网络·php
王德博客1 小时前
【Java课堂笔记】Java 入门基础语法与面向对象三大特性详解
java·开发语言
CodeDevMaster1 小时前
在Jupyter Notebook中使用Conda虚拟环境
python·jupyter
wkj0011 小时前
接口实现类向上转型和向上转型解析
java·开发语言·c#