背景
日常项目中每周需要召开项目周会,会议纪要和会议周报是必不可少的一项内容,会议纪要要求监理方会后发送给参会方成员,周报为每周在excel表格中新增内容。项目验收环境中有一项内容是需要汇总会议纪要和会议周报,会议纪要每次都已经发布,直接使用即可,会议周报在excel中(此处可能会有人问,为什么会议周报不是每次会后发送出来?历史原因、项目懈怠)立足当下,按目前的情况去完成。
环境
项目 | 版本 |
---|---|
office | 2019 |
ubuntu | 22.04.1 LTS |
python | 3.10.4 |
windows | 10 |
wsl | 1 |
功能需求
源数据-excel
模板文件-word
功能说明
使用pytohn程序读取weekly.xlsx
文件中的数据,调用平台二期建设项目周报.docx
文件模板,批量生成周报并保存到output文件夹中
目录说明
项目名称 | 说明 |
---|---|
weekly.py | 处理程序 |
weekly_3.xlsx | 源数据 |
平台二期建设项目周报 | 模板文件 |
output | 批量生成的文件目录 |
程序实现
import pandas as pd
from docxtpl import DocxTemplate
import datetime
def main():
df = pd.read_excel("weekly_3.xlsx", index_col='序号', engine="openpyxl")
for name, row in df.iterrows():
print("生成第: ", name)
start_date = row["开始时间"].strftime("%Y-%m-%d")
end_date = row["结束时间"].strftime("%Y-%m-%d")
pro_ans = str(row["问题分析"]).split('\n')
pro_ans_b = pro_ans[1:]
doc = DocxTemplate("平台二期建设项目周报.docx")
dic = dict(
序号 = name,
开始时间=row["开始时间"].strftime("%Y-%m-%d"),
结束时间=row["结束时间"].strftime("%Y-%m-%d"),
本周工作内容=row["本周工作内容"],
问题分析=row["问题分析"],
)
ix = 0
for item in range(str(row["问题分析"]).count('\n')):
ix += 1
dic[f"case{ix}"] = pro_ans_b[item]
doc.render(dic)
doc.save(f"./output/平台二期建设项目周报({start_date}~{end_date}).docx")
if __name__ == '__main__':
main()
运行
$ python3 weekly.py
效果图