目录

前言

一、python-docx库简介

二、读写Word文档

2.1  创建Word文档对象

2.2  获取Word文档中的对象

2.3  将数据写入Word文档

三、修改Word文档样式

四、使用Word模板

4.1  创建Word模板文件

4.2使用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 Documentdoc = 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文档中的段落内容print(p.text)

(2)获取表格对象

获取表格对象,遍历所有单元格,输出数据。

from docx import Document
doc = Document('table.docx')
tables = doc.tables     #获取文档中全部所有的表格对象
table = tables[0]       #获取下标为0的表格
values = []
#遍历表格中所有的单元格
for row in table.rows:      #遍历所有行对象for cell in row.cells:      #遍历行中所有单元格对象values.append(cell.text)    #将单元格中的文本内容添加到列表中values = ' '.join(values)   #调用join方法将这一行中所有单元格内容用' '连接成字符串重新存放到列表中print(values)values = []

比较两个表格对象,找出不同的单元格位置,代码如下。操作前先安装deepdiff第三方库。导入依赖后,调用DeepDiff方法。

from docx import Document
from deepdiff import DeepDiffdef get_doc_values(path):doc = Document(path)tables = doc.tablestable = tables[0]all_values = []for row in table.rows:values = []for cell in row.cells:values.append(cell.text)all_values.append(values)return all_valuestable1 = 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 child.tag.endswith('textbox'):   #判断是否是文本框目录i = []for ci in child.iter():     #遍历文本框目录中的内容if ci.tag.endswith('main}r'):       #筛选出是文本内容片段i.append(ci.text)       #将文本内容片段组成列表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中。

doc = Document()
#创建table,设置table样式
table = doc.add_table(rows=3,cols=4,style = 'Table Grid')

向单元格中加入添加数据,两种方法如下代码:

#第一种方法:先获取行,再获取改行中对应的单元格
row = table.row[0]
row.cells[0].text = '第一行第一列'
#第二种方法:直接指定行号与列号
cell = table.cell(0,1)
cell.text = '第一行第二列'

将图片添加到表格中,需要通过追加添加的方式实现,代码如下:

#获取单元格中的段落对象
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(行间距)等。示例代码如下:

from docx.enum.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
from docx.enum.style import *
doc = Document()
styles = doc.styles     #获取文档所有的样式
#遍历所有样式
for style in styles:if style.type == WD_STYLE_TYPE.TABLE:       #筛选出表格类型的所有样式doc.add_paragraph(f"表格样式名称:{style.name}")table = doc.add_table(3,3,style = style)    #将表格设置成该样式cells = table.rows[0].cellscells[0].text = '第一列内容'cells[1].text = '第二列内容'cells[2].text = '第三列内容'doc.add_paragraph('\n')
doc.save('show_all_table_style.docx')

四、使用Word模板

4.1  创建Word模板文件

第一步 : 选中任意符号(这里选中-),插入-文档部件-域

第二步:选"MergeField"--域名输入name--确定

最后:重复相同操作,设置好需要的域名

4.2使用Word模板文件

使用Word模板文件快速生成千分劳动合同文件,这有个Excel表,里面由所有员工的信息,现在把这些用于生成所有人的合同。代码如下:

import pandas as pd
from mailmerge import MailMerge
#读取员工基本信息表对象
job_seekers = pd.read_excel('求职者.xlsx')
template = '合同.docx'        #选择模板
doc = MailMerge(template)    #根据模板创建模板对象
#将数据填写到Word文档中
def merge(laber_name):doc.merge(name=laber_name,time = '2021.10')    #生成一份Word文档
#遍历员工信息
for laber_name in job_seekers['name'].items():merge(laber_name)

五、自动生成数据分析报告

数据分析报告生成是常见的工作任务,下面演示如何将大量数据快速转化为有价值的数据分析报告。

将学生成绩数据(如下图)自动生成数据分析报告。

代码如下:

import pandas as pd
import matplotlib.pyplot as plt
from docx import Document#获取xlsx对象
students = pd.read_excel('student_score.xlsx')
#就地排序
students.sort_values(by='Score',inplace=True,ascending=False)
#绘制柱状图
plt.bar(students['Name'],students['Score'],color='orange')
plt.title('Student Score',fontsize=16)
plt.xlabel('Name')
plt.ylabel('Score')
plt.xticks(students.Name,rotation='90')
plt.tight_layout()plt.savefig('student_score.png')######制作分析报告#######
doc = Document()
doc.add_heading('数据分析报告',level=0)
#获取绝对位置第一的信息
first_student = students.iloc[0,:]['Name']
first_score = students.iloc[0,:]['Score']p = doc.add_paragraph('分数排在第一位的学生是')
p.add_run(str(first_student)).bold =True
p.add_run(',分数为')
p.add_run(str(first_score)).bold =Truep1 = doc.add_paragraph(f'总共有{len(students["Name"])}名学生参加了考试,学生考试总体情况:')
table = doc.add_table(rows=len(students["Name"])+1,cols=2)
table.style = 'Light Shading Accent 1'
table.cell(0,0).text = '学生姓名'
table.cell(0,1).text = '学生分数'
for i,(index,row) in enumerate(students.iterrows()):table.cell(i+1,0).text = str(row['Name'])table.cell(i+1,1).text = str(row['Score'])
doc.add_picture('student_score.png')
doc.save('student_score_analyze.docx')
print("Done!")

