提出问题
一个仪器设备采购公司,商品合同采购需要按模版生成的固定的文件,模板是固定的,只是每次需要替换信息,然后打印出来寄给客户。
传统方法
如果手工来做这个事情,准备好数据之后,需要从Excel表格中复制粘贴数据,再到word中去替换,每次至少需要3分钟的时间。假如每天要开100份,则至少要花5个小时。这样就太浪费人力时间了,而且手工编辑word很容易出错。
爽解决
可不可用python写个程序,快速、秒级解决这个问题呢?
结论当然是肯定的!
提前准备好word模板,准备写入word文档的内容,我们使用Python直接读写word模块,通过读取Excel表格中的信息,批量替换内容并生成word文件。秒级完成重复工作,提升办公效率!
代码实现
## 导入包
from docx import Document
import pandas as pd
## 读入合同信息表
df = pd.read_excel('./合同信息表.xlsx')
## 将读取到的每一个值都放到文本中去替换对应的值
# 一行行取出数据
for i in range(len(df)):
## 读取合同模板 Word 文件
doc = Document('./修改模板.docx')
# 所有段落
all_paragraphs = doc.paragraphs
# 所有表格
all_tables = doc.tables
# 一列列取出数据
for j in df.columns:
# 将每一个元素都在段落里进行对应替换
# 遍历每个段落
for paragraph in all_paragraphs:
# 遍历段落的最小单元run
for run in paragraph.runs:
# 替换
run_text = run.text.replace(j, str(df.loc[i,j]))
# 新的内容赋值回原段落
run.text = run_text
# 将每一个元素都在表格里进行对应替换
# 遍历表格
for table in all_tables:
# 遍历行
for row in table.rows:
# 遍历单元格
for cell in row.cells:
# 替换
cell_text = cell.text.replace(j, str(df.loc[i,j]))
# 新的内容赋值回原表格
cell.text = cell_text
## 替换完成后的doc生成新的word文件
doc.save(f"./修改后的合同/{df.loc[i,'xBuyerx']}合同.docx")
实现效果: