python批量生成列表_Python编程实战:根据数据表格,快速批量生成符合规范的WORD文档...

也许你会遇到一个需求,需要批量制作给很多人的信,这些信的内容结构上都是一样的,只有一些细节是不一样的,那么你该怎么完成这个需求? 是一个个复制word内容吗?

实际案例

这里给大家介绍一个强大的功能,通过使用word的mergedField功能生成规范的word模板,在这里,给大家举个例子。我们的例子是个很贴近收物业费的例子,我们从excel中都能看到一个小区的业主姓名、单元号、楼层号、面积、物业费等信息,这里要针对每一个户生成一个单独的word文件。

我们先看一下这个excel的内容:

119991b036a44d9fdad6166db6df615e.png

小区业主表

让我们再看一下这个小区的收取物业费的word的内容:

尊敬的XXX业主:

感谢您选择魏蜀吴小区,现小区收取2020年物业费,您位于X号楼X单元X号的房子共需要缴纳物业费XX元(XX平方米*2.2元/平方米),请您在看到该收据之后于本月月底到物业缴纳物业费,感谢您的支持。

魏蜀吴小区物业敬上

39a163743d982f23b0d54bdf92957526.png

小区物业费的通知单

如果按照例子中的生成10个用户的信息我们通过复制粘贴的方式还能生成,但是小区都有几百户居民,这么再采用复制粘贴的模式就太痛苦了。

MergedField

我们用mergedField的模式,所谓MergedField也就是合并域,这里叫合并域是为了从外面加参数自动加载生成一份这样的文档。通过下面的动图,我们来告诉你怎么加入一

个mergedField:

5acdc7f42caa437e76038dbad6eb2edc.png

上面的方式就是插入一个meregeField的方法,插入->文档部件->域->mergeField 然后在弹出来的对话框中填上域的名字就可以了。

当然我们还是需要先找到有这样能力的包,这个包叫mailmerge,我们通过

pip install mailmerge --user

把这个能力引入到python环境中。

代码实战

代码类似下面这样:

#coding:utf-8

import xlrd

from mailmerge import MailMerge

import os

#下面读取excle的内容然后进行存储

workbook = xlrd.open_workbook("word1.xlsx")

#下面对worksheet创建目录

work_sheet_list = workbook.sheet_names()

print(work_sheet_list)

for Sheet_Name in work_sheet_list:

try:

worksheet = workbook.sheet_by_name(Sheet_Name)

sheet_rows = worksheet.nrows

isExists = os.path.exists(Sheet_Name)

if not isExists:

os.makedirs(Sheet_Name)

# 从第二行开始

i = 1

# 一共有10行

end = sheet_rows print(end)

while i < end:

userName = worksheet.cell(i, 1).value

print(userName)

build_num = worksheet.cell(i, 2).value

unit_num = worksheet.cell(i, 3).value

hu_num = worksheet.cell(i, 4).value

squre = worksheet.cell(i, 5).value

squre_str = str(squre)

print(squre)

print(type(squre_str))

squre_money = float(squre) * 2.2

squre_money_str = str(squre_money)

template = "尊敬的XXX业主.docx"

document = MailMerge(template)

print(document.get_merge_fields())

document.merge(

BuildingN = str(build_num),

BuildingNum = str(build_num),

Num = str(hu_num),

Money = squre_money_str,

Square = squre_str )

print(Sheet_Name)

print(userName)

document.write(Sheet_Name + "\\" + userName + ".docx")

i += 1 print (i)

except ():

pass

最后生成的文档就是这样的样子:

a15eb210e04e1891908eac0fa89495cb.png

最终,生成的文档都在被保存在程序目录下面。如果采用这种方式,是不是非常方便?心动了吗?你也自己试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值