python使⽤python-docx⾃动化操作word
⽬录
前⾔
声明:本⽂的内容学习绝⼤多数来源于廖茂⽂的《Python⾃动化办公》⼀书。
为了避免歧义,本⽂中Word表⽰Word软件本⾝,Word⽂档表⽰Word软件中的⽂档。
python使⽤python3版本。程序编程使⽤pycharm软件。要实现python对Word的操作⾸先要安装python-docx库。
在软件中下载安装依赖两种⽅式:
(1)使⽤pycharm导⼊python-docx库在file-setting-python Interpreter中点击‘+’输⼊想要导⼊的库,如:导⼊python-docx库,操作如下图所⽰。
(2)若没有该库还向程序导⼊这个库,代码会有红线提⽰报错,⿏标指向红线处有会提⽰下载安装该库,如下图。该⽅法在安装某些包的时候系统可能会安装错,建议使⽤第⼀种⽅法。
⼀、python-docx库简介
在程序中导⼊python-docx库实现创建、修改Word(.docx)⽂件。注意:python-docx只⽀持操作*.docx⽂件格式的Word⽂档。
⼆、读写Word⽂档
2.1 创建Word⽂档对象
调⽤Document⽅法创建Word⽂件对象。该⽅法使⽤场景如下:
(1)创建空Word对象
from docx import Document
#创建⽂件对象
document = Document()
#保存⽂件对象
document.save('new.docx')
(2)获取已有的Word⽂件对象
from docx import Document
doc = Document('exist.docx') #exist.docx为⽂件名
(3)使⽤计算机本⾝的Word来创建word⽂档,使⽤前需要安装pypiwin32第三⽅库,如下代码进⾏Word⽂档的⽂件格式由*.doc 转为*docx,我这⾥使⽤的是绝对地址,若Word⽂件和py⽂件在同⼀⽬录(相对地址)就直接写⼊⽂件名即可。
from win32com import client
from docx import Document
#路径
doc_path = r'D:\python project\exist.doc'
docx_path = r'D:\python project\new_exist.docx'
#获取Word应⽤程序对象
Word = client.Dispatch('Word.Application')
#打开对应的Word⽂档
doc = Word.Documents.Open(doc_path)
#另存到docx_path中,12表⽰docx⽂件格式
doc.SaveAs(docx_path,12)
#关闭Word⽂档
doc.Close()
#退出软件
Word.Quit()
2.2 获取Word⽂档中的对象
在⼀个Word⽂档中会有很多的对象,如段落对象,表格对象和⽂本框对象等等。接下来我们要获取这些对象,并对这些对象进⾏操作。
(1)获取段落对象
使⽤*.paragraphs获取⽂档全部对象,*.paragraphs[a]获取下标为a的段落对象。
from docx import Document
doc = Document('exist.docx') #exist.docx为⽂件名
#遍历Word⽂档中的段落
for p in doc.paragraphs:
#输出Word⽂档中的段落内容
)
(2)获取表格对象
获取表格对象,遍历所有单元格,输出数据。
from docx import Document
doc = Document('table.docx')
tables = doc.tables #获取⽂档中全部所有的表格对象
table = tables[0] #获取下标为0的表格
values = []
#遍历表格中所有的单元格
for row ws: #遍历所有⾏对象
for cell lls: #遍历⾏中所有单元格对象
values.) #将单元格中的⽂本内容添加到列表中
values = ' '.join(values) #调⽤join⽅法将这⼀⾏中所有单元格内容⽤' '连接成字符串重新存放到列表中
print(values)
values = []
⽐较两个表格对象,出不同的单元格位置,代码如下。操作前先安装deepdiff第三⽅库。导⼊依赖后,调⽤DeepDiff⽅法。
from docx import Document
from deepdiff import DeepDiff
def get_doc_values(path):
doc = Document(path)
tables = doc.tables
table = tables[0]
all_values = []
for row ws:
values = []
for cell lls:
values.)
all_values.append(values)
return all_values
table1 = get_doc_values('table.docx')
table2 = get_doc_values('table_modify.docx')
ddiff = DeepDiff(table1,table2)
print(ddiff)
(3)获取⽂本框对象
children = doc.element.body.iter() #获取所有⽬录对象
for child in children:
# 通过类型判断⽬录
if dswith('textbox'): #判断是否是⽂本框⽬录
i = []
for ci in child.iter(): #遍历⽂本框⽬录中的内容
if dswith('main}r'): #筛选出是⽂本内容⽚段
i.) #将⽂本内容⽚段组成列表
print("".join(i)) #输出该⽂本框的内容
2.3 将数据写⼊Word⽂档
(1)将⽂字写⼊Word⽂档中
python-docx提供了add_heading、add_paragraph等⽅法将⽂字类型数据以不同形式添加到Word⽂档中。
doc = Document()
doc.add_heading('⼀级标题',level=1) #添加标题
p2 = doc.add_paragraph('第⼆个段落') #添加段落
p1 = p2.insert_paragraph_before('第⼀个段落')
p3 = doc.add_paragraph('新段落')
#追加内容
p3.add_run('加粗').bold = True
p3.add_run('以及')
p3.add_run('斜体').italic = True
doc.save('new1.docx')
(2)将图⽚写⼊Word⽂档中
python-docx提供了add_picture(‘图⽚地址’,width=*,hight=*)⽅法把图⽚添加到Word中。
doc = Document()
doc.add_picture('student_score.png',width=Inches(1.25))
(3)将表格写⼊Word⽂档中
python-docx提供了add_table(rows=*,cols=*,style= *)⽅法把图⽚添加到Word中。
能运行python的软件doc = Document()
#创建table,设置table样式
table = doc.add_table(rows=3,cols=4,style = 'Table Grid')
向单元格中加⼊添加数据,两种⽅法如下代码:
#第⼀种⽅法:先获取⾏,再获取改⾏中对应的单元格
row = w[0]
#第⼆种⽅法:直接指定⾏号与列号
cell = ll(0,1)
< = '第⼀⾏第⼆列'
将图⽚添加到表格中,需要通过追加添加的⽅式实现,代码如下:
#获取单元格中的段落对象
p = cell.paragraphs[0]
#获取追加对象,也就是后⾯会说的内联对象
run = p.add_run()
run.add_picture('1.png',width=Inches(1.25))
三、修改Word⽂档样式
Word⽀持很多样式,通过不同的样式可以帮助⽤户突出Word⽂档中的不同内容。python-docx⽀持Word中的部分样式,虽然不是所有样式,但基本够⽤。
⽂本格式
(1)块对象
块对象⼀般包括标题、段落、图⽚、表格、有序列表与⽆序列表。块对象的属性指定了块对象所在的位置,如缩进、段落之间的段落间距等,常⽤的属性由alignment(对齐⽅式)、index(缩进)、pace(⾏间距)等。⽰例代码如下:
um.text import WD_ALIGN_PARAGRAPH
...
#P为段落对象,设置段落⽔平居中对齐
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
#设置段落左对齐
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT
#设置段落右对齐
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.RIGHT
(2)内联对象
块对象的所有内容都包含在内联对象中,⼀个块对象由⼀个或多个内联对象组成。内联对象⼀般包括⽂字、句⼦、段落等,通常通过内联对象的相关属性来指定字体的样式,如粗体、斜体、⼤⼩等。⽰例代码如下:
from docx.shared import Pt
...
run= p.add_run('内联对象') #p为段落对象
font = run.font #获取对象的属性
font.size = Pt(35) #设置字体⼤⼩
font.italic = True #设置字体为斜体
Word⽂档样式
Word⽂档中常见的样式由段落样式、字符样式、表格样式等,python-docx库将样式定义在styles属性中,但它并不包含Word中所有的样式。⽰例代码如下:
from docx import Document
um.style import *
doc = Document()
styles = doc.styles #获取⽂档所有的样式
#遍历所有样式
for style in styles:
pe == WD_STYLE_TYPE.TABLE: #筛选出表格类型的所有样式
doc.add_paragraph(f"表格样式名称:{style.name}")
table = doc.add_table(3,3,style = style) #将表格设置成该样式
cells = ws[0].cells
cells[0].text = '第⼀列内容'
cells[1].text = '第⼆列内容'
cells[2].text = '第三列内容'
doc.add_paragraph('\n')
doc.save('show_all_table_style.docx')
四、使⽤Word模板
4.1 创建Word模板⽂件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论