Python实现高效自动化Word办公:如何批量合并多个文档(python-docx库)
在Word文件中,不但有文字内容,还有加粗、红色等格式,而且这些特殊的格式和文字内容是混合在一起的,但如果用Python来读取Word文件,这段文字会被分为纯文字、段落、字体、字号以及表格 等更具体的部分,而且每一个部分都对应着Python的变量和函数。
用Python读取文件时,你需要记住很多个Python变量和函数。当然了,针对这一点, 你也不用担心,这些变量和函数在Python的Word扩展库官方文档可以查看。所以如果你需 要某个功能,但是不知道应该用什么变量和函数名称时,可以在官方文档中找到它的名字和 描述信息。
用Python自动合并两个Word文件
文件一(内容包含字体、字号、颜色等额外信息):
文件二(内容文字出现在表格中):
第一个文件中,字体使用了黑体和宋体字,此外还有红色字体和加粗等格式。现在我需要 只提取其中的文字内容,不带任何格式。
第二个文件中,文字被放在了一张表格里。现在我需要用Python把表格中的文字提取出 来,合并成一个新的文件。
示例代码
1 | from docx import Document |
用Python合并Word和其他类型的文件
相较于其他文件,Word文件支持的格式丰富程度远远高于Txt文件等,所以当这两种格式丰富程度不一致的文件进行合并时,要么向下兼容,去掉Txt不支持的格式;要 么向上兼容,对Txt进行格式再调整。否则容易出现合并之后仍需要手动调整格式的问题,影 响工作效率。
将纯文本和Word文件合并
1 | from docx import Document |
将图片和Word文件合并
我们经常见到的图片格式就有.jpg、.png、.gif等,由于这些格式应用范围广,格式 没有被商业软件加密,所以python-docx库的add_picture函数就能实现把图片插入Word的 功能。
1 | from docx import Document |
将Execl和Word文件合并
使用Python制作邀请函
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63import xlrd
from docx import Document
from pathlib import Path, PurePath
import datetime
today=datetime.date.today().strftime('%Y-%m-%d')
# 客户信息文件
customer = '/Users/edz/Desktop/效率专栏/文章2/邀请函样例文件/客户信息.xlsx'
# 邀请函模版
invitation = '/Users/edz/Desktop/效率专栏/文章2/邀请函样例文件/邀请函模版.docx'
# 邀请函路径
invitation_path = '/Users/edz/Desktop/效率专栏/文章2/邀请函样例文件/'
# 替换内容
replace_content = {
'<姓名>' : 'no_name',
'<性别>' : 'm_f',
'<今天日期>' : today
}
def generat_invitation():
'''
生成邀请函文件
'''
doc = Document(invitation)
# 取出每一段
for para in doc.paragraphs:
for key, value in replace_content.items():
if key in para.text:
# 逐个关键字进行替换
para.text = para.text.replace(key, value)
file_name = PurePath(invitation_path).with_name(replace_content['<姓名>']).with_suffix('.docx')
doc.save(file_name)
def get_customer(customer_file: Path):
'''
获取邀请函信息
'''
# 从第一个sheet中取出客户信息
data = xlrd.open_workbook(customer_file)
table = data.sheets()[0]
# 取得客户数量
customer_number = table.nrows
for line in range(1, customer_number):
content = table.row_values(rowx=line, start_colx=0, end_colx=None)
replace_content['<姓名>'] = content[0]
replace_content['<性别>'] = content[1]
# print(replace_content)
# {'<姓名>': '韩梅梅', '<性别>': '女士', '<今天日期>': '2021-01-01'}
# {'<姓名>': '李雷', '<性别>': '先生', '<今天日期>': '2021-01-01'}
generat_invitation()
if __name__ == '__main__':
get_customer(customer)
总结
在对不同类型文件进行合并时,要考虑不同的问题
- 对于支持格式丰富不同的文件时要考虑格式的兼容性;
- 对于图片、音乐、视频和Word合并时要考虑是否是受到word支持的通用格式;
- 对于像Excel格式于Word合并时能实现更复杂的功能,代码的复杂程度也会随之提高,一 般需要先分析功能,再进行代码编写。