使用 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()

程序的运行结果如下图所示:

相关推荐
kunge1v53 小时前
学习爬虫第五天:自动化爬虫
爬虫·python·自动化
m***记3 小时前
Python 自动化办公的 10 大脚本
windows·python·自动化
人间乄惊鸿客3 小时前
python - 第二天
python
江上月5134 小时前
django与vue3的对接流程详解(上)
后端·python·django
老歌老听老掉牙4 小时前
基于 PyQt5 实现刀具类型选择界面的设计与交互逻辑
python·qt·交互
可触的未来,发芽的智生4 小时前
触摸未来2025.10.09:记忆的突围,从64个神经元到人工海马体神经网络
人工智能·python·神经网络·机器学习·架构
川石课堂软件测试4 小时前
什么是BUG,你对BUG的了解有多少?
android·linux·服务器·python·功能测试·bug·安全性测试
风之所往_5 小时前
使用 openpyxl 生成 excel 折线图
python·excel·openpyxl
努力也学不会java5 小时前
【Java并发】揭秘Lock体系 -- 深入理解ReentrantReadWriteLock
java·开发语言·python·机器学习