当前位置 : 主页 > 编程语言 > python >

Python利用docx模块实现快速操作word文件

来源:互联网 收集:自由互联 发布时间:2023-01-30
目录 一、基础内容 1. 基本概念 2. 操作word文档 二、单独设置内容样式 1. 字体相关样式 三、样式演示 四、制作表格 1. 表格 2.行列对象 3. 单元格对象 一、基础内容 安装第三方库的时候
目录
  • 一、基础内容
    • 1. 基本概念
    • 2. 操作word文档
  • 二、单独设置内容样式
    • 1. 字体相关样式
  • 三、样式演示
    • 四、制作表格
      • 1. 表格
      • 2.行列对象
      • 3. 单元格对象

    一、基础内容

    安装第三方库的时候安装:python-docx

    from docx import Document
    

    Pt - 像素、Cm - 厘米、Inches - 英寸

    from docx.shared import Pt, Cm, Inches, RGBColor
    

    1. 基本概念

    1)Document对象(文档对象) - 代表一个word文件

    2)heading(标题)

    3)paragraph(段落) - 一段文字

    4) run - 多个run可以拼成一个段落,不同的run可以单独设置不同的样式

    5)table(表格) - 多行多列的表格

    6)picture(图片) - 文档中插入的图片

    2. 操作word文档

    1)创建空的word文档

    doc = Document()
    

    2) 添加标题

    Document对象.add_heading(标题内容,level=1)

    level的取值范围是:1 ~ 9,如果是0表示普通段落

    h1 = doc.add_heading('数据分析报告', level=1)      # 添加一个一级标题
    

    3)添加段落

    Document对象.add_paragraph(段落内容)

    3.1 直接添加整个段落文字 ```python

    p1 = doc.add_paragraph('此次调研数据主要通过问卷发放的形式获取,在紫金港全校范围内开展。样本数据通过简单随机抽样和分层抽样相结合的方法,进行相对广泛的数据采集与调研,选取的样本量较大,获得的数据客观真实。以下为具体的数据分析结果:')
    
    h2 = doc.add_heading('一、总体情况', level=2)
    

    3.2 分段添加段落问题

    段落对象.add_run(内容)

    p2 = doc.add_paragraph('共发放问卷:')
    run = p2.add_run('320 份')
    run.font.color.rgb = RGBColor(255, 0, 0)
    
    p3 = doc.add_paragraph()
    run1 = p3.add_run('回收问卷: ')
    run2 = p3.add_run('296 份')
    run3 = p3.add_run(',回收率')
    run4 = p3.add_run('92.5%')
    

    添加分页(换页)

    doc.add_page_break()
    
    
    h3 = doc.add_heading('二、样本代表性', level=2)
    
    h4 = doc.add_heading('(一)性别:分布', level=3)
    

    4) 添加表格

    Document对象.add_table(行数, 列数)

    table = doc.add_table(3, 3, style="Light Grid")    # 'Medium Grid'
    table.cell(0, 0).text = '性别'
    table.cell(0, 1).text = '人数'
    table.cell(1, 0).text = '男'
    

    5)添加图片

    doc.add_paragraph()
    

    如果添加图片的时候没有设置宽高,图片按照原图大小显示

    doc.add_picture('files/img1.png', width=Cm(13))
    doc.add_picture('files/liubei.jpg', width=Cm(13))
    

    保存word文档

    doc.save('files/demo1.docx')
    

    二、单独设置内容样式

    from docx import Document
    from docx.shared import Pt, Cm, Inches, RGBColor
    from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
    
    doc = Document()
    

    1. 字体相关样式

    1.1 标题相关样式

    h1 = doc.add_heading(level=1)
    run = h1.add_run('数据分析报告')
    

    设置标题的字体大小

    h1.style.font.size = Pt(25)
    

    设置文字颜色

    h1.style.font.color.rgb = RGBColor(97, 197, 84)
    

    文字居中(CENTER、LEFT、RIGHT)

    h1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
    

    设置字体名称(标题的字体名称不能直接设置到标题对象上的,需要设置到提供内容的run对象上)

    run.font.name = '楷体'
    

    注意:英文字体对应的字体名可以直接设置; 如果是中文字体名称,必须加上下面这段代码才会有效

    注意:中文字体,必须先使用,再设置有效性

    from docx.oxml.ns import qn
    r = run._element.rPr.rFonts
    r.set(qn('w:eastAsia'), '楷体')
    
    
    h1 = doc.add_heading(level=2)
    run = h1.add_run('hello world!')
    run.font.name = 'Arima Koshi'
    

    1.2 段落相关样式

    p1 = doc.add_paragraph('此次调研数据主要通过问卷发放的形式获取,在紫金港全校范围内开展。样本数据通过简单随机抽样和分层抽样相结合的方法,进行相对广泛的数据采集与调研,选取的样本量较大,获得的数据客观真实。以下为具体的数据分析结果:')
    

    注意:如果直接设置段落对象相关样式,样式会作用于整个文档中所有的段落

    p1.style.font.size = Pt(15) # 设置字体大小
    p1.style.font.color.rgb = RGBColor(75, 0, 130) # 设置字体颜色
    p1.style.font.bold = True # 是否加粗
    p1.style.font.italic = True # 是否倾斜
    p1.style.font.name = ‘宋体' # 设置字体名称
    r = p1.style._element.rPr.rFonts
    r.set(qn(‘w:eastAsia'), ‘宋体')
    
    p1.style.font.underline = True # 添加下划线
    p1.style.font.strike = True # 添加中划线(删除线)
    p1.style.font.shadow = True # 添加阴影效果
    

    1.3 间距相关样式

    注意:间距相关样式,只会作用于当前段落对象

    p1.paragraph_format.line_spacing = 1.5          # 设置行间距
    p1.paragraph_format.space_before = Pt(120)      # 段前间距
    p1.paragraph_format.space_after = Pt(120)       # 段后间距
    p1.paragraph_format.first_line_indent = Pt(30)  # 首行缩进
    
    h2 = doc.add_heading('一、总体情况', level=2)
    

    1.4 通过run添加样式

    p2 = doc.add_paragraph('共发放问卷:')
    
    p2.style.font.bold = True
    
    run = p2.add_run('320 份')
    run.font.color.rgb = RGBColor(255, 0, 0)
    
    
    p3 = doc.add_paragraph()
    run1 = p3.add_run('回收问卷: ')
    run1.font.bold = True
    
    run2 = p3.add_run('296 份')
    run2.font.size = Pt(18)
    
    run3 = p3.add_run(',回收率')
    run3.font.italic = True
    
    run4 = p3.add_run('92.5%')
    run4.font.color.rgb = RGBColor(0, 0, 200)
    
    print(p3.runs)
    
    h3 = doc.add_heading('二、样本代表性', level=2)
    

    段落对象.runs - 获取构建整个段落的所有的run对象, 返回列表

    直接创建段落对象的时候,会自动在段落中创建段落内容对应的run对象

    p4 = doc.add_paragraph('通过最终问卷统计情况来看,此次问卷发放充分考虑到性别、专业大类以及年级的分布情况,样本分布合理,所选取的样本具有相对的典型性与代表性,可以以此为样本进行总体的推断统计以及之后的相关分析。样本具体分布情况如下:')
    p4.runs[0].font.size = Pt(15)
    p4.runs[0].font.color.rgb = RGBColor(70, 130, 180)
    p4.runs[0].font.underline = True
    
    
    h4 = doc.add_heading('(一)性别:分布', level=3)
    table = doc.add_table(3, 3)
    table.cell(0, 0).text = '性别'
    table.cell(0, 1).text = '人数'
    table.cell(1, 0).text = '男'
    
    doc.add_paragraph()
    doc.add_picture('files/img1.png', width=Cm(13))
    doc.add_picture('files/liubei.jpg', width=Cm(13))
    
    doc.save('files/demo2.docx')
    

    三、样式演示

    from docx import Document
    from docx.enum.style import WD_STYLE_TYPE
    
    doc = Document()
    
    # 1.获取所有已经写好的主题样式
    styles = doc.styles
    for s in styles:
        print(s)
    
    print('------------------------------------------华丽的分割线------------------------------------------------')
    
    # 2. 字符样式  -  设置在run对象上的样式
    doc.add_heading('===========1.所有的字符样式名和对应的效果============')
    # 获取所有字符相关的样式的名称和显示效果
    p1 = doc.add_paragraph()
    for s in styles:
        # Character
        if s.type == WD_STYLE_TYPE.CHARACTER:
            run = p1.add_run(f'字符样式名称: {s.name}\n', style=s)
    
    # 使用方法:
    p2 = doc.add_paragraph()
    p2.add_run('Hello World!', style='Intense Reference')
    
    print('------------------------------------------华丽的分割线------------------------------------------------')
    # 3. 段落样式   -   设置在段落对象上的样式
    doc.add_heading('===========2.所有段落样式名和对应的效果============')
    for s in styles:
        if s.type == WD_STYLE_TYPE.PARAGRAPH:
            doc.add_paragraph(f'段落样式名称:{s.name}', style=s)
    
    doc.add_paragraph('hello world!', 'Title')
    
    print('------------------------------------------华丽的分割线------------------------------------------------')
    # 4. 表格样式   -   设置在表格对象上的样式
    for s in styles:
        if s.type == WD_STYLE_TYPE.TABLE:
            doc.add_paragraph(f'表格样式名称:{s.name}')
            doc.add_table(3, 3, style=s)
            doc.add_paragraph('\n')
    
    doc.add_table(5, 4, style='Medium Grid 1 Accent 4')
    
    
    doc.save('files/demo3.docx')

    四、制作表格

    from docx import Document
    from docx.shared import Pt, Cm, RGBColor
    from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
    from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT

    表格基本概念:table(表格)、row(行)

    doc = Document()

    1. 表格

    1.1创建一个表格

    table = doc.add_table(3, 3, style="Light Shading Accent 4")
    table.cell(2, 0).text = 'abc'
    table.cell(0, 0).text = '姓名'
    table.cell(0, 1).text = '年龄'
    table.cell(0, 2).text = '分数'
    table.cell(1, 1).text = '19'
    table.cell(1, 3).text = '你好'
    

    1.2添加行列

    table.add_row()     # 在最下面添加一行
    table.add_column(Pt(100))  # 在最右边添加一列
    

    1.3 设置表格样式

    设置表格样式,会作用于整个表格中所有的单元格

    table.style.font.size = Pt(15)
    table.style.font.color.rgb = RGBColor(223, 178, 56)
    table.style.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
    

    2.行列对象

    print(table.rows)       # 获取所有的行(返回一个容器,容器中的元素是所有的行对象)
    print(table.columns)    # 获取所有的列
    

    遍历获取所有的行

    for row in table.rows:
        # 获取指定行所有的单元格
        print(row.cells)
        # 获取指定行的高度
        print(row.height)
        # 获取指定行的下标(下标值从0开始)
        print(row._index)
        # 修改每一行的高度
        # row.height = Pt(50)
    
        # 单独设置指定行的高度
        if row._index == 0:
            row.height = Pt(50)
        print('------------------------------------------华丽的分割线------------------------------------------------')
    

    3. 单元格对象

    3.1获取单元格

    cell1 = table.cell(0, 0)
    cell2 = table.cell(0, 1)
    cell3 = table.cell(1, 1)
    cell4 = table.cell(2, 2)
    cell5 = table.cell(1, 2)
    

    3.2修改单元格内容

    cell1.text = 'Name'
    cell4.text = '98分'
    
    print(cell5.paragraphs)     # [<docx.text.paragraph.Paragraph object at 0x7f81e012a490>]
    p = cell5.paragraphs[0]
    r1 = p.add_run('100')
    r2 = p.add_run('分')
    r2.font.color.rgb = RGBColor(255, 0, 0)
    

    3.3 合并单元格(只能列合并)

    cell11 = table.cell(3, 1)
    cell22 = table.cell(3, 2)
    cell33 = table.cell(3, 3)
    cell11.merge(cell22)
    cell11.merge(cell33)
    

    3.4 设置单元格样式

    设置垂直对齐方式(TOP、BOTTOM、CENTER)

    cell1.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
    
    p1 = cell1.paragraphs[0]
    run1 = p1.runs[0]
    

    设置字体

    run1.font.color.rgb = RGBColor(200, 10, 10)
    run1.font.size = Pt(20)
    

    设置水平对齐方式(LEFT\RIGHT\CENTER)

    p1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
    ​​​​​​​
    doc.save('files/demo4.docx')

    到此这篇关于Python利用docx模块实现快速操作word文件的文章就介绍到这了,更多相关Python docx操作word内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

    上一篇:Python日期时间处理库dateutil详解
    下一篇:没有了
    网友评论