首页Python【Python计算生态】p...

【Python计算生态】python-docx——Word文档操作库

Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。

本系列将会陆续整理分享一些有趣、有用的第三方库。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_Ecosystem





01
简介

python-docx是一个用于创建、修改和读取Microsoft Word文档(.docx 文件)的Python第三方库。它通过抽象和封装Word文档的底层XML结构,为用户提供了一个直观的API,使得操作Word文档变得简单高效。通过使用该库,开发者可以自动化生成复杂的Word文档,提高工作效率。
直接使用pip安装:
pip install python-docx
GitHub页面:
https://github.com/python-openxml/python-docx

02
基本使用:

python-docx库允许以编程方式生成、修改和读取Word文档的内容,包括标题、段落、列表、图片、表格和样式等。

  • 创建一个新的 Word 文档:

Document()会基于默认的“模板”打开一个空白文档。

add_paragraph()方法会返回一个段落的引用,即新添加到文档末尾的段落。

from docx import Document

# 创建一个新的文档对象
document = Document()

# 添加一个段落
document.add_paragraph('这是一个新创建的 Word 文档。')

# 保存文档
document.save('new_document.docx')


  • 添加标题:

默认情况下,add_heading()方法会添加一个顶级标题,即在Word中显示为“标题 1”的标题。当需要为子部分添加标题时,只需指定想要的级别,范围是 1 到 9 的整数。

from docx import Document

document = Document()

# 添加不同级别的标题
document.add_heading('一级标题', level=1)
document.add_heading('二级标题', level=2)

document.save('document_with_headings.docx')


  • 添加列表:

添加列表分为无序列表和有序列表两种情况:

无序列表通常使用圆点、方块等符号作为列表项的标识。在 python-docx 中,可以通过设置段落的样式为 List Bullet 来创建无序列表。
有序列表则使用数字或字母作为列表项的标识。设置段落的样式为 List Number 即可创建有序列表。
from docx import Document

document = Document()

# 添加无序列表
document.add_paragraph('无序列表项 1', style='List Bullet')
document.add_paragraph('无序列表项 2', style='List Bullet')

# 添加有序列表
document.add_paragraph('有序列表项 1', style='List Number')
document.add_paragraph('有序列表项 2', style='List Number')

document.save('document_with_lists.docx')


  • 添加表格:

表格有许多属性和方法,需要通过访问这些属性来填充表格。

通常情况下,按行访问单元格会更方便,例如从数据源填充长度可变的表格时。表格的 .rows 属性提供了对单行的访问,每一行都有一个 .cells 属性。.cells 属性在 Row 和 Column 上都支持索引访问,就像列表一样。

from docx import Document

document = Document()

# 添加一个表格,2 行 3 列
table = document.add_table(rows=2, cols=3)

# 访问表格的单元格并添加内容
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '姓名'
hdr_cells[1].text = '年龄'
hdr_cells[2].text = '性别'

row_cells = table.rows[1].cells
row_cells[0].text = '张三'
row_cells[1].text = '25'
row_cells[2].text = '男'

document.save('document_with_table.docx')


  • 文本格式化:
除了段落样式(指定一组段落级设置)之外,Word 还有字符样式,它指定一组运行级设置。可以将字符样式视为指定字体,包括其字体类型、大小、颜色、加粗、斜体等。
from docx import Document
from docx.oxml.ns import qn
from docx.shared import Pt
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

# 创建一个新的文档对象
document = Document()

# 设置中文字体时,需要明确指定东亚字符的字体
document.styles['Normal'].font.name = '微软雅黑'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

# 添加标题
title = document.add_heading('格式化文本示例', level=1)
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 标题居中对齐

# 添加普通段落
paragraph = document.add_paragraph('这是一个普通的段落文本。')

# 添加带有不同样式的段落
styled_paragraph = document.add_paragraph()
# 加粗文字
bold_run = styled_paragraph.add_run('这是加粗的文字。')
bold_run.bold = True
# 斜体文字
italic_run = styled_paragraph.add_run(' 这是斜体的文字。')
italic_run.italic = True
# 下划线文字
underline_run = styled_paragraph.add_run(' 这是带有下划线的文字。')
underline_run.underline = True

# 添加不同颜色和大小的文字
colorful_paragraph = document.add_paragraph()
# 红色 20 磅文字
red_run = colorful_paragraph.add_run('这是红色 20 磅的文字。')
red_run.font.color.rgb = RGBColor(255, 0, 0)
red_run.font.size = Pt(20)
# 蓝色 16 磅文字
blue_run = colorful_paragraph.add_run(' 这是蓝色 16 磅的文字。')
blue_run.font.color.rgb = RGBColor(0, 0, 255)
blue_run.font.size = Pt(16)

# 保存文档
document.save('formatted_text_document.docx')

03
示例

下面的代码演示了如何使用python-docx库创建一个包含段落、标题、分页符、表格和图片的Word文档,并对文档中的各种元素进行样式设置。

from docx import Document
# 基于默认的“模板”打开一个空白文档
document = Document()


# ====== 添加段落 ======
# 该方法会返回一个段落的引用,即新添加到文档末尾的段落
# 通过style参数设置段落样式,样式名称与Word用户界面(UI)中显示的完全一致
paragraph = document.add_paragraph('该方法会返回一个段落的引用,即新添加到文档末尾的段落', style='ListBullet')
# 也可以使用一个段落作为“光标”,在其正上方插入一个新的段落
prior_paragraph = paragraph.insert_paragraph_before('使用一个段落作为“光标”,在其正上方插入一个新的段落')
# 也可以在之后应用样式
paragraph.style = 'List Bullet'# 创建无序列表项

# 使用段落的 .add_run() 方法添加样式
paragraph.add_run('加粗文字').bold = True
paragraph.add_run('也可以从运行构建段落')
paragraph.add_run('斜体文字.').italic = True

# 通过对 Run 对象的引用设置样式
run = paragraph.add_run('通过对Run对象的引用设置样式')
from docx.oxml.ns import qn
run.font.name = '微软雅黑'# 设置西文字体
run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')  # 设置中文字体
from docx.shared import RGBColor
run.font.color.rgb = RGBColor(255, 0, 0)  # 设置字体颜色
from docx.shared import Pt
run.font.size = Pt(16)      # 设置字体大小为 16 磅
# ======================

# ====== 添加标题 ======
# 添加不同级别的标题
document.add_heading('标题段落')
document.add_heading('二级标题', level=2)
# ======================

# ====== 添加分页符 ======
# 接下来的文本会出现在单独的一页上,即使当前页面尚未填满
document.add_page_break()
# ======================

# ====== 添加表格 ======
# 需要填入表格的数据
items = (
    (2000, '1111''AAAA'),
    (2001, '2222''BBBB'),
    (2002, '3333''CCCC,DDDD'),
)

# 添加表格
table = document.add_table(1, 3)

# 填充表头行
heading_cells = table.rows[0].cells
heading_cells[0].text = '年份'
heading_cells[1].text = '数据'
heading_cells[2].text = '备注'

# 为每个项目添加数据行
for item in items:
    cells = table.add_row().cells
    cells[0].text = str(item[0])
    cells[1].text = item[1]
    cells[2].text = item[2]

# 设置表格样式
table.style = 'LightShading-Accent1'
# ======================

# ====== 添加图片======
# 添加一个段落并设置间距为 10
paragraph = document.add_paragraph()
paragraph.paragraph_format.space_before = Pt(10)
paragraph.paragraph_format.space_after = Pt(10)
# 加载图片文件,并指定其宽度或高度,使用方便的单位,如英寸Inches或厘米Cm
from docx.shared import Cm

document.add_picture('1.jpg', width=Cm(5.0))
# ======================

# 保存文档
document.save("demo.docx"

生成的word内容如下图所示:


更多内容可以前往官方文档查看:

https://python-docx.readthedocs.io/en/latest/

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments