使用 python-docx 库操作 word 文档(2):在word文档中插入各种内容
目录
- [使用 python-docx 库操作 word 文档(2):在word文档中插入各种内容](#使用 python-docx 库操作 word 文档(2):在word文档中插入各种内容)
一、相关概念
1、Document对象
Document
对象表示整个文档。
2、paragraph对象
每一个段落代表一个paragraph
对象。
3、run对象
一个run
对象指的是paragraph
对象中相同样式的连续文字。
4、table对象
table
对象指的是一个单独的表格。一个表包含行(row)、列(column)和单元格(cell)。
以上各类对象之间的关系如下图所示:

二、添加标题
本节用到的函数及属性如下表所示:
函数/属性 | 用法 |
---|---|
docx.Document() | 创建word文档 |
doc.add_heading(content,level) | 添加标题 |
doc.save(path) | 保存word文档 |
例如:
python
from docx import Document
def create_word():
doc1 = Document() # 创建word文档
doc1.add_heading('欢迎使用Python创建Word',0) # 增加0级标题
doc1.add_heading('Python操作 增加1级标题',1) # 增加1级标题
doc1.add_heading('Python操作 增加2级标题',2) # 增加2级标题
doc1.save(r'D:\0工作文档\word文档\test.docx') # 保存文档
if __name__ == '__main__':
create_word()
程序的运行结果如下图所示:

三、插入段落
本节用到的函数及属性如下表所示:
函数/属性 | 用法 |
---|---|
doc.add.paragraph(content,style) | 添加段落 |
paragraph.add_run(content) | 添加块 |
例如:
python
from docx import Document
from docx.enum.style import WD_BUILTIN_STYLE
def create_word():
doc1 = Document() # 创建一个word文档
doc1.add_paragraph('七律·长征','heading 1') # 增加段落信息,使用【标题1】样式
par1=doc1.add_paragraph('作者:毛泽东\n')
par1.add_run('红军不怕远征难,万水千山只等闲。\n')
par1.add_run('五岭逶迤腾细浪,乌蒙磅礴走泥丸。\n')
par1.add_run('金沙水拍云崖暖,大渡桥横铁索寒。\n')
par1.add_run('更喜岷山千里雪,三军过后尽开颜。\n')
doc1.add_paragraph('译文','heading 2')
doc1.add_paragraph('红军不怕万里长征路上的一切艰难困苦,把千山万水都看得极为平常。\n五岭山脉绵延不绝,可在红军眼里不过像翻腾着的细小波浪;乌蒙山高大雄伟,在红军眼里也不过像在脚下滚过的泥丸。\n金沙江浊浪滔天,湍急的流水拍击着高耸的山崖,溅起阵阵雾水,像是冒出蒸汽一样。大渡河险桥横架,晃动着凌空高悬的根根铁索,寒意阵阵。\n更加令人欣喜的是千里岷山,皑皑白雪,红军翻越过去以后人人心情开朗,个个笑逐颜开。')
# 增加无序列表
doc1.add_paragraph('新乡市的高校:')
doc1.add_paragraph('河南科技学院',style='List Bullet')
doc1.add_paragraph('河南医药大学',style='List Bullet')
doc1.add_paragraph('河南师范大学',style='List Bullet')
doc1.add_paragraph('河南工学院',style='List Bullet')
doc1.add_paragraph('新乡学院',style='List Bullet')
# 增加有序列表
doc1.add_paragraph('新乡市的高校:')
doc1.add_paragraph('河南师范大学',style='List Number')
doc1.add_paragraph('河南医药大学',style='List Number')
doc1.add_paragraph('河南科技学院',style='List Number')
doc1.add_paragraph('河南工学院',style='List Number')
doc1.add_paragraph('新乡学院',style='List Number')
# 保存word文档
doc1.save(r'D:\0工作文档\word文档\test.docx') # 保存文档
if __name__ =='__main__':
create_word()
程序的运行结果如下图所示:

四、插入块(run)
代码如下:
python
from docx import Document
def create_word():
doc1 = Document() # 创建一个word文档
doc1.add_paragraph('七律·长征', 'Title') # 增加段落信息,使用【标题1】样式
par1 = doc1.add_paragraph('作者:毛泽东\n')
par1.add_run('红军不怕远征难,万水千山只等闲。\n')
par1.add_run('五岭逶迤腾细浪,乌蒙磅礴走泥丸。\n')
par1.add_run('金沙水拍云崖暖,大渡桥横铁索寒。\n')
par1.add_run('更喜岷山千里雪,三军过后尽开颜。')
par1.runs[0].bold = True
par1.runs[1].underline = True
par1.runs[2].italic = True
par1.runs[3].underline = True
par1.runs[4].italic = True
doc1.save(r'D:\0工作文档\word文档\test.docx') # 保存文档
if __name__ == '__main__':
create_word()
程序的运行结果如下图所示:

五、插入分页符
插入分页符使用add_page_break
,代码如下:
python
from docx import Document
from docx.enum.style import WD_BUILTIN_STYLE
def create_word():
doc1 = Document() # 创建一个word文档
doc1.add_paragraph('七律·长征','title') # 增加段落信息,使用【标题1】样式
par1=doc1.add_paragraph('作者:毛泽东\n')
par1.add_run('红军不怕远征难,万水千山只等闲。\n')
par1.add_run('五岭逶迤腾细浪,乌蒙磅礴走泥丸。\n')
par1.add_run('金沙水拍云崖暖,大渡桥横铁索寒。\n')
par1.add_run('更喜岷山千里雪,三军过后尽开颜。\n')
doc1.add_paragraph('译文','titile')
doc1.add_paragraph('红军不怕万里长征路上的一切艰难困苦,把千山万水都看得极为平常。\n五岭山脉绵延不绝,可在红军眼里不过像翻腾着的细小波浪;乌蒙山高大雄伟,在红军眼里也不过像在脚下滚过的泥丸。\n金沙江浊浪滔天,湍急的流水拍击着高耸的山崖,溅起阵阵雾水,像是冒出蒸汽一样。大渡河险桥横架,晃动着凌空高悬的根根铁索,寒意阵阵。\n更加令人欣喜的是千里岷山,皑皑白雪,红军翻越过去以后人人心情开朗,个个笑逐颜开。')
doc1.add_page_break() # 在此处插入一个分页符
# 增加无序列表
doc1.add_paragraph('新乡市的高校:')
doc1.add_paragraph('河南科技学院',style='List Bullet')
doc1.add_paragraph('河南医药大学',style='List Bullet')
doc1.add_paragraph('河南师范大学',style='List Bullet')
doc1.add_paragraph('河南工学院',style='List Bullet')
doc1.add_paragraph('新乡学院',style='List Bullet')
# 增加有序列表
doc1.add_paragraph('新乡市的高校:')
doc1.add_paragraph('河南师范大学',style='List Bullet')
doc1.add_paragraph('河南医药大学',style='List Bullet')
doc1.add_paragraph('河南科技学院',style='List Bullet')
doc1.add_paragraph('河南工学院',style='List Bullet')
doc1.add_paragraph('新乡学院',style='List Bullet')
# 保存word文档
doc1.save(r'D:\0工作文档\word文档\test.docx') # 保存文档
if __name__ =='__main__':
create_word()
六、插入图片
本节用到的函数及属性如下表所示:
函数/属性 | 用法 |
---|---|
doc.add_picture(path,width,height) | 添加图片 |
pic.width | 获取图片宽度 |
pic.height | 获取图片高度 |
doc.sections[0].page_width | 获取页面宽度 |
doc.sections[0].left_margin | 获取页面高度 |
例如:
python
from docx import Document
def create_word():
doc1 = Document()
page_width = doc1.sections[0].page_width # 获取文档的宽度
page_left_width = doc1.sections[0].left_margin # 获取文档的左边距
print(page_width)
print(page_left_width)
content_width = page_width-page_left_width*2 # 获取中间内容的宽度
print(content_width)
doc1.add_heading("插入图片如下",level=0)
# 增加图片,设置图片的宽度占文档宽度的一半
pic = doc1.add_picture(r'D:\0工作文档\typora文档\word\pic01.jpg',int(content_width*0.5))
doc1.save(r'D:\0工作文档\typora文档\word\pic.docx') # 保存文档
if __name__ == '__main__':
create_word()
程序的运行结果如下图所示:
七、插入表格
本节用到的函数及属性如下表所示:
函数/属性 | 用法 |
---|---|
doc.add_table(rows=x,cols=x) | 添加表格 |
table.add_row() | 添加行 |
例如:
python
from docx import Document
def create_table():
doc1 = Document() # 创建word文档
t1 = doc1.add_table(1,4) # 添加一个1行4列的表格
# 设置表格的内容
t1.rows[0].cells[0].text = '学号'
t1.rows[0].cells[1].text = '姓名'
t1.rows[0].cells[2].text = '性别'
t1.rows[0].cells[3].text = '班级'
data = (
(1,'刘备','男','物流231班'),
(2,'孙权','女','物流231班'),
(3,'曹操','男','物流232班')
)
for s_id,s_name,s_gender,s_class in data:
row = t1.add_row() # 增加一行数据
row.cells[0].text = str(s_id) # 注意:要把数值型转换为文本类型
row.cells[1].text = s_name
row.cells[2].text = s_gender
row.cells[3].text = s_class
doc1.save(r'D:\0工作文档\typora文档\word\table.docx') # 保存文档
if __name__ =='__main__':
create_table()
程序的运行结果如下图所示:
