背景
根据学生成绩汇总表,生成每个学生的成绩单,假设一个高校有5000人,需要生成5000份成绩单,每个成绩单如果有10个数据,这就是50000个数据,而且单条数据规律性低,如果通过人工生成所有学生成绩单将是一个重复性高、数据量大、技术含量低的场景;借助工具,既能速度快、准确率高,还能降低人力成本浪费;
所需文件及其布局:
文件解读:
result文件夹
:用于存放生成每个学生的成绩单;
demo1.py
: 可以执行的文件;
xx大学成绩汇总.xls
:成绩表包含着每个学生的成绩及其他信息;
成绩单demo.docx
:成绩单的模板;
文件内容
xx大学成绩汇总.xls
成绩单demo.docx
全部代码:
import xlrd
from mailmerge import MailMerge
from datetime import datetime
# 按行读取数据
def read_excel(path):
# 打开工作薄
workbook = xlrd.open_workbook(path)
# 获取第一个sheet表格
table = workbook.sheets()[0]
# 获取行数
rows = table.nrows
# 循环获取每行的数据
row_datas = []
for row in range(1, rows):
row_data = table.row_values(rowx=row, start_colx=0, end_colx=None)
row_datas.append(row_data)
return row_datas
def gen_doc(template, infos):
for info in infos:
print(f"正在处理:{str(info[0])}")
document = MailMerge(template)
document.merge(name=str(info[0]),
sex=str(info[1]),
id=str(info[2])[:-2],
addr=str(info[3]),
zz=str(info[4]),
sx=str(info[5]),
yy=str(info[6]),
date=str(datetime.now().date()))
document.write('./result/XX大学学生成绩单' + info[0] + '.docx')
if __name__ == '__main__':
print("start")
path_excel = r'xx大学成绩汇总.xls'
template = '成绩单demo.docx'
infos = read_excel(path_excel)
gen_doc(template, infos)
print("end")
结果:
内容: