文章目录
一、python-docx简介
python自动化操作Word最常用的模块就是python-docx。
python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。
如果需要读取word文档中的文字(一般来说,程序也只需要认识word文档中的文字信息),需要先了解python-docx模块的几个概念。
Word文档一般可以结构化成三个部分:
Document,表示一个word文档
Paragraph,表示word文档中的一个段落
Run,表示段落中的文字块
Document - Paragraph - Run
三级结构,这是最普遍的情况。但是如果Word中存在表格,这时会有新的文档结构,如下:
这时的结构非常类似Excel, 可以看成Document-Table-Row/Column-Cells
四级结构。
# 安装
pip install python-docx
二、基本使用
1、新建与保存word
from docx import Document
document = Document() #创建一个空文档
document.save(r'D:\自动化\word\道德经.docx') # 保存文件
2、写入Word
from docx import Document # 导入docx库
from docx.shared import Inches, Cm # 导入英寸单位 厘米Cm (可用于指定图片大小、表格宽高等)
# 打开一个document
file_path = r'D:\自动化\word\道德经.docx'
document = Document(file_path)
# 设置标题段落
document.add_heading('道德经', 0)
# 添加段落
p = document.add_paragraph('道可道,非常道;名可名,非常名。')
p.add_run('无名,天地之始,').bold = True # 在指定段落后添加粗体文字
p.add_run('有名,') # 在指定段落后添加默认格式文字
p.add_run('万物之母。').italic = True # 在指定段落后添加斜体文字
# 添加1级标题=标题1
document.add_heading('故常无欲,', level=1)
# 添加指定格式段落 style后面则是样式
document.add_paragraph('以观其妙,', style='Intense Quote')
# 添加段落,样式为List Bullet类型
document.add_paragraph('常有欲,以观其徼。', style='List Bullet')
# 添加段落,样式为List Number类型
document.add_paragraph('此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。', style='ListNumber')
document.add_paragraph('所以说,霸夫老师教Python,教得妙。', style='List Number')
# 添加图片
img_path = r'D:\自动化\word\girl.png'
document.add_picture(img_path)
document.add_picture(img_path, width=Inches(1.25))
document.add_picture(img_path, width=Cm(5), height=Cm(5))
# 待添加到表格的内容
records = (
(1, '李白', '诗仙'),
(2, '杜甫', '诗圣'),
(3, '白居易', '香山居士, 与元稹并称元白, 与刘禹锡合称刘白')
)
# 添加一个1行3列的表格, 表格样式为Table Grid
# 表格样式参数可选,缺省时为Normal Table
# Normal Table
# Table Grid
# Light Shading、 Light Shading Accent 1 至 Light Shading Accent 6
# Light List、Light List Accent 1 至 Light List Accent 6
# Light Grid、Light Grid Accent 1 至 Light Grid Accent 6
# 太多了其它省略...
table = document.add_table(rows=1, cols=3, style='Table Grid')
# 填充标题行
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '序号'
hdr_cells[1].text = '姓名'
hdr_cells[2].text = '描述'
# 动态添加数据行
for id, name, desc in records:
row_cells = table.add_row().cells
row_cells[0].text = str(id)
row_cells[1].text = name
row_cells[2].text = desc
document.add_paragraph('再添加一个表格')
# 待添加到表格的内容
records2 = [
["姓名", "性别", "家庭地址"],
["貂蝉", "女", "河北省"],
["杨贵妃", "女", "贵州省"],
["西施", "女", "山东省"]
]
# 添加一个4行3列的表格
table2 = document.add_table(rows=4, cols=3, style='Light List Accent 5')
# 填充表格
for 行索引 in range(4):
cells = table2.rows[行索引].cells
for 列索引 in range(3):
cells[列索引].text = str(records2[行索引][列索引])
# 添加分页符
document.add_page_break()
# 保存文档
document.save(file_path)
(1)打开文档
Document()传入参数是打开相应的文档,不传参数则是创建一个空文档。
# 创建一个空文档
document = Document()
# 加载旧文档(用于修改或添加内容)
document = Document('exist.docx')
(2)添加标题
level等级1-9 也就是标题1-标题9,我们可以在旧文档中将标题格式设置好,使用Python-docx打开旧文档,再添加相应等级标题即可。
document.add_heading('一级标题', level=1)
(3)添加段落
段落在 Word 中是基本内容。它们用于正文文本,也用于标题和项目列表(如项目符号)。
添加段落的时候,赋值给一个变量,方便我们后面进行格式调整。
p = document.add_paragraph('道可道,非常道;名可名,非常名。')
# 添加指定格式段落 style后面则是样式
document.add_paragraph('以观其妙,', style='Intense Quote')
(4)添加文字块
在指定段落上添加文字块。
p.add_run('无名,天地之始,').bold = True # 在指定段落后添加粗体文字
p.add_run('有名,') # 在指定段落后添加默认格式文字
p.add_run('万物之母。').italic = True # 在指定段落后添加斜体文字
(5)添加图片
width, height可用于设置图片尺寸,缺省时为图片默认大小。
document.add_picture('girl.png')
document.add_picture('girl.png', width=Inches(1.25))
document.add_picture('girl.png', width=Cm(5), height=Cm(5))
(6)添加表格
表格样式style参数可选,缺省时默认为Normal Table。
常用样式有:
Normal Table
Table Grid
Light Shading、 Light Shading Accent 1 至 Light Shading Accent 6
Light List、Light List Accent 1 至 Light List Accent 6
Light Grid、Light Grid Accent 1 至 Light Grid Accent 6
# 添加一个4行3列的表格
table = document.add_table(rows=4, cols=3)
table = document.add_table(rows=4, cols=3, style='Light Shading Accent 2')
(7)添加分页符
# 添加分页符
document.add_page_break()
3、读取word
'''
文档.paragraphs可以获取文档中所有段落数据,不包含表格,这里注意一点图片跟分页符也会计算在段落数据内
段落.runs 可以获取段落的所有文字块
文档.tables可以获取文档中所有表格数据
文档.save (path) 可以用于保存修改后的文档本身,同样也可在将打开的文档另存为新文档
'''
from docx import Document
doc = Document(r'D:\自动化\word\道德经.docx')
# 读取 word 中所有内容
for p in doc.paragraphs:
print(p, p.text)
# 读取指定段落中的所有run
for run in doc.paragraphs[1].runs:
print(run, run.text)
# 读取 word中所有表格内容
for 表格 in doc.tables:
print(表格)
for 行 in 表格.rows:
for 单元格 in 行.cells:
print(单元格.text)
doc.save(r'D:\自动化\word\另存为新文档.docx')