Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家

前言

在我们的工作中,面临着大量的重复性工作,通过人工方式处理往往耗时耗力易出错。而Python在自动化办公方面具有极大的优

有潜力,我们可以解决工作中遇到的许多重复问题,在几分钟内满足办公需求。赶快下班回家和你的妻子在一起。

[En]

Potential, we can solve many repetitive problems encountered in our work, and meet the office needs in minutes. Hurry home from work to be with your wife.

; 一、背景

在我们经济交往中,有时会涉及到销售合同的批量制作。比如我们需要根据如下合同数据(Excel),进行批量生成销售合同

(Word)。

Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家
Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家

二、准备

我们首先要准备好一份合同模板(Word),将需要替换的合同数据用{{}}表示,如下:

Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家

; 三、实战

1.安装相关库

openpyxl是一个操作Excel非常好用的库,功能相对于xlrd、xlwt来说更为完整,我们首先安装它:

pip install openpyxl

docxtpl 是一个操作Word非常好用的库,其主要通过对docx文档模板加载,从而对其进行修改,我们也安装下这个库。

pip install docxtpl

; 2.读取合同数据

我们可以通过load_workbook方法打开合同数据(Excel表),然后读取每一个合同数据并存入到data字典,再将每个字典放入到

列表datas中。PS:由于读取的签约日期是一个时间戳,需要通过strftime方法转为标准的年月日格式。

python学习交流Q群:906715085####
from docxtpl import DocxTemplate
from openpyxl import load_workbook

wb = load_workbook("合同数据.xlsx")
ws = wb['Sheet1']
datas = []
for row in range(2, ws.max_row):
    name1 = ws[f"A{row}"].value
    name2 = ws[f"B{row}"].value
    price = ws[f"C{row}"].value
    product = ws[f"D{row}"].value
    count = ws[f"E{row}"].value
    deadline = ws[f"F{row}"].value
    time = ws[f"G{row}"].value
    time = time.strftime("%Y-%m-%d")
    data = {"甲方": name1,
            "乙方": name2,
            "合同价款": price,
            "产品名称": product,
            "产品数量": count,
            "付款期限": deadline,
            "签约时间": time}
    datas.append(data)
datas

当然,我们也可以通过pandas大法来读取合同数据,主要运用到dataframe_to_rows方法,将pandas格式的数据转为一行一行的

数据。index=False表示不需要索引,header=False表示不需要表头。

import pandas as pd
from openpyxl.utils.dataframe import dataframe_to_rows

df = pd.read_excel("合同数据.xlsx")
df["签约日期"] = df["签约日期"].apply(lambda x:x.strftime("%Y-%m-%d"))
datas = []
for row in dataframe_to_rows(df,index=False,header=False):
    data = {"甲方": row[0],
            "乙方": row[1],
            "合同价款": row[2],
            "产品名称": row[3],
            "产品数量": row[4],
            "付款期限": row[5],
            "签约时间": row[6]}
    datas.append(data)
datas

我们可以打印datas,效果如下:

[{'甲方': 'J哥',
  '乙方': '老王',
  '合同价款': 1000000,
  '产品名称': '菜J学Python',
  '产品数量': 1,
  '付款期限': 30,
  '签约时间': '2022-05-20'},
 {'甲方': 'K哥',
  '乙方': '张三',
  '合同价款': 20000,
  '产品名称': '冰箱',
  '产品数量': 2,
  '付款期限': 40,
  '签约时间': '2022-05-21'},
 {'甲方': 'C哥',
  '乙方': '李四',
  '合同价款': 30000,
  '产品名称': '电脑',
  '产品数量': 3,
  '付款期限': 50,
  '签约时间': '2022-05-22'},
 {'甲方': 'B哥',
  '乙方': '王五',
  '合同价款': 40000,
  '产品名称': '洗衣机',
  '产品数量': 4,
  '付款期限': 60,
  '签约时间': '2022-05-23'},
 {'甲方': 'P哥',
  '乙方': '赵六',
  '合同价款': 50000,
  '产品名称': '微波炉',
  '产品数量': 5,
  '付款期限': 70,
  '签约时间': '2022-05-24'}]

3.批量合同生成

这里运用for语句遍历每一个合同数据data(字典格式),打开合同模板,并将data替换掉合同模板中的数据,然后保存为新的销售合同。

for data in datas:
    tpl = DocxTemplate('合同模板.docx')
    tpl.render(data)
    tpl.save(f'合同生成/{data["甲方"]}的销售合同{data["签约时间"]}.docx')
    print(f'{data["甲方"]}的销售合同已生成')

代码运行后,效果如下:

Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家

打开其中一份销售合同,效果如下:

[En]

Open one of the sales contracts and the effect is as follows:

Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家

最后

你学会了吗?!今天的案子还是很简单,适合菜鸟练手。如果你想趁热打铁,现在就赶紧编写代码吧。

[En]

Have you learned it?! Today’s case is still very simple and suitable for rookies to practice their hands. If you want to strike while the iron is hot, hurry to code one now.

波。如果你对这篇文章不理解或有疑问,你可以在评论区告诉我。

[En]

Bo. If you don’t understand or have doubts about this article, you can tell me in the comments section.

Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家

Original: https://www.cnblogs.com/1234567FENG/p/16398159.html
Author: 蚂蚁爱Python
Title: Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/499283/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球