【Word自动化办公】使用python-docx对Word进行操作

目录

一、环境安装

二、文档各组成结构获取

[2.1 组成结构讲解](#2.1 组成结构讲解)

[2.2 段落run对象的切分标准](#2.2 段落run对象的切分标准)

三、获取整篇文档内容

四、写入指定样式的数据

[4.1 通过add_paragraph与add_run参数添加样式](#4.1 通过add_paragraph与add_run参数添加样式)

[4.2 单独设置文本样式](#4.2 单独设置文本样式)

五、添加标题

六、换行符&换页符

七、添加图片数据

[7.1 向新文档任意位置添加图片](#7.1 向新文档任意位置添加图片)

[7.2 向已有文档添加图片](#7.2 向已有文档添加图片)

八、添加表格

[8.1 添加单个单元格](#8.1 添加单个单元格)

[8.2 批量填充表格](#8.2 批量填充表格)

[8.3 添加行列](#8.3 添加行列)

[8.4 合并单元格](#8.4 合并单元格)


一、环境安装

bash 复制代码
pip install -U python-docx==0.7.4

二、文档各组成结构获取

2.1 组成结构讲解

Word文档的组成结构:

  • .docx文档
  • 段落
  • 内容

python-docx使用说明: 和纯文本相比,.docx文件有很多结构。这些结构在python-docx中有三种不同的类型来表示。在最高一层,Document对象表示整个文档。Document对象包含一个Paragraph对象的列表,表示文档中的段落(用户在Word文档中输入时,如果按下回车,新的段落就开始了)。每个Paragraph对象都包含一个Run对象的列表。

python 复制代码
import docx

# 基于Document方法读取word文档
doc = docx.Document('./demo.docx')
# 获取指定段落
print(doc.paragraphs[0].text) # 我正在学习Python数据分析。
print(doc.paragraphs[0].runs[0].text) # 我正在学习Python数据分析。

2.2 段落run对象的切分标准

python 复制代码
import docx

# 基于Document方法读取word文档
doc = docx.Document('./demo.docx')
# 获取指定段落
print(doc.paragraphs[0].text) # 我正在学习Python数据分析。
print(doc.paragraphs[2].runs[0].text) # Python是世界上最好的语言,
print(doc.paragraphs[2].runs[1].text) # 你觉得呢?
print(doc.paragraphs[4].runs[0].text) # A plain paragraph with some
print(doc.paragraphs[4].runs[1].text) # bold
print(doc.paragraphs[4].runs[2].text) # and some
print(doc.paragraphs[4].runs[3].text) # italic

总结:

  • 中文段落中,是以标点符号进行run的构建/切分
  • 英文段落中,是以单词样式不同进行构建/切分,如这个例子,bold是加粗了,italic是斜体了。

三、获取整篇文档内容

如果你只关心Word文档中的文本,不关心样式信息,就可以利用getText()函数。它接受一个.docx文件名,返回其中文本的字符串,当然getText()函数需要自己实现。

python 复制代码
import docx

def getText(filename):
    doc = docx.Document(filename)
    fullText = []
    for para in doc.paragraphs:
        fullText.append(para.text)
    return '\n'.join(fullText)

print(getText('./demo.docx'))

四、写入指定样式的数据

4.1 通过add_paragraph与add_run参数添加样式

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
# 添加段落内容
p1 = dc.add_paragraph(text='i am a student!i love reading!', style='Heading1')
p2 = dc.add_paragraph(text='i am a worker!i love Python!', style='Heading5')
# 添加内容
p2.add_run(text='我是内容1')
p2.add_run(text='我是内容2', style='QuoteChar')
dc.save('./new_word.docx')

4.2 单独设置文本样式

python 复制代码
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH

# 创建一个全新的文档对象
document = Document()
# 添加段落
p = document.add_paragraph()
# 添加内容
run = p.add_run('个人简历')
run.font.size = Pt(26) # 设置字体大小
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中
document.save('./new_word.docx')

五、添加标题

  • 添加标题
    • 调用add_heading()将添加一个段落,并使用一种标题样式
    • add_heading()的参数,是一个标题文本的字符串,以及一个从0到4的整数。整数0表示标题是Title样式,这用于文档的顶部。整数1到4是不同的标题层次,1是主要的标题,4是最低层的子标题。add_heading()返回一个paragraph对象,让你不必多花一步从Document对象中提取它。
python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
dc.add_heading('我是标题', 0)
dc.save('./new_word.docx')

六、换行符&换页符

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
dc.add_paragraph('i am a teacher!')
dc.paragraphs[0].runs[0].add_break() # 添加一个换行符
dc.paragraphs[0].add_run('hello!!!')
dc.add_paragraph('i am a student!')
dc.save('./new_word.docx')
python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
dc.add_paragraph('i am a teacher!')
dc.paragraphs[0].runs[0].add_break(docx.text.WD_BREAK.PAGE) # 添加一个换页符
dc.paragraphs[0].add_run('hello!!!')
dc.add_paragraph('i am a student!')
dc.save('./new_word.docx')

七、添加图片数据

7.1 向新文档任意位置添加图片

7.2 向已有文档添加图片

注意:向已有文档添加图片不能放在任意位置,只能追加到最后。

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document('./new_word.docx')
dc.add_paragraph('i am a teacher!')
dc.add_picture('./python.jpg', width=docx.shared.Inches(3), height=docx.shared.Cm(5))
dc.add_paragraph('i am a student!')
dc.save('./new_word.docx')

八、添加表格

8.1 添加单个单元格

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')
# 返回所有行
print(list(tb.rows))
# 返回所有列
print(list(tb.columns))
# 向单元格中添加数据 第一行的第一个单元格
tb.rows[0].cells[0].add_paragraph('hello')
dc.save('./new_word.docx')

8.2 批量填充表格

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')
# 批量填充表格
alist = ['泰勒斯', '毕达哥拉斯', '赫拉克利特', '苏格拉底', '柏拉图', '亚里士多德', '伏尔泰', '卢梭', '康德']
i = 0
for row in tb.rows:
    for cell in row.cells:
        cell.add_paragraph(text=alist[i])
        i += 1
dc.save('./new_word.docx')

8.3 添加行列

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')
# 添加单个行
tb.add_row()
# 添加单个列
tb.add_column()
dc.save('./new_word.docx')

8.4 合并单元格

python 复制代码
import docx

# 创建一个全新的文档对象
dc = docx.Document()
# 创建三行三列的表格
tb = dc.add_table(rows=3, cols=3, style='Light List Accent 3')

# 获取第一行第二列的单元格
c1 = tb.cell(0, 1)
# 获取第二行第二列的单元格
c2 = tb.cell(1, 1)

# 合并单元格
c1.merge(c2)
dc.save('./new_word.docx')
相关推荐
摸鱼也很难36 分钟前
Docker 镜像加速和配置的分享 && 云服务器搭建beef-xss
运维·docker·容器
woshilys1 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
疯狂飙车的蜗牛2 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
恩爸编程3 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
雕刻刀3 小时前
Latex 转换为 Word(使用GrindEQ )(英文转中文,毕业论文)
word
梧桐树04294 小时前
python常用内建模块:collections
python
Michaelwubo4 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
Dream_Snowar4 小时前
速通Python 第三节
开发语言·python
好像是个likun4 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
蓝天星空5 小时前
Python调用open ai接口
人工智能·python