【Word自动化办公】使用python-docx对Word进行操作

目录

一、环境安装

二、文档各组成结构获取

[2.1 组成结构讲解](#2.1 组成结构讲解)

[2.2 段落run对象的切分标准](#2.2 段落run对象的切分标准)

三、获取整篇文档内容

四、写入指定样式的数据

[4.1 通过add_paragraph与add_run参数添加样式](#4.1 通过add_paragraph与add_run参数添加样式)

[4.2 单独设置文本样式](#4.2 单独设置文本样式)

五、添加标题

六、换行符&换页符

七、添加图片数据

[7.1 向新文档任意位置添加图片](#7.1 向新文档任意位置添加图片)

[7.2 向已有文档添加图片](#7.2 向已有文档添加图片)

八、添加表格

[8.1 添加单个单元格](#8.1 添加单个单元格)

[8.2 批量填充表格](#8.2 批量填充表格)

[8.3 添加行列](#8.3 添加行列)

[8.4 合并单元格](#8.4 合并单元格)


一、环境安装

bash 复制代码
pip install -U python-docx==0.7.4

二、文档各组成结构获取

2.1 组成结构讲解

Word文档的组成结构:

  • .docx文档
  • 段落
  • 内容

python-docx使用说明: 和纯文本相比,.docx文件有很多结构。这些结构在python-docx中有三种不同的类型来表示。在最高一层,Document对象表示整个文档。Document对象包含一个Paragraph对象的列表,表示文档中的段落(用户在Word文档中输入时,如果按下回车,新的段落就开始了)。每个Paragraph对象都包含一个Run对象的列表。

python 复制代码
import docx

# 基于Document方法读取word文档
doc = docx.Document('./demo.docx')
# 获取指定段落
print(doc.paragraphs[0].text) # 我正在学习Python数据分析。
print(doc.paragraphs[0].runs[0].text) # 我正在学习Python数据分析。

2.2 段落run对象的切分标准

python 复制代码
import docx

# 基于Document方法读取word文档
doc = docx.Document('./demo.docx')
# 获取指定段落
print(doc.paragraphs[0].text) # 我正在学习Python数据分析。
print(doc.paragraphs[2].runs[0].text) # Python是世界上最好的语言,
print(doc.paragraphs[2].runs[1].text) # 你觉得呢?
print(doc.paragraphs[4].runs[0].text) # A plain paragraph with some
print(doc.paragraphs[4].runs[1].text) # bold
print(doc.paragraphs[4].runs[2].text) # and some
print(doc.paragraphs[4].runs[3].text) # italic

总结:

  • 中文段落中,是以标点符号进行run的构建/切分
  • 英文段落中,是以单词样式不同进行构建/切分,如这个例子,bold是加粗了,italic是斜体了。

三、获取整篇文档内容

如果你只关心Word文档中的文本,不关心样式信息,就可以利用getText()函数。它接受一个.docx文件名,返回其中文本的字符串,当然getText()函数需要自己实现。

python 复制代码
import docx

def getText(filename):
    doc = docx.Document(filename)
    fullText = []
    for para in doc.paragraphs:
        fullText.append(para.text)
    return '\n'.join(fullText)

print(getText('./demo.docx'))

四、写入指定样式的数据

4.1 通过add_paragraph与add_run参数添加样式

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
# 添加段落内容
p1 = dc.add_paragraph(text='i am a student!i love reading!', style='Heading1')
p2 = dc.add_paragraph(text='i am a worker!i love Python!', style='Heading5')
# 添加内容
p2.add_run(text='我是内容1')
p2.add_run(text='我是内容2', style='QuoteChar')
dc.save('./new_word.docx')

4.2 单独设置文本样式

python 复制代码
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH

# 创建一个全新的文档对象
document = Document()
# 添加段落
p = document.add_paragraph()
# 添加内容
run = p.add_run('个人简历')
run.font.size = Pt(26) # 设置字体大小
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中
document.save('./new_word.docx')

五、添加标题

  • 添加标题
    • 调用add_heading()将添加一个段落,并使用一种标题样式
    • add_heading()的参数,是一个标题文本的字符串,以及一个从0到4的整数。整数0表示标题是Title样式,这用于文档的顶部。整数1到4是不同的标题层次,1是主要的标题,4是最低层的子标题。add_heading()返回一个paragraph对象,让你不必多花一步从Document对象中提取它。
python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
dc.add_heading('我是标题', 0)
dc.save('./new_word.docx')

六、换行符&换页符

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
dc.add_paragraph('i am a teacher!')
dc.paragraphs[0].runs[0].add_break() # 添加一个换行符
dc.paragraphs[0].add_run('hello!!!')
dc.add_paragraph('i am a student!')
dc.save('./new_word.docx')
python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
dc.add_paragraph('i am a teacher!')
dc.paragraphs[0].runs[0].add_break(docx.text.WD_BREAK.PAGE) # 添加一个换页符
dc.paragraphs[0].add_run('hello!!!')
dc.add_paragraph('i am a student!')
dc.save('./new_word.docx')

七、添加图片数据

7.1 向新文档任意位置添加图片

7.2 向已有文档添加图片

注意:向已有文档添加图片不能放在任意位置,只能追加到最后。

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document('./new_word.docx')
dc.add_paragraph('i am a teacher!')
dc.add_picture('./python.jpg', width=docx.shared.Inches(3), height=docx.shared.Cm(5))
dc.add_paragraph('i am a student!')
dc.save('./new_word.docx')

八、添加表格

8.1 添加单个单元格

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')
# 返回所有行
print(list(tb.rows))
# 返回所有列
print(list(tb.columns))
# 向单元格中添加数据 第一行的第一个单元格
tb.rows[0].cells[0].add_paragraph('hello')
dc.save('./new_word.docx')

8.2 批量填充表格

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')
# 批量填充表格
alist = ['泰勒斯', '毕达哥拉斯', '赫拉克利特', '苏格拉底', '柏拉图', '亚里士多德', '伏尔泰', '卢梭', '康德']
i = 0
for row in tb.rows:
    for cell in row.cells:
        cell.add_paragraph(text=alist[i])
        i += 1
dc.save('./new_word.docx')

8.3 添加行列

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')
# 添加单个行
tb.add_row()
# 添加单个列
tb.add_column()
dc.save('./new_word.docx')

8.4 合并单元格

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')

# 获取第一行第二列的单元格
c1 = tb.cell(0, 1)
# 获取第二行第二列的单元格
c2 = tb.cell(1, 1)

# 合并单元格
c1.merge(c2)
dc.save('./new_word.docx')
相关推荐
SCBAiotAigc几秒前
opencv-python学习笔记(一):画线、打开摄像头
人工智能·python·opencv
lihui_cbdd2 分钟前
[故障排查] NFS 存储集群卡顿的完整排查记录:谁在深夜疯狂读写?
linux·运维
狂放不羁霸3 分钟前
VSCode | 设置保存时自动格式化 Python 文件
ide·vscode·python
may_一一6 分钟前
selenium自动化调用接口为null问题处理
selenium·测试工具·自动化
掘根7 分钟前
【消息队列项目】客户端搭建与测试
运维·服务器·中间件
ONE_SIX_MIX7 分钟前
debian 13 安装 nvidia-driver 后,登录后黑屏,只能看到左上角光标 或 一个鼠标 的问题解决
运维·debian
虹科数字化与AR8 分钟前
安宝特方案丨AR电力·变电篇:筑牢变电站安全运维
运维·安全·ar
唐叔在学习8 分钟前
buildozer打包详解:细说那些我踩过的坑
android·后端·python
代码游侠10 分钟前
应用——Linux Socket编程
运维·服务器·开发语言·笔记·网络协议·学习
轻竹办公PPT12 分钟前
2026 年工作计划 PPT 制作,对比几种 AI 生成思路
人工智能·python·powerpoint