效果如下图:

本文小结

  1. 使用python-docx库实现对Word文档不同对象(文字、图片、表格)的读写操作。
  2. python-docx支持多种Word文档样式,可以通过styles属性使用这些样式。
  3. 使用Word模板文件与docx-mailmerge库可以轻松生成具有复杂样式的Word文档。
  4. pandas库与python-docx库配合使用,可以轻松生成美观的数据分析报告。

python使用python-docx自动化操作word相关推荐

  1. python windows记事本_pywinauto自动化操作记事本

    一.什么是pywinauto Pywinauto是基于Python开发的,用于操作Windows标准图形界面的自动化测试的脚本模块. 二.pywinauto可以用来做什么 1.可以应用在程序中,来解决 ...

  2. Python 使用docx库操作word文档中的表格单元格内容

    1.导入库 from docx import Document 2.加载word文档对象 doc = Document(path) 3.定位表格 # 获取所有表格对象 tables = doc.tab ...

  3. Python对浏览器的自动化操作(商品监控下单)

    文章目录 1.起因 2.需求 3.准备环境 1.[ pip的使用 ] 2.下载插件 3.插件放在Python根目录 4.运行测试 1.无货测试 2.有货测试 5.彩蛋 1.起因 这篇文章应该是前年和教 ...

  4. Python办公自动化之二,操作word

    1. python-docx模块 word的自动化 针对手动创建批量制式Word文件.修改现有大量word文件存在的共性问题 python-docx是第三方模块,用于自动化生成和修改word文档 fr ...

  5. python处理表格和ppt_Python 操作Word(Excel、PPT等通用)

    使用技巧 import win32com from win32com.client import Dispatch, constants w = win32com.client.Dispatch('W ...

  6. python利用pywin32模块自动化操作微信发消息

    本文是利用python 操作电脑微信发消息,用到win32gui和win32api模块,以便以后忘记,做此纪录! import win32gui import win32api import win3 ...

  7. python 操作微信_利用 Python 实现微信半自动化操作

    本文首发于公众号:小夭同学,同步更新个人博客:故事胶片,转载请署名. 注意:须有一个可以登录网页版的微信号 可以在 微信网页版 登录一下查看 1.需求场景 很多管理大量微信社群的小伙伴都有这样的场景, ...

  8. python docx runs_别再问我Python怎么操作Word了!

    安装 docx是一个非标准库,需要在命令行(终端)中使用pip即可安装pip install python-docx 一定要注意,安装的时候是python-docx而实际调用时均为docx! 前置知识 ...

  9. word python 域 操作_python实现在windows下操作word的方法

    本文实例讲述了python实现在windows下操作word的方法.分享给大家供大家参考.具体实现方法如下: import win32com from win32com.client import D ...

最新文章

  1. System.currentTimeMillis()竟然存在性能问题,这我能信?
  2. 百度嵌入式深度学习框架Paddle-Mobile介绍
  3. 83款 网络爬虫开源软件
  4. 23-初识正则表达式
  5. maskView与CAGradientLayer那回事儿
  6. linux 系统配额管理功能,Linux磁盘配额管理
  7. MIP开发教程(二) 使用MIP-CLI工具调试MIP网页
  8. 《大数据》2022年第1期目次摘要
  9. bgsave配置与工作流程
  10. 滚动长截图,截取第三方应用,如微博、知乎、头条长图文...
  11. 2019年中国大学生计算机设计大赛--心得总结
  12. cef js返回c++的代码_CEF3开发者系列之JS与C++交互之简单介绍
  13. HiveSQL小练习--求连续消费的天数
  14. Julia 安装包报错操作超时
  15. android内存置换,安卓手机64GB内存如何更换内存
  16. 第十二周项目五-----迷宫问题之图深度优先遍历解法
  17. DNSPod十问杨晓东:从.cn看中国互联网进化史
  18. 1小时学会HTML5基础
  19. Security+知识点
  20. 给Div添加边框颜色

热门文章

  1. c语言字符型常量计算,c语言字符型常量和变量.doc
  2. 支持向量机(SVM)算法原理
  3. IDEA SpringBoot 同一个模块启动多个服务(实例)
  4. java.io.IOException: Expected at least 2 bytes
  5. LeetCode C++基础面试题汇总附答案(一)
  6. md+邮件服务器+334错误,邮件发送,无尽的501错误。TCP发送邮件解决方案
  7. url rewrite 实现url地址的伪静态化
  8. 设计模式----装饰模式
  9. 通过域名查询该域名的ip
  10. 手写Fbank语音特征提取