假設某日我開了一家空調公司,暫且就叫他天強空調安裝設備公司吧,假裝自己有公司,接了一單大生意,就是給甘肅省的各個高校安裝空調(其實這邊的氣候基本用不到空調,就是假想一下),那么接下來就是面臨簽訂合同,甘肅省這么多高校就得簽訂幾百份合同,有什么快捷方式呢?
毋庸置疑,我們優(yōu)先使用Python解決這一問題,Python可是實現辦公自動化的利器,本節(jié)使用Python批量生成合同,學會這個即可解決重復錄制合同的問題,下面一起學習~
示例工具:anconda3.7
本文講解內容:openpyxl、docxtpl庫的使用
適用范圍:Python批量生成合同
Python庫安裝
首先安裝本節(jié)需要使用的兩個包,openpyxl和docxtpl庫,在代碼行里面使用下方的命令即可安裝完成。
!pip install openpyxl!pip install docxtpl
當出現Successfully installed的字樣時,表明安裝成功。
設置合同模板
設置一個合同模板,在文檔插入數據的地方插入類似于{{ a }}的標簽,傳入字典{{ “a”: 1234 }} 就能在標簽上渲染出數據1234,其他下劃線的設置原理均類似。
其實本文使用Python批量生成合同的做法與Word中的郵件合并批量生成合同的做法類似,代碼更加靈活和高效。
導入合同數據
導入提前錄制好的合同數據,包括甲方、乙方、產品名稱等字段信息,并且將簽約日期轉換為字符型。
import pandas as pdfrom openpyxl.utils.dataframe import dataframe_to_rowsdf = pd.read_excel(r’C:Users尚天強Desktop各高校空調合同.xlsx’)df[“簽約日期”] = df[“簽約日期”].apply(lambda x:x.strftime(“%Y-%m-%d”))datas = []df
循環(huán)遍歷每一行數據,并將其存入到一個字典中,使用append函數將這些字典合并,打印結果如下所示。
for row in dataframe_to_rows(df,index=False,header=False): data = {“甲方”: row[0], “乙方”: row[1], “產品名稱”: row[2], “產品價格”: row[3], “保修期”: row[4], “簽約日期”: row[5]} datas.append(data)datas
此外還可以使用openpyxl庫將合同數據導入字典,原理與上面代碼導入的方式一樣。
from openpyxl import load_workbookwb = load_workbook(r’C:Users尚天強Desktop各高??照{合同.xlsx’)ws = wb[‘Sheet1’]datas = []for row in range(2, ws.max_row): A = ws[f”A{row}”].value B = ws[f”B{row}”].value C = ws[f”C{row}”].value D = ws[f”D{row}”].value E = ws[f”E{row}”].value F = ws[f”F{row}”].value F = F.strftime(“%Y-%m-%d”) data = {“甲方”: A, “乙方”: B, “產品名稱”: C, “產品價格”: D, “保修期”: E, “簽約日期”: F} datas.append(data)datas
插入合同數據
導入docxtpl庫,提前導入之前創(chuàng)建的合同文檔模板,使用render函數渲染{}中的內容,從而達到批量插入數據的目的。
from docxtpl import DocxTemplatefor data in datas: tpl = DocxTemplate(r’C:Users尚天強Desktop各高校安裝空調合同書.docx’) tpl.render(data) tpl.save(r’C:Users尚天強Desktop合同生成{}的空調安裝合同.docx’.format(data[‘甲方’])) print(‘{}的空調安裝合同……已生成’.format(data[‘甲方’]))
代碼封裝
將以上所有的代碼進行封裝,一鍵運行,即可得到如下生成的docx合同文檔。
import pandas as pdfrom openpyxl.utils.dataframe import dataframe_to_rowsfrom docxtpl import DocxTemplatedf = pd.read_excel(r’C:Users尚天強Desktop各高??照{合同.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]} datas.append(data)for data in datas: tpl = DocxTemplate(r’C:Users尚天強Desktop各高校安裝空調合同書.docx’) tpl.render(data) tpl.save(r’C:Users尚天強Desktop合同生成{}的空調安裝合同.docx’.format(data[‘甲方’])) print(‘{}的空調安裝安裝合同已生成’.format(data[‘甲方’]))
打開任意的一個合同書,我們看到已經在原有的下劃線處插入了合同數據。
以上就是作者使用Python寫了一個小腳本,輕松實現批量生成合同文檔,大家可以親自動手實現一下,解決重復的手工勞動,刻不容緩,學習Python辦公自動化正當時。
三年互聯(lián)網數據分析經驗,擅長Excel、SQL、Python、PowerBI數據處理工具,數據可視化、商業(yè)數據分析技能,統(tǒng)計學、機器學習知識,持續(xù)創(chuàng)作數據分析內容,點贊關注,不迷路。