使用 python-docx 库操作 word 文档(2):在word文档中插入各种内容
使用 python-docx 库操作 word 文档(2):在word文档中插入各种内容
目录
- 使用 python-docx 库操作 word 文档(2):在word文档中插入各种内容
- 一、相关概念
- 1、Document对象
- 2、paragraph对象
- 3、run对象
- 4、table对象
- 二、添加标题
- 三、插入段落
- 四、插入块(run)
- 五、插入分页符
- 六、插入图片
- 七、插入表格
一、相关概念
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文档 |
例如:
from docx import Documentdef 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) | 添加块 |
例如:
from docx import Document
from docx.enum.style import WD_BUILTIN_STYLEdef 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)
代码如下:
from docx import Documentdef 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 = Truepar1.runs[1].underline = Truepar1.runs[2].italic = Truepar1.runs[3].underline = Truepar1.runs[4].italic = Truedoc1.save(r'D:\0工作文档\word文档\test.docx') # 保存文档if __name__ == '__main__':create_word()
程序的运行结果如下图所示:
五、插入分页符
插入分页符使用add_page_break
,代码如下:
from docx import Document
from docx.enum.style import WD_BUILTIN_STYLEdef 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 | 获取页面高度 |
例如:
from docx import Documentdef 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() | 添加行 |
例如:
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_namerow.cells[2].text = s_genderrow.cells[3].text = s_classdoc1.save(r'D:\0工作文档\typora文档\word\table.docx') # 保存文档if __name__ =='__main__':create_table()
程序的运行结果如下图所示: