前言
在我們的作業中,面臨著大量的重復性作業,通過人工方式處理往往耗時耗力易出錯,而Python在自動化辦公方面具有極大的優
勢,可以解決我們作業中遇到的很多重復性問題,分分鐘搞定辦公需求,快速下班回家陪老婆…

一、背景
在我們經濟交往中,有時會涉及到銷售合同的批量制作,比如我們需要根據如下合同資料(Excel),進行批量生成銷售合同
(Word),

二、準備
我們首先要準備好一份合同模板(Word),將需要替換的合同資料用{{}}表示,如下:
三、實戰
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["甲方"]}的銷售合同已生成')
代碼運行后,效果如下:
打開其中一個銷售合同,效果如下:
最后
有沒有學會呀!!今天這個案例還是十分簡單的,適合小白拿來練手手,想要動手操作的小伙伴趁熱打鐵,現在就趕緊去碼一
波,對于這篇文章不懂或者有疑惑的,都可以在評論區告訴我…
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/494355.html
標籤:其他
