「这是我参与2022首次更文挑战的第1天,活动详情查看: 2022首次更文挑战

本篇博客为大家带来 Python 操作 docx 文档相关知识点。 主要涉及的内容为 python-docx ,一款可以操作 Word 文档(仅支持 docx)的第三方库。

python-docx 不支持 doc 文档,一定要注意该点,如果使用 doc 文档,需要提前将其用 Word 相关软件转换为 docx 格式。 doc docx 是存在本质差异的,一个是二进制,另一个 XML 格式的文件。

模块的安装 pip install python-docx

以下网址首先准备好

  • 官方手册: python-docx.readthedocs.io/en/latest/i…
  • pypi 官方地址: pypi.org/project/pyt…
  • 资料准备完毕,即可进入编码环节。

    创建一个文档

    第一个需求,创建一个文档,并在里面写入各种信息。

    先实现第一步,写入一个标题

    注意下文中的 add_heading() 函数的用法。

    from docx import Document
    # 创建 Document 对象,等价于在电脑上打开一个 Word 文档
    document = Document()
    # 在 Word 文档中添加一个标题
    document.add_heading('这是一个标题',level=0)
    # 保存文档
    document.save('demo.docx')
    

    添加文字段落

    注意下文中 add_paragraph() 函数添加段落,使用 add_run() 追加文本

    from docx import Document
    # 创建 Document 对象,等价于在电脑上打开一个 Word 文档
    document = Document()
    # 在 Word 文档中添加一个标题
    document.add_heading('这是一个标题', level=0)
    # 文档添加段落
    p = document.add_paragraph('这是白给的段落')
    # 添加带样式的文字
    # 添加段落,文本可以包含制表符(\t)、换行符(\n)或回车符(\r)等
    # add_run() 在段落后面追加文本
    p.add_run('\n我倾斜了').italic = True  # 添加一个倾斜文字
    p.add_run('\n我加粗了').bold = True  # 添加一个加粗文字
    # 保存文档
    document.save('demo.docx')
    

    在段落前面增加文字

    p.add_run('\n我倾斜了').italic = True  # 添加一个倾斜文字
    p.add_run('\n我加粗了').bold = True  # 添加一个加粗文字
    # 段落前面插入内容
    prep_p = p.insert_paragraph_before('段落之前插入内容')
    

    段落还可以添加分页符,代码如下所示:

    # 段落前面插入内容
    prep_p = p.insert_paragraph_before('段落之前插入内容')
    document.add_page_break()
    p1 = document.add_paragraph('新页新段落')
    

    列表的添加

    无序列表的添加

    # 添加列表(前面一个小圆点)
    document.add_paragraph('我前面是小圆点', style='List Bullet')
    # 添加列表(前面一个小圆点)
    document.add_paragraph('第二个小圆点', style='List Bullet')
    

    有序列表的添加

    # 添加列表(前面数字)
    document.add_paragraph('我前面是数字', style='List Number')
    # 添加列表(前面数字)
    document.add_paragraph('第二个数字', style='List Number')
    

    图片的添加

    Document 对象具备的方法如下所示:

  • add_heading(self, text='', level=1):添加标题;
  • add_page_break(self):分页符;
  • add_paragraph(self, text='', style=None):添加段落;
  • add_picture(self, image_path_or_stream, width=None, height=None):添加图片;
  • add_section(self, start_type=2):添加节;
  • add_table(self, rows, cols, style=None):添加表格;
  • 本部分重点学习 add_picture() 方法。

    document.add_picture(r"../9.png", width=Inches(1))
    

    add_picture() 函数中参数 image_path_or_stream 可以为相对地址或者绝对地址,也可以是一个图片数据流,上述代码中 Inches 表示英寸,除此之外, python-docx 还提供了厘米 (Cm) ,如设置 1厘米: Cm(1) ,使用的时候需要提前导入 from docx.shared import Inches, Cm

    使用 add_table() 函数,可以在 Word 文档中添加表格。

    p1 = document.add_paragraph('新页新段落')
    # 添加一个 2×2 表格
    table = document.add_table(rows=2, cols=2)
    # 获取第1行第2列单元格
    cell = table.cell(0, 1)
    # 设置单元格文本
    cell.text = '第1行第2列'
    # 获取第2行
    row = table.rows[1]
    row.cells[0].text = '橡皮擦'
    row.cells[1].text = '乔喻'
    

    学习的时候注意一下相关注释,即可掌握该部分内容。

    相关样式设置

    设置格式需要用 add_run() ,直接使用 add_paragraph() 生成的段落不能直接设置字体等样式。

    # 模块的导入
    from docx.shared import Pt, Cm, Inches
    from docx.oxml.ns import qn
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    from docx.shared import RGBColor
    # 一级标题 level=0
    head0 = document.add_heading(level=0)
    # 标题居中
    head0.alignment = WD_ALIGN_PARAGRAPH.CENTER
    title_run = head0.add_run('这是一个居中的标题', )
    title_run.font.size = Pt(24)
    # 标题英文字体
    title_run.font.name = 'Times New Roman'
    # 标题中文字体
    title_run.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
    # 字体颜色
    title_run.font.color.rgb = RGBColor(4, 60, 169)
    

    其中 WD_ALIGN_PARAGRAPH 对象表示段落对其的方式,其值包括如下内容

  • WD_ALIGN_PARAGRAPH. LEFT:左对齐;
  • WD_ALIGN_PARAGRAPH. CENTER:居中对其;
  • WD_ALIGN_PARAGRAPH. RIGHT:右对齐;
  • WD_ALIGN_PARAGRAPH. JUSTIFY:两端对齐;
  • 行距,段间距 line_spacing 属性用来设置行距, space_before 表示段前距, space_after 表示段后距。

    斜体,下划线,粗体设置

    font.italic = True  #设置斜体
    font.underline = True  #设置下划线
    font.bold = True  #设置粗体
    paragraph_format_line_indent  可以设置缩进值。

    除了上述内容外,还可以通过 document.styles.add_style('textstyle', WD_STYLE_TYPE. PARAGRAPH) ,使用 add_style() 方法创建新的样式对象,后续就可以通过提供的属性进行样式设置,设置字体使用 font.size ,设置字体颜色为 font.color

    然后在添加段落的时候,就可以应用该属性了。

    from docx.shared import RGBColor from docx.enum.style import WD_STYLE_TYPE style = document.styles.add_style('textstyle', WD_STYLE_TYPE.PARAGRAPH) # 字体大小 style.font.size = Pt(16) # 字体颜色 style.font.color.rgb = RGBColor(66, 100, 0) p1 = document.add_paragraph('神人橡皮擦',style=style)

    页眉和页脚

    页眉和页脚可以直接设置,参考代码如下所示

    header = document.sections[0].header
    header.add_paragraph('橡皮擦的页眉')
    
    footer = document.sections[0].footer
    

    今天是持续写作的第 277 / 365 天。 可以关注我,点赞我、评论我、收藏我啦。

    分类:
    后端