【实用篇】Python操作word

在日常工作中,有很多简单重复的劳动其实完全可以交给Python程序,比如根据样板文件(模板文件)批量的生成很多个Word文件或PowerPoint文件。Word是微软公司开发的文字处理程序,相信大家都不陌生,日常办公中很多正式的文档都是用Word进行撰写和编辑的,目前使用的Word文件后缀名一般为.docx 。PowerPoint是微软公司开发的演示文稿程序,是微软的Office系列软件中的一员,被商业人士、教师、学生等群体广泛使用,通常也将其称之为“幻灯片”。在Python中,可以使用名为 python docx 的三方库来操作Word,可以使用名为python-pptx 的三方库来生成。PowerPoint。

操作Word文档

我们可以先通过下面的命令来安装python-docx 三方库。

高版本lxml没有etree模块。有网友确定lxml4.2.5版本带有etree模块,且该版本lxml支持

python3.7.4版本。

安装命令: pip install lxml==4.2.5

pip install

我们在安装此模块儿使用的是pip install python-docx,但是在导入的时候是 docx;

按照官方文档的介绍,我们可以使用如下所示的代码来生成一个简单的Word文档。

from docx import Document

# docx.shared 用于设置大小(图片等)

from docx.shared import Cm, Pt

from docx.document import Document as Doc

# 创建代表Word文档的Doc对象

document = Document()

# type: Doc # 添加大标

document.add_heading('快快乐乐学Python', 0)

# 添加段落

p = document.add_paragraph('Python是一门非常流行的编程语言')

run = p.add_run('very easy')

run.bold = True run.font.size = Pt(18)

p.add_run('hello')

run = p.add_run('非常棒')

run.font.size = Pt(18)

run.underline = False

p.add_run('。')

# 添加一级标题

document.add_heading('Heading, level 1', level=1)

# 添加带样式的段落

document.add_paragraph('Intense quote', style='Intense Quote')

# 添加无序列表

document.add_paragraph(

'first item in unordered list', style='List Bullet'

)

document.add_paragraph(

'second item in ordered list', style='List Bullet'

)

# 添加有序列表

document.add_paragraph(

'first item in ordered list', style='List Number'

)

document.add_paragraph(

'second item in ordered list', style='List Number'

)

# 添加图片(注意路径和图片必须要存在)

document.add_picture('resources/guido.jpg', width=Cm(5.2))

# 添加分节符

document.add_section()

records = (

('亚瑟', '战士英雄'),

('白起', '坦克英雄'),

('赵云', '刺客英雄'),

('女娲', '法师英雄'),

)

# 添加表格

table = document.add_table(rows=1, cols=3)

table.style = 'Dark List'

hdr_cells = table.rows[0].cells

hdr_cells[0].text = ' 姓 名 '

hdr_cells[1].text = '类别'rc#

# 为表格添加行 

for name, sex, birthday in records:

     row_cells = table.add_row().cells

     row_cells[0].text = name

     row_cells[1].text = sex

     row_cells[2].text = birthday

# 添加分页符

document.add_page_break()

# 保存文档

document.save('demo.docx')

提示:上面代码第7行中的注释# type: Doc 是为了在PyCharm中获得代码补全提示,因为如果不清楚对象具体的数据类型,PyCharm无法在后续代码中给出 Doc 对象的代码补全提示。

执行上面的代码,打开生成的Word文档,效果如下图所示。

 

对于一个已经存在的Word文件,我们可以通过下面的代码去遍历它所有的段落并获取对应的内容。

from docx import Document

#from docx.document import Document as Doc

doc = Document('resources/离职证明.docx') # type: Doc

for no, p in enumerate(doc.paragraphs):

     print(no, p.text)

读取到的内容如下所示。

0

1 离 职 证 明

2

3 兹证明 王大锤 ,身份证号码: 100200199512120001 ,于 2018 年 8 月 7 日至 2020 年 6 月28 日在我单位 开发部 部门担任 Java开发工程师 职务,在职期间无不良表现。因个人原因,于 2020 年 6 月 28 日起终止解除劳动合同。现已结清财务相关费用,办理完解除劳动关系相关手续,双方不存在任何劳动争议。

4

5 特此证明!

6

7

8 公司名称(盖章):成都风车车科技有限公司

9 2020 年 6 月 28 日

接下来我们读取该文件,将占位符替换为真实信息,就可以生成一个新的Word文档,如下所示。

from docx import Document

from docx.document import Document as Doc

# 将真实信息用字典的方式保存在列表中

employees = [

{

'name': '骆昊',

'id': '100200198011280001',

'sdate': '2008 年 3 月 1 日 ', 'edate': '2012年2月29日', 'department': ' 产 品 研 发 ', 'position': ' 架 构 师 ', 'company': '成都华为技术有限公司'

},

{

'name': '王大锤',

'id': '510210199012125566',

'sdate': '2019 年 1 月 1 日 ', 'edate': '2021年4月30日', 'department': ' 产 品 研 发 ', 'position': 'Python开发工程师', 'company': '成都谷道科技有限公司'

},

{

'name': '李元芳',

'id': '2102101995103221599',

'sdate': '2020 年 5 月 10 日 ', 'edate': '2021 年 3 月 5 日 ', 'department': ' 产 品 研 发 ', 'position': 'Java 开 发 工 程 师 ', 'company': '同城企业管理集团有限公司'

},

]

# 对列表进行循环遍历,批量生成Word文档

for emp_dict in employees:

# 读取离职证明模板文件

doc = Document('resources/离职证明模板.docx') # type: Doc

# 循环遍历所有段落寻找占位符

for p in doc.paragraphs: if '{' not in p.text:

continue

# 不能直接修改段落内容,否则会丢失样式

# 所以需要对段落中的元素进行遍历并进行查找替换

for run in p.runs:

if '{' not in run.text: continue

# 将占位符换成实际内容

start, end = run.text.find('{'), run.text.find('}')

key, place_holder = run.text[start + 1:end], run.text[start:end + 1] run.text = run.text.replace(place_holder, emp_dict[key])

# 每个人对应保存一个Word文档

doc.save(f'{emp_dict["name"]}离职证明.docx')

执行上面的代码,会在当前路径下生成三个Word文档,如下图所示。

来源:阿拉没有灯

物联沃分享整理
物联沃-IOTWORD物联网 » 【实用篇】Python操作word

发表评论