• Python python-docx 使用教程


    openpyxl是Python下的Word库,它能够很容易的对Word文档进行读取

    • 安装方法pip install python-docx
    • 国内镜像安装pip install -i https://mirrors.aliyun.com/pypi/simple/ python-docx(推荐,安装更快)
    • 中文文档https://www.osgeo.cn/python-docx/index.html#
    • 文档、段落、文字块之间的关系
      • 一个Word文档(document)由若干个段落(paragraph)组成;
      • 一个段落(paragraph)可以由若干个文字块(run)组成;
        在这里插入图片描述

    文档对象 - Document

    • add_heading(text=‘’, level=1):添加标题
    • add_paragraph(text=‘’, style=None):添加段落
    • add_page_break():添加换页符
    • add_table(rows, cols, style=None):添加表格
    • add_picture(image_path_or_stream, width=None, height=None):添加图片
    • paragraphs:获取文档内所有段落集合
    • tables:获取文档内所有表格集合
    • styles:获取文档内所有可用样式集合
    • save(path_or_stream):保存文档

    段落对象 - paragraph

    • add_run(text=None, style=None):添加标题
    • insert_paragraph_before(text=None, style=None):添加段落
    • alignment:获取或设置段落对齐方式
    • text:获取或设置段落文本
    • runs:获取段落内所有文字块集合
    • style:获取或设置段落样式

    文字块对象 - run

    • text:获取或设置文字块文本
    • bold:获取或设置加粗
    • italic:获取或设置倾斜

    表格对象 - table

    • add_row(text=None, style=None):添加行
    • rows:获取所有
    • columns:获取所有列
    • cell(row_idx, col_idx):根据行列索引获取指定单元格,其中(0,0)是最左上角的单元格

    写入文件

    from docx import Document
    from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
    from docx.shared import Cm, RGBColor, Pt
    
    doc = Document()
    """添加标题"""
    para_head = doc.add_heading("正文一级标题",level=1)  # level代表标题级别
    para_head.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER     # 标题居中
    """添加正文段落"""
    p1 = doc.add_paragraph("我是正文第一段")
    p1.text += ",第一段追加文本"
    p2 = doc.add_paragraph("我是正文第二段")
    p2.insert_paragraph_before("我在第二段之前")
    # doc.add_page_break()    # 添加分页符
    """添加带文字块的段落"""
    p3 = doc.add_paragraph("我是带样式的段落——")
    p3.add_run("加粗").bold = True
    p3.add_run("倾斜").italic = True
    p3.add_run("正常")
    red_run = p3.add_run("20,加粗,红色")
    red_run.font.size = Pt(20)
    red_run.font.bold = True
    red_run.font.color.rgb = RGBColor(255,0,0)
    """添加有序和无序列表"""
    opts = ['选项1','选项2', '选项3']
    for opt in opts:    # 有序列表
        doc.add_paragraph(opt, style='List Number')
    for opt in opts:    # 无序列表
        doc.add_paragraph(opt, style='List Bullet')
    """添加表格"""
    list1 = [["姓名","性别","家庭地址"],["唐僧","男","湖北省"],
             ["孙悟空","男","北京市"],["猪八戒","男","广东省"]]
    table = doc.add_table(rows=4,cols=3)    # 创建指定行列的表格
    for row_index in range(4):
        row_cells = table.rows[row_index].cells
        for cell_index in range(3):
            row_cells[cell_index].text = str(list1[row_index][cell_index])
    row_cells = table.add_row().cells   # 添加一行
    row_cells[0].text = "沙和尚"
    row_cells[1].text = "男"
    row_cells[2].text = "湖南省"
    """添加图片"""
    doc.add_picture(r"resource/python.png")     # 默认大小
    doc.add_picture(r"resource/word.png",width=Cm(5),height=Cm(5))  # 指定宽高
    """保存文档"""
    doc.save(r"resource/Test.docx")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    在这里插入图片描述

    读取文件

    获取段落

    from docx import Document
    path = r"resource/Test.docx"
    """获取段落"""
    doc = Document(path)    # 读取的doc可通过save方法保存
    for paragraph in doc.paragraphs:
        print(paragraph.text,paragraph.style.name)  # 段落text可修改,文字块、表格同样
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    获取文字块

    from docx import Document
    path = r"resource/Test.docx"
    """获取文字块"""
    p5 = doc.paragraphs[4]
    for run in p5.runs:
        print(run.text,run.bold,run.italic)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    获取表格

    from docx import Document
    path = r"resource/Test.docx"
    """获取表格"""
    table0 = doc.tables[0]
    for row in table0.rows:     # 获取表格所有行
        for cell in row.cells:      # 获取表格行的所有单元格
            print(cell.text,end=" ")
        print()
    print(table0.cell(2,0).text)    # 根据行列索引获取指定单元格
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    获取图片

    import os
    from docx import Document
    path = r"resource/Test.docx"
    """获取图片"""
    for rel in doc.part.rels:  # 获取所有part对象的id(rel→str,例如rId3)
        rel = doc.part.rels[rel]    # 根据id获取文件对象
        if "image" in rel.target_ref:  # 根据part对象的名称判断是否是图片(例如media/image1.jpeg)
            with open("resource/"+os.path.basename(rel.target_ref), "wb") as f:
                f.write(rel.target_part.blob)  # 将图片以二进制格式写入
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    获取所有可用样式

    for style in doc.styles:
        print(style)
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    JavaScript基础语法02
    YOLOv5-IoU
    App 软件开发《判断5》试卷及答案
    一文了解Linux内核的Oops
    华为云云耀云服务器L实例评测|使用Portainer快速部署物联网低代码平台Node-RED
    软考 系统架构设计师系列知识点之基于架构的软件开发方法ABSD(7)
    15.代理模式
    分布式单元化
    OutlinePass色差问题
    线性回归实现原理
  • 原文地址:https://blog.csdn.net/qq_40910781/article/details/133610